Roll20 uses cookies to improve your experience on our site. Cookies enable you to enjoy certain features, social sharing functionality, and tailor message and display ads to your interests on our site and others. They also help us understand how our site is being used. By continuing to use our site, you consent to our use of cookies. Update your cookie preferences .
×
Create a free account

CRP Question

So i have just started playing around with CRP, so im still new to it. my question is can you use CRP to grad the value of a roll and add it or subtract it from an object in your character sheet? For example: In the game im making a sheet for you only lose ammo on your weapon if you roll a 1 or a 2 on ammo dice roll. is there a way to have CRP look at what was rolled and subtract if the dice was a 1 or a 2? im still reading and trying to learn all the things you can do with CRP so sorry if this is a dumb question.
1713209820
GiGs
Pro
Sheet Author
API Scripter
Yes you can do that. You might find this helpful: <a href="https://cybersphere.me/guide-to-custom-roll-parsing/" rel="nofollow">https://cybersphere.me/guide-to-custom-roll-parsing/</a>
So i have tried a few things to get this to work. Im trying to make things as easy for my players as possible. and im am enjoying setting up the sheet to be very automated. this is the 9 version of the sheet. it has improved every time i learn something new. But i feel like i may be trying to do something roll20s capabilities or if it is my lack of knowledge that is causing the problem, Im sure its the second. I have learned most of what i know from reverse engineering what other have done and using the&nbsp; cybersphere.me . I will explain what im trying to do and maybe someone can tell me if what i'm doing is possible, and maybe give me a simple example to pull apart or tell me if it can be done.&nbsp; When players make an attack roll. they click the button. the roll i have set up right now for testing is this.&nbsp; &lt;script type="text/worker"&gt;&lt;!-- Weapon 1 Attack --&gt; &nbsp;&nbsp;&nbsp;&nbsp;on('clicked:weapon_1_attack', () =&gt; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;startRoll('&amp;{template:default} {{name=@{charactername} @{weapon_1_name}}} {{attack=[[1d20+@{weapon_1_attck_total}]]}} {{Damage 1=[[@{weapon_1_damage_1_roll}]]}}', weapon_1_attack =&gt; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;finishRoll(weapon_1_attack.rollId); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;}); &lt;/script&gt; I have the damage 1 to equal a value of a hidden input.&nbsp; &lt;input name="attr_weapon_1_dmage_1_roll" class="text025" type="hidden" &gt; Then i have a if script that should change the value of&nbsp; weapon_1_damage_1_roll &nbsp;&nbsp;to equal one of the values below.&nbsp; &lt;input name="attr_weapon_1_damage_1_damg_roll" class="text025" type="hidden" value="@{weapon_1_damage_1_qty}d@{weapon_1_damage_2_face}+@{weapon_1_damage_1_bonus}"&gt; &lt;input name="attr_weapon_1_damage_1_crit_roll" class="text025" type="hidden" value="@{weapon_1_damage_1_qty}d@{weapon_1_damage_2_face}+@{weapon_1_damage_1_bonus}+(@{weapon_1_damage_1_qty}*@{weapon_1_damage_2_face})"&gt; I can get the roll to work when i have a test input set up but&nbsp; I can't seem to get anything to read the dice value that is rolled.&nbsp; here is the script i used to the test input. &lt;script type="text/worker"&gt;&lt;!-- Proficiency --&gt; &nbsp;&nbsp;&nbsp;&nbsp;on('sheet:opened change:weapon_1_attack_value', function() { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getAttrs(['weapon_1_attack_value','weapon_1_damage_1_damg_roll','weapon_1_damage_1_crit_roll'], function(values) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const weapon_1_attack_value = parseInt(values.weapon_1_attack_value) || 0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let weapon_1_dmage_1_roll = '@{weapon_1_damage_1_damg_roll}'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (weapon_1_attack_value &gt;= 19) {weapon_1_dmage_1_roll = '@{weapon_1_damage_1_crit_roll}';} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if (weapon_1_attack_value &lt;=18) {weapon_1_dmage_1_roll = '@{weapon_1_damage_1_damg_roll}';} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setAttrs({weapon_1_dmage_1_roll: weapon_1_dmage_1_roll}); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;}); &lt;/script&gt; Am i going about this the wrong way? if so what is a different/better way to do this?
1714428425

Edited 1714428510
GiGs
Pro
Sheet Author
API Scripter
There's a lot of pieces there. Can you give the html for every attribute mentioned? I don't know if there is another way to do what you want. I'd be looking to see if there's a way to do it with a rollbutton - I see no reason to use the complexity of CRP here. As an aside, it looks like you have each sheet wqorker in its own script block. You only need this once: &lt;script type="text/worker"&gt; /* all sheet workers go here- every single one. &lt;/script&gt; lines like this make me wonder if there are typos: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (weapon_1_attack_value &gt;= 19) {weapon_1_dmage_1_roll = '@{weapon_1_damage_1_crit_roll}';} some attributes use weapon_1_ dmage while others use weapon_1_ damage . Also using weapon_1_ something makes me wonder if this is using too many hardcoded attribute names - which is another reason to want to see the html.
i can send all HTML for the roll it is a lot. Yes there were some typos i realized after i sent the message. I will&nbsp; &nbsp;also send you a clip of what the attack lines area of the sheet looks like.&nbsp; Here is what the full sheet looks like.&nbsp; and below is what a closer look at the weapon section. The green is what the payer will see normally. there will be 12 of those line which is why you have the weapon_1 in the names. weapon_1 just helps me keep all the information straight.&nbsp; 1. is a visibility box. when the player click that the information settings for the attack show up.(2-7) 2. is the line for attacks. and the check box has a value. to determine the roll information.&nbsp; 3-5 are the weapons damage types. each one also has a value. To help determine what is rolled.&nbsp; 6 is line for saving throw information. again the check box has a value to help determine what is rolled. 7. is information that will change attack and damage stats depending on the ability's they have selected. (Ability tab has not been added the test sheet yet. The inputs at the very bottom are placeholders for those abilities. They also have not been set up for the test yet.&nbsp; when i am making the sheet to make sure each part of a roll works i add them one at a time. example i tested the attack roll and all the bones one or two at a time to make sure they worked before i moved to the damage. which is where i ran into trouble. I know testing like that is the long way of building. but it helps me catch mistakes as they come and i dont have to waste time trying to figure out where i have an issue.&nbsp; Below is the HTML for the attack line i have right now.&nbsp; this should have everything you are looking for to help.&nbsp; &lt;div class="section4"&gt;&lt;!-- Weapon Attacks --&gt; &lt;div class="weapon_header"&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;Attack&lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;Damage&lt;/h6&gt; &lt;h6&gt;Range&lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;Ammo&lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;Range&lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;Multipler&lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;Save&lt;/h6&gt; &lt;/div&gt; &lt;div class="weapon"&gt;&lt;!-- Weapon 1 --&gt; &lt;div class="weapon_attack_line"&gt;&lt;!-- Weapon Displays --&gt; &lt;button name="act_weapon_1_attack"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; class="button1"&nbsp; &nbsp;type="action"&gt;1.&lt;/button&gt; &lt;input&nbsp; name="attr_weapon_1_name"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;class="text200"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value="Weapon Name"&gt; &lt;h4&gt;&amp;nbsp &lt;/h4&gt; &lt;input&nbsp; name="attr_weapon_1_to_hit_display"&nbsp; &nbsp;class="text030"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value="@{weapon_1_attck_total}" disabled&gt; &lt;h4&gt;&amp;nbsp &lt;/h4&gt; &lt;input&nbsp; name="attr_weapon_1_damage_display"&nbsp; &nbsp;class="text135"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;&gt; &lt;input&nbsp; name="attr_weapon_1_range_display"&nbsp; &nbsp; class="text090"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value="0"&gt; &lt;h4&gt;&amp;nbsp &lt;/h4&gt; &lt;select name="attr_weapon_1_ammo"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;class="text050"&nbsp; &nbsp;type="text"&gt; &lt;option value="5000"&gt;--&lt;/option&gt; &lt;option value="5001"&gt;0&lt;/option&gt; &lt;option value="5002"&gt;1&lt;/option&gt; &lt;option value="5003"&gt;2&lt;/option&gt; &lt;option value="5004"&gt;3&lt;/option&gt; &lt;option value="5005"&gt;4&lt;/option&gt; &lt;option value="5006"&gt;5&lt;/option&gt; &lt;option value="5007"&gt;6&lt;/option&gt; &lt;option value="5008"&gt;7&lt;/option&gt; &lt;option value="5009"&gt;8&lt;/option&gt; &lt;option value="5010"&gt;9&lt;/option&gt; &lt;option value="5011"&gt;10&lt;/option&gt; &lt;option value="5012"&gt;11&lt;/option&gt; &lt;option value="5013"&gt;12&lt;/option&gt; &lt;option value="5014"&gt;13&lt;/option&gt; &lt;option value="5015"&gt;14&lt;/option&gt; &lt;option value="5016"&gt;15&lt;/option&gt; &lt;/select&gt; &lt;input&nbsp; name="attr_weapon_1_max_ammo_display" class="text030"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value="0"&gt; &lt;h4&gt;&amp;nbsp &lt;/h4&gt; &lt;input&nbsp; name="attr_weapon_1_crit_range"&nbsp; &nbsp; &nbsp; &nbsp;class="text040"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value="0"&gt; &lt;input&nbsp; name="attr_weapon_1_crit_box"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;class="text025"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value="X"&gt; &lt;input&nbsp; name="attr_weapon_1_crit_mutiplyer"&nbsp; &nbsp;class="text040"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value="0"&gt; &lt;h4&gt;&amp;nbsp &lt;/h4&gt; &lt;input&nbsp; name="attr_weapon_1_save_display"&nbsp; &nbsp; &nbsp;class="text080"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value="0"&gt; &lt;/div&gt; &lt;input&nbsp; name="attr_weapon_1" class="toggle"&nbsp; &nbsp; type="hidden"&nbsp; &nbsp;value="0"&gt; &lt;input&nbsp; name="attr_weapon_1" class="checkbox2" type="checkbox" value="1"&gt; &lt;div class="weapon_1_traits"&gt; &lt;div class="weapon_line_1"&gt;&lt;!-- Attack Header --&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;Attack Total&lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;Proficient&lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;Attack Stat&lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;Attack Bonus&lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;Attack Quality&lt;/h6&gt; &lt;/div&gt; &lt;div class="weapon_line_1"&gt;&lt;!-- Attack Info --&gt; &lt;input&nbsp; name="attr_weapon_1_attack_yes"&nbsp; &nbsp; &nbsp;class="checkbox2" type="checkbox" value="100"&gt; &lt;input&nbsp; name="attr_weapon_1_attck_total"&nbsp; &nbsp; class="text040"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value="@{weapon_1_proficiency}+@{weapon_1_stat}+@{weapon_1_attck_bonus}+@{weapon_1_quality}" disabled&gt; &lt;h4&gt;&amp;nbsp &lt;/h4&gt; &lt;input&nbsp; name="attr_weapon_1_proficiency"&nbsp; &nbsp; class="checkbox2" type="checkbox" value="@{proficiency}"&gt; &lt;h4&gt;&amp;nbsp &lt;/h4&gt; &lt;select name="attr_weapon_1_stat"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;class="text060"&gt; &lt;option value="0"&gt;---&lt;/option&gt; &lt;option value="@{str_Mod}"&gt;STR&lt;/option&gt; &lt;option value="@{dex_Mod}"&gt;DEX&lt;/option&gt; &lt;option value="@{con_Mod}"&gt;CON&lt;/option&gt; &lt;option value="@{itl_Mod}"&gt;INT&lt;/option&gt; &lt;option value="@{wis_Mod}"&gt;WIS&lt;/option&gt; &lt;option value="@{cha_Mod}"&gt;CHA&lt;/option&gt; &lt;/select&gt; &lt;h4&gt;&amp;nbsp &lt;/h4&gt; &lt;input&nbsp; name="attr_weapon_1_attck_bonus"&nbsp; &nbsp; class="text040"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value="0"&gt; &lt;h4&gt;&amp;nbsp &lt;/h4&gt; &lt;select name="attr_weapon_1_quality"&nbsp; &nbsp; &nbsp; &nbsp; class="text150"&gt; &lt;option value="0"&gt;Common&lt;/option&gt; &lt;option value="1"&gt;Well Crafted&lt;/option&gt; &lt;option value="2"&gt;Professional Crafted&lt;/option&gt; &lt;option value="3"&gt;Military Crafted&lt;/option&gt; &lt;/select&gt; &lt;/div&gt; &lt;div class="weapon_line_2a"&gt;&lt;!-- Damage Header --&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;Damage&lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;Damage Type&lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;Damage Bonus&lt;/h6&gt; &lt;/div&gt; &lt;div class="weapon_line_2b"&gt;&lt;!-- Damage Info --&gt; &lt;input&nbsp; name="attr_weapon_1_damage_1"&nbsp; &nbsp; &nbsp; &nbsp;class="checkbox2" type="checkbox" value="1"&gt; &lt;h4&gt;&amp;nbsp &lt;/h4&gt; &lt;input&nbsp; name="attr_weapon_1_info_1"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;class="text100"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value="Damage 1" readonly&gt; &lt;h4&gt;&amp;nbsp &lt;/h4&gt; &lt;input&nbsp; name="attr_weapon_1_damage_1_qty"&nbsp; &nbsp;class="text025"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value="1"&gt; &lt;input&nbsp; name="attr_weapon_1_dice"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;class="text025"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value="d" disabled&gt; &lt;input&nbsp; name="attr_weapon_1_damage_1_face"&nbsp; class="text025"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value="6"&gt; &lt;h4&gt;&amp;nbsp &lt;/h4&gt; &lt;input&nbsp; name="attr_weapon_1_damage_1_type"&nbsp; class="text100"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value=""&gt; &lt;h4&gt;&amp;nbsp &lt;/h4&gt; &lt;input&nbsp; name="attr_weapon_1_damage_1_bonus" class="text040"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value=""&gt; &lt;input&nbsp; name="attr_weapon_1_damage_2"&nbsp; &nbsp; &nbsp; &nbsp;class="checkbox2" type="checkbox" value="3"&gt; &lt;h4&gt;&amp;nbsp &lt;/h4&gt; &lt;input&nbsp; name="attr_weapon_1_info_2"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;class="text100"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value="Damage 2" readonly&gt; &lt;h4&gt;&amp;nbsp &lt;/h4&gt; &lt;input&nbsp; name="attr_weapon_1_damage_2_qty"&nbsp; &nbsp;class="text025"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value=""&gt; &lt;input&nbsp; name="attr_weapon_1_dice"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;class="text025"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value="d" disabled&gt; &lt;input&nbsp; name="attr_weapon_1_damage_2_face"&nbsp; class="text025"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value=""&gt; &lt;h4&gt;&amp;nbsp &lt;/h4&gt; &lt;input&nbsp; name="attr_weapon_1_damage_2_type"&nbsp; class="text100"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value=""&gt; &lt;h4&gt;&amp;nbsp &lt;/h4&gt; &lt;input&nbsp; name="attr_weapon_1_damage_2_bonus" class="text040"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value=""&gt; &lt;input&nbsp; name="attr_weapon_1_damage_3"&nbsp; &nbsp; &nbsp; &nbsp;class="checkbox2" type="checkbox" value="5"&gt; &lt;h4&gt;&amp;nbsp &lt;/h4&gt; &lt;input&nbsp; name="attr_weapon_1_info_3"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;class="text100"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value="Damage 3" readonly&gt; &lt;h4&gt;&amp;nbsp &lt;/h4&gt; &lt;input&nbsp; name="attr_weapon_1_damage_3_qty"&nbsp; &nbsp;class="text025"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value=""&gt; &lt;input&nbsp; name="attr_weapon_1_dice"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;class="text025"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value="d" disabled&gt; &lt;input&nbsp; name="attr_weapon_1_damage_3_face"&nbsp; class="text025"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value=""&gt; &lt;h4&gt;&amp;nbsp &lt;/h4&gt; &lt;input&nbsp; name="attr_weapon_1_damage_3_type"&nbsp; class="text100"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value=""&gt; &lt;h4&gt;&amp;nbsp &lt;/h4&gt; &lt;input&nbsp; name="attr_weapon_1_damage_3_bonus" class="text040"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value=""&gt; &lt;/div&gt; &lt;div class="weapon_line_3"&gt;&lt;!-- Save Header --&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;Requier&lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;Successful&lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;Save Stat&lt;/h6&gt; &lt;h6&gt;Save DC&lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;Save AOE&lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;Effects&lt;/h6&gt; &lt;h6&gt;Sight&lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;Save&lt;/h6&gt; &lt;/div&gt; &lt;div class="weapon_line_3"&gt;&lt;!-- Save Info --&gt; &lt;input&nbsp; name="attr_weapon_1_save"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;class="checkbox2" type="checkbox" value="10"&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;select name="attr_weapon_1_save_type"&nbsp; &nbsp; &nbsp; class="text065"&gt; &lt;option value="No Save" selected="selected"&gt;None&lt;/option&gt; &lt;option value="Strength Save DC [[@{weapon_1_save_dc}]]"&gt;STR&lt;/option&gt; &lt;option value="Dexterity Save DC [[@{weapon_1_save_dc}]]"&gt;DEX&lt;/option&gt; &lt;option value="Constitution Save DC [[@{weapon_1_save_dc}]]"&gt;CON&lt;/option&gt; &lt;option value="Intelligence Save DC [[@{weapon_1_save_dc}]]"&gt;INT&lt;/option&gt; &lt;option value="Wisdom Save DC [[@{weapon_1_save_dc}]]"&gt;WIS&lt;/option&gt; &lt;option value="Charisma Save DC [[@{weapon_1_save_dc}]]"&gt;CHA&lt;/option&gt; &lt;/select&gt; &lt;select name="attr_weapon_1_save_dc"&nbsp; &nbsp; &nbsp; &nbsp; class="text065"&gt; &lt;option value="0" selected="selected"&gt;---&lt;/option&gt; &lt;option value="8+@{proficiency}+@{str_Mod}"&gt;STR&lt;/option&gt; &lt;option value="8+@{proficiency}+@{dex_Mod}"&gt;DEX&lt;/option&gt; &lt;option value="8+@{proficiency}+@{con_Mod}"&gt;CON&lt;/option&gt; &lt;option value="8+@{proficiency}+@{itl_Mod}"&gt;INT&lt;/option&gt; &lt;option value="8+@{proficiency}+@{wis_Mod}"&gt;WIS&lt;/option&gt; &lt;option value="8+@{proficiency}+@{cha_Mod}"&gt;CHA&lt;/option&gt; &lt;option value="10"&gt;10&lt;/option&gt; &lt;option value="11"&gt;11&lt;/option&gt; &lt;option value="12"&gt;12&lt;/option&gt; &lt;option value="13"&gt;13&lt;/option&gt; &lt;option value="14"&gt;14&lt;/option&gt; &lt;option value="15"&gt;15&lt;/option&gt; &lt;option value="16"&gt;16&lt;/option&gt; &lt;option value="17"&gt;17&lt;/option&gt; &lt;option value="18"&gt;18&lt;/option&gt; &lt;option value="19"&gt;19&lt;/option&gt; &lt;option value="20"&gt;20&lt;/option&gt; &lt;option value="21"&gt;21&lt;/option&gt; &lt;option value="22"&gt;22&lt;/option&gt; &lt;option value="23"&gt;23&lt;/option&gt; &lt;option value="24"&gt;24&lt;/option&gt; &lt;option value="25"&gt;25&lt;/option&gt; &lt;option value="26"&gt;26&lt;/option&gt; &lt;option value="27"&gt;27&lt;/option&gt; &lt;option value="28"&gt;28&lt;/option&gt; &lt;option value="29"&gt;29&lt;/option&gt; &lt;option value="30"&gt;30&lt;/option&gt; &lt;/select&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;select name="attr_weapon_1_save_area"&nbsp; &nbsp; &nbsp; class="text120"&gt; &lt;option value="" selected="selected"&gt;None&lt;/option&gt; &lt;option value="in targeted Square"&gt;1 Square&lt;/option&gt; &lt;option value="in targeted Square and all Squares 1 away"&gt;3 Squares&lt;/option&gt; &lt;option value="in targeted Square and all Squares 2 away"&gt;5 Squares&lt;/option&gt; &lt;option value="in targeted Square and all Squares 3 away"&gt;7 Squares&lt;/option&gt; &lt;option value="in targeted Square and all Squares 5 away"&gt;9 Squares&lt;/option&gt; &lt;option value="in a 6 square line"&gt;6 Square Line&lt;/option&gt; &lt;option value="in a 8 square line"&gt;8 Square Line&lt;/option&gt; &lt;option value="in a 10 square line"&gt;10 Square Line&lt;/option&gt; &lt;option value="in a 12 square line"&gt;12 Square Line&lt;/option&gt; &lt;option value="in a 2 square cone"&gt;2 Square Cone&lt;/option&gt; &lt;option value="in a 3 square cone"&gt;3 Square Cone&lt;/option&gt; &lt;option value="in a 4 square cone"&gt;4 Square Cone&lt;/option&gt; &lt;option value="in a 5 square cone"&gt;5 Square Cone&lt;/option&gt; &lt;option value="in a 6 square cone"&gt;6 Square Cone&lt;/option&gt; &lt;/select&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;select name="attr_weapon_1_save_target"&nbsp; &nbsp; class="text110"&gt; &lt;option value="all creatures" selected="selected"&gt;All Creatures&lt;/option&gt; &lt;option value="all creatures"&gt;All Creatures&lt;/option&gt; &lt;option value="all enemies"&gt;All Enemies&lt;/option&gt; &lt;option value="all allies"&gt;All Allies&lt;/option&gt; &lt;option value="targeted creature"&gt;1 Creature&lt;/option&gt; &lt;option value="both targeted creature"&gt;2 Creatures&lt;/option&gt; &lt;option value="all 3 targeted creatures"&gt;3 Creatures&lt;/option&gt; &lt;option value="all 4 targeted creatures"&gt;4 Creatures&lt;/option&gt; &lt;option value="all 5 targeted creatures"&gt;5 Creatures&lt;/option&gt; &lt;option value="all 6 targeted creatures"&gt;6 Creatures&lt;/option&gt; &lt;option value="all 7 targeted creatures"&gt;7 Creatures&lt;/option&gt; &lt;option value="all 8 targeted creatures"&gt;8 Creatures&lt;/option&gt; &lt;/select&gt; &lt;select name="attr_weapon_1_save_sight"&nbsp; &nbsp; &nbsp;class="text090"&gt; &lt;option value="that you can see" selected="selected"&gt;Yes&lt;/option&gt; &lt;option value=""&gt;No&lt;/option&gt; &lt;/select&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;select name="attr_weapon_1_save_succcess"&nbsp; class="text080"&gt; &lt;option value="take half damge"&gt;Half&lt;/option&gt; &lt;option value="no effect"&gt;None&lt;/option&gt; &lt;/select&gt; &lt;/div&gt; &lt;div class="weapon_line_4a"&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;Attack Type&lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;Main Hand&lt;/h6&gt; &lt;h6&gt;Off-Hand&lt;/h6&gt; &lt;h6&gt;Rage&lt;/h6&gt; &lt;h6&gt;Familiarity&lt;/h6&gt; &lt;h6&gt;Sneak Attack&lt;/h6&gt; &lt;h6&gt;Max Ammo&lt;/h6&gt; &lt;/div&gt; &lt;div class="weapon_line_4b"&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;h6&gt;&amp;nbsp &lt;/h6&gt; &lt;select name="attr_weapon_1_attack_type"&nbsp; &nbsp; &nbsp; &nbsp; class="text090"&gt; &lt;option value="4000"&gt;Unarmed&lt;/option&gt; &lt;option value="4001"&gt;Melee&lt;/option&gt; &lt;option value="4002"&gt;Thrown&lt;/option&gt; &lt;option value="4003"&gt;Range&lt;/option&gt; &lt;/select&gt; &lt;h4&gt;&amp;nbsp &lt;/h4&gt; &lt;select name="attr_weapon_1_hands"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; class="text065"&gt; &lt;option value="0"&gt;One&lt;/option&gt; &lt;option value="@{Fighting_Style_Powerful_Striker}"&gt;Two&lt;/option&gt; &lt;/select&gt; &lt;select name="attr_weapon_1_off_hand"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;class="text090"&gt; &lt;option value="@{freehand}"&gt;None&lt;/option&gt; &lt;option value="@{shieldhand}"&gt;Shield&lt;/option&gt; &lt;option value="@{weaponhand}"&gt;Weapon&lt;/option&gt; &lt;/select&gt; &lt;input&nbsp; name="attr_weapon_1_rage"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;class="checkbox2" type="checkbox" value="@{Rage_Checkbox}"&gt; &lt;input&nbsp; name="attr_weapon_1_familiarity101"&nbsp; &nbsp; &nbsp;class="text080"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value="0"&gt; &lt;input&nbsp; name="attr_weapon_1_sneakattack101"&nbsp; &nbsp; &nbsp;class="text080"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value="0"&gt; &lt;select name="attr_weapon_1_ammo_max"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;class="text090"&nbsp; &nbsp;type="text"&gt; &lt;option value="6000"&gt;None&lt;/option&gt; &lt;option value="6001"&gt;1&lt;/option&gt; &lt;option value="6002"&gt;2&lt;/option&gt; &lt;option value="6003"&gt;3&lt;/option&gt; &lt;option value="6004"&gt;4&lt;/option&gt; &lt;option value="6005"&gt;5&lt;/option&gt; &lt;option value="6006"&gt;6&lt;/option&gt; &lt;option value="6007"&gt;7&lt;/option&gt; &lt;option value="6008"&gt;8&lt;/option&gt; &lt;option value="6009"&gt;9&lt;/option&gt; &lt;option value="6010"&gt;10&lt;/option&gt; &lt;option value="6011"&gt;11&lt;/option&gt; &lt;option value="6012"&gt;12&lt;/option&gt; &lt;option value="6013"&gt;13&lt;/option&gt; &lt;option value="6014"&gt;14&lt;/option&gt; &lt;option value="6015"&gt;15&lt;/option&gt; &lt;/select&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; here is all the scripts and hidden info.&nbsp; &lt;div&gt;&lt;!--Section 4--&gt; &lt;div&gt;&lt;!--Hidden Fields--&gt; &lt;div&gt;&lt;!--Weapon 1--&gt; &lt;input&nbsp; name="attr_weapon_1_damage_1_damg_roll" class="text025" type="hidden" value="@{weapon_1_damage_1_qty}d@{weapon_1_damage_1_face}+@{weapon_1_damage_1_bonus}"&gt; &lt;input&nbsp; name="attr_weapon_1_damage_1_crit_roll" class="text025" type="hidden" value="@{weapon_1_damage_1_qty}d@{weapon_1_damage_1_face}+@{weapon_1_damage_1_bonus}+(@{weapon_1_damage_1_qty}*@{weapon_1_damage_1_face})"&gt; &lt;input&nbsp; name="attr_weapon_1_dmage_1_roll"&nbsp; &nbsp; &nbsp; &nbsp;class="text025" type="hidden" &gt; &lt;/div&gt; &lt;/div&gt; &lt;div&gt;&lt;!--Scripts--&gt; &lt;div&gt;&lt;!--Weapon 1--&gt; &lt;script type="text/worker"&gt;&lt;!-- Proficiency --&gt; on('sheet:opened change:weapon_1_attack_value', function() { getAttrs(['weapon_1_attack_value','weapon_1_damage_1_damg_roll','weapon_1_damage_1_crit_roll'], function(values) { const weapon_1_attack_value = parseInt(values.weapon_1_attack_value) || 0; let&nbsp; &nbsp; &nbsp; weapon_1_dmage_1_roll = '@{weapon_1_damage_1_damg_roll}'; if&nbsp; &nbsp; &nbsp; (weapon_1_attack_value &gt;= 19) {weapon_1_dmage_1_roll = '@{weapon_1_damage_1_crit_roll}';} else if (weapon_1_attack_value &lt;=18)&nbsp; {weapon_1_dmage_1_roll = '@{weapon_1_damage_1_damg_roll}';} setAttrs({weapon_1_dmage_1_roll: weapon_1_dmage_1_roll}); }); }); &lt;/script&gt; &lt;script type="text/worker"&gt;&lt;!-- Weapon 1 Attack --&gt; on('clicked:weapon_1_attack', () =&gt; { startRoll('&amp;{template:default} {{name=@{charactername} @{weapon_1_name}}} {{attack=[[1d20+@{weapon_1_attck_total}]]}} {{Damage 1=[[@{weapon_1_dmage_1_roll}]]}}', weapon_1_attack =&gt; { finishRoll(weapon_1_attack.rollId); }); }); &lt;/script&gt; &lt;script type="text/worker"&gt;&lt;!-- Weapon Damage Number for Generating Damage Display --&gt; on('sheet:opened change:weapon_1_damage_1 change:weapon_1_damage_2 change:weapon_1_damage_3 ' , function() { getAttrs(['weapon_1_damage_1','weapon_1_damage_2','weapon_1_damage_3'], function(values) { const weapon_1_damage_1 = parseInt(values.weapon_1_damage_1); const weapon_1_damage_2 = parseInt(values.weapon_1_damage_2); const weapon_1_damage_3 = parseInt(values.weapon_1_damage_3); const weapon_1_display_number = weapon_1_damage_1 + weapon_1_damage_2 + weapon_1_damage_3; setAttrs({weapon_1_damage_number: weapon_1_display_number}); });&nbsp; }); &lt;/script&gt; &lt;script type="text/worker"&gt;&lt;!-- Weapon 1 Damage 1 Display --&gt; on('sheet:opened change:weapon_1_damage_1_qty change:weapon_1_damage_1_face change:weapon_1_damage_1_type ' , function() { getAttrs(['weapon_1_damage_1_qty','weapon_1_damage_1_face','weapon_1_damage_1_type'], function(values) { const weapon_1_damage_1_qty&nbsp; = values.weapon_1_damage_1_qty; const weapon_1_damage_1_face = values.weapon_1_damage_1_face; const weapon_1_damage_1_type = values.weapon_1_damage_1_type; const weapon_1_damage = weapon_1_damage_1_qty+"d"+weapon_1_damage_1_face; setAttrs({weapon_1_damage_1_line: weapon_1_damage}); });&nbsp; }); &lt;/script&gt; &lt;script type="text/worker"&gt;&lt;!-- Weapon 1 Damage 2 Display --&gt; on('sheet:opened change:weapon_1_damage_2_qty change:weapon_1_damage_2_face change:weapon_1_damage_2_type ' , function() { getAttrs(['weapon_1_damage_2_qty','weapon_1_damage_2_face','weapon_1_damage_2_type'], function(values) { const weapon_1_damage_2_qty&nbsp; = values.weapon_1_damage_2_qty; const weapon_1_damage_2_face = values.weapon_1_damage_2_face; const weapon_1_damage_2_type = values.weapon_1_damage_2_type; const weapon_2_damage = weapon_1_damage_2_qty+"d"+weapon_1_damage_2_face; setAttrs({weapon_1_damage_2_line: weapon_2_damage}); });&nbsp; }); &lt;/script&gt; &lt;script type="text/worker"&gt;&lt;!-- Weapon 1 Damage 3 Display --&gt; on('sheet:opened change:weapon_1_damage_3_qty change:weapon_1_damage_3_face change:weapon_1_damage_3_type ' , function() { getAttrs(['weapon_1_damage_3_qty','weapon_1_damage_3_face','weapon_1_damage_3_type'], function(values) { const weapon_1_damage_3_qty&nbsp; = values.weapon_1_damage_3_qty; const weapon_1_damage_3_face = values.weapon_1_damage_3_face; const weapon_1_damage_3_type = values.weapon_1_damage_3_type; const weapon_3_damage = weapon_1_damage_3_qty+"d"+weapon_1_damage_3_face; setAttrs({weapon_1_damage_3_line: weapon_3_damage}); });&nbsp; }); &lt;/script&gt; &lt;script type="text/worker"&gt;&lt;!-- Weapon 1 Total Damage Display --&gt; on('sheet:opened change:weapon_1_damage_number change:weapon_1_damage_1_line change:weapon_1_damage_2_line change:weapon_1_damage_3_line', function() { getAttrs(['weapon_1_damage_number','weapon_1_damage_1_line','weapon_1_damage_2_line','weapon_1_damage_3_line'], function(values) { const&nbsp; &nbsp; weapon_1_damage_number&nbsp; = parseInt(values.weapon_1_damage_number)|| 0; const&nbsp; &nbsp; damage_1 = values.weapon_1_damage_1_line; const&nbsp; &nbsp; damage_2 = values.weapon_1_damage_2_line; const&nbsp; &nbsp; damage_3 = values.weapon_1_damage_3_line; let&nbsp; &nbsp; &nbsp; weapon_1_damage_display = "None"; if&nbsp; &nbsp; &nbsp; (weapon_1_damage_number == 0) {weapon_1_damage_display = "None";} else if (weapon_1_damage_number == 1) {weapon_1_damage_display = damage_1;} else if (weapon_1_damage_number == 4) {weapon_1_damage_display = damage_1+"/"+damage_2;} else if (weapon_1_damage_number == 9) {weapon_1_damage_display = damage_1+"/"+damage_2+"/"+damage_3;} setAttrs({weapon_1_damage_display: weapon_1_damage_display}); }); }); &lt;/script&gt; &lt;/div&gt; &lt;/div&gt; let me know if it would be better to send you the whole sheet and css. most of this sheet is tied together with other info.&nbsp;
1714662498

Edited 1714662582
Nick
Pro
So i have tried a few thing but nothing is changing the dice Roll. Can someone tell me what im doing wrong? Below the the script im trying to use and the inputs &nbsp;where they are pulling from . it is just a flat d20 roll no modifiers.&nbsp; &lt;script type="text/worker"&gt;&lt;!-- Weapon 1 Attack --&gt; on('clicked:weapon_1_attack', () =&gt; { startRoll('&amp;{template:default} {{name=@{charactername} @{weapon_1_name}}} {{attack=[[@{weapon_1_attack_roll}]]}} {{Damage 1=[[@{weapon_1_damage_1_damage_roll}]]}}', weapon_1_attack =&gt; { getAttrs(['weapon_1_damage_1_damage_roll','weapon_1_damage_1_crit_roll'], function(values) { let weapon_1_damage_1_roll = "weapon_1_damage_1_damage_roll"; if (weapon_1_attack_roll &gt;= 10) {weapon_1_damage_1_roll = '@{weapon_1_damage_1_crit_roll}';} }); finishRoll(weapon_1_attack.rollId); }); }); &lt;/script&gt; add here are the field they pull from. This one is the QTY of Dice that the player can enter.&nbsp; &lt;input name="attr_weapon_1_damage_2_qty" class="text025" type="text" value=""&gt; This one is the number of faces on the Dice that the player can enter. &lt;input&nbsp; name="attr_weapon_1_damage_2_face"&nbsp; class="text025"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value=""&gt; Here are the hidden inputs to generate the roll.&nbsp; &lt;input&nbsp; name="attr_weapon_1_damage_1_damage_roll" class="text025" type="hidden" value="@{weapon_1_damage_1_qty}d@{weapon_1_damage_1_face}"&gt; &lt;input&nbsp; name="attr_weapon_1_damage_1_crit_roll"&nbsp; &nbsp;class="text025" type="hidden" value="@{weapon_1_damage_1_qty}d@{weapon_1_damage_1_face}+[[(@{weapon_1_damage_1_qty}*@{weapon_1_damage_1_face})]]"&gt; The Goal is when the roll a critical hit on the attack that it will roll crit damage instead of normal damage.&nbsp; When the players roll a crit the take max damage (6 because it a d6) + the weapons normal damage (1d6) of on a crit is should look like below NORMAL DAMAGE: &nbsp;1d6 CRIT DAMAGE: 1d6+6
Maybe we can try something simple and not use any of the stuff from my sheet. Can someone give me an example of a simple d20 roll. on a 15 and roll damage_1 on a 14 and under roll damage_2. I have tried a few other things but im not able get the script to read the dice roller to output a damage based on what was rolled. Im kind of at a loss here on how to set this up.&nbsp;
1716417752

Edited 1716420300
GiGs
Pro
Sheet Author
API Scripter
I'm sorry, I missed the replies on this thread. I'll try to catch up. Nicholus F. said: Maybe we can try something simple and not use any of the stuff from my sheet. Can someone give me an example of a simple d20 roll. on a 15 and roll damage_1 on a 14 and under roll damage_2. That kind of thing is not directly supported in macros, but you can do it in CRP. I linked my site earlier, and you should be able to do that. Are damage_1 and damage_2 full macro strings? Can you describe the mechanic without reference to roll20? I magine I'm sitting down at your table, playing the game with you and some others. How would you epxlain this and the necessary system I'd needd to know? Remember, don't refer to roll20 - pretend it's entirely face-to-face.
1716418136
GiGs
Pro
Sheet Author
API Scripter
A possible problem here: Nicholus F. said: So i have tried a few thing but nothing is changing the dice Roll. Can someone tell me what im doing wrong? Below the the script im trying to use and the inputs &nbsp;where they are pulling from . it is just a flat d20 roll no modifiers.&nbsp; &lt;script type="text/worker"&gt;&lt;!-- Weapon 1 Attack --&gt; on('clicked:weapon_1_attack', () =&gt; { startRoll('&amp;{template:default} {{name=@{charactername} @{weapon_1_name}}} {{attack=[[@{weapon_1_attack_roll}]]}} {{Damage 1=[[@{weapon_1_damage_1_damage_roll}]]}}', weapon_1_attack =&gt; { getAttrs(['weapon_1_damage_1_damage_roll','weapon_1_damage_1_crit_roll'], function(values) { let weapon_1_damage_1_roll = "weapon_1_damage_1_damage_roll"; if (weapon_1_attack_roll &gt;= 10) {weapon_1_damage_1_roll = '@{weapon_1_damage_1_crit_roll}';} }); finishRoll(weapon_1_attack.rollId); }); }); &lt;/script&gt; add here are the field they pull from. This one is the QTY of Dice that the player can enter.&nbsp; &lt;input name="attr_weapon_1_damage_2_qty" class="text025" type="text" value=""&gt; This one is the number of faces on the Dice that the player can enter. &lt;input&nbsp; name="attr_weapon_1_damage_2_face"&nbsp; class="text025"&nbsp; &nbsp;type="text"&nbsp; &nbsp; &nbsp;value=""&gt; Here are the hidden inputs to generate the roll.&nbsp; &lt;input&nbsp; name="attr_weapon_1_damage_1_damage_roll" class="text025" type="hidden" value="@{weapon_1_damage_1_qty}d@{weapon_1_damage_1_face}"&gt; &lt;input&nbsp; name="attr_weapon_1_damage_1_crit_roll"&nbsp; &nbsp;class="text025" type="hidden" value="@{weapon_1_damage_1_qty}d@{weapon_1_damage_1_face}+[[(@{weapon_1_damage_1_qty}*@{weapon_1_damage_1_face})]]"&gt; The Goal is when the roll a critical hit on the attack that it will roll crit damage instead of normal damage.&nbsp; When the players roll a crit the take max damage (6 because it a d6) + the weapons normal damage (1d6) of on a crit is should look like below NORMAL DAMAGE: &nbsp;1d6 CRIT DAMAGE: 1d6+6 startRoll is when the roll is made, and getAttrs is when you extract values from the character sheet. If you want to use elements of the roll based on the character sheet values, this order is the wrong way around.
1716418468
GiGs
Pro
Sheet Author
API Scripter
Nicholus F. said: Here are the hidden inputs to generate the roll.&nbsp; &lt;input&nbsp; name="attr_weapon_1_damage_1_damage_roll" class="text025" type="hidden" value="@{weapon_1_damage_1_qty}d@{weapon_1_damage_1_face}"&gt; &lt;input&nbsp; name="attr_weapon_1_damage_1_crit_roll"&nbsp; &nbsp;class="text025" type="hidden" value="@{weapon_1_damage_1_qty}d@{weapon_1_damage_1_face}+[[(@{weapon_1_damage_1_qty}*@{weapon_1_damage_1_face})]]"&gt; Here is another possible problem. You have values that that are calculations, but calculations don't work unless the input is disabled (becoming an autocalc field). However, you cannot combine sheet workers and autocalc values (technically you can, but the syntax is very different and very inefficient).If you have any autocalc fields and want to use them in a sheetworker, you have to replace the autocalc with another sheet worker to perform that calculation. If that is an attribute that is only used in a roll macro, what I've said here doesn't apply.