diff --git a/TheWitcher/js/actionButton.js b/TheWitcher/js/actionButton.js new file mode 100644 index 0000000000..0c18de4f94 --- /dev/null +++ b/TheWitcher/js/actionButton.js @@ -0,0 +1,54 @@ +on('clicked:roll', (event) => { + startRoll(event.htmlAttributes.value + "{{fumble=[[1d10!]]}} {{fumble2=[[1d10!]]}}", (results) => { + var rollComputed = results.results.roll.result; + var roll2Computed = 0; + + if(results.results.roll.dice[0] == 1) // We check if the first die is a fumble. + { + rollComputed = results.results.roll.result - 1 - results.results.fumble.result; + } + + if(results.results.roll2 != null) { + roll2Computed = results.results.roll2.result; + if( results.results.roll2.dice[0] == 1) // We check if the first die is a fumble. + { + roll2Computed = results.results.roll2.result - 1 - results.results.fumble2.result; + } + } + + finishRoll( + results.rollId, + { + roll: rollComputed, + roll2: roll2Computed + + } + ); + }); +}); + +on('clicked:repeating_finearts:roll clicked:repeating_npcskill:roll', (event) => { + + // prefix gets an empty string for normal attributes, and repeating_section_ID_ for repeating attributes + var trigger = event.triggerName.slice(8); // this always starts with 'clicked:' + var prefix = trigger.split('_').slice(0,3).join('_') + '_'; + + let rollPart = event.htmlAttributes.value.replaceAll('prefix-', `${prefix}`); + console.log(rollPart); + + startRoll(rollPart + "{{fumble=[[1d10!]]}}", (results) => { + var rollComputed = results.results.roll.result; + + if(results.results.roll.dice[0] == 1) // We check if the first die is a fumble. + { + rollComputed = results.results.roll.result - 1 - results.results.fumble.result; + } + + finishRoll( + results.rollId, + { + roll: rollComputed, + } + ); + }); +}); \ No newline at end of file diff --git a/TheWitcher/sheet.json b/TheWitcher/sheet.json index 8b5eb4d57f..822c3b8587 100644 --- a/TheWitcher/sheet.json +++ b/TheWitcher/sheet.json @@ -1,7 +1,7 @@ { "html": "witchersheet.html", "css": "witchersheet.css", - "authors": "Leothedino", + "authors": "Leothedino currently maintained by Stexinator", "roll20userid": "2643470", "preview": "witcherpreview.png", "instructions": "A sheet to reflect the original for The Witcher TRPG created by R.Talsorian Games. It includes helpful navigation, quality of life additions such as an extended weapon rack, catologue spell list, NPC sheet and a host of auto-calculating stats and skills to string together a simple and straight-forward online experience.", diff --git a/TheWitcher/witchersheet.css b/TheWitcher/witchersheet.css index ca90332f90..532cca1d15 100644 --- a/TheWitcher/witchersheet.css +++ b/TheWitcher/witchersheet.css @@ -5772,11 +5772,11 @@ textarea.sheet-campaign-text { /* stats */ -.charsheet button[type=roll].sheet-stat-roller::before { +.charsheet button[type=action].sheet-stat-roller::before { content: " "; } -button[type=roll].sheet-stat-roller { +button[type=action].sheet-stat-roller { background: none; margin-right: 5px; width: 92px; @@ -5791,21 +5791,21 @@ button[type=roll].sheet-stat-roller { box-shadow: none; } -button[type=roll].sheet-stat-roller:hover { +button[type=action].sheet-stat-roller:hover { color: #5e0000; box-shadow: none; } -button[type=roll].sheet-stat-roller:active { +button[type=action].sheet-stat-roller:active { color: #bc0000; box-shadow: none; } -.charsheet button[type=roll].sheet-stat-roller2::before { +.charsheet button[type=action].sheet-stat-roller2::before { content: " "; } -button[type=roll].sheet-stat-roller2 { +button[type=action].sheet-stat-roller2 { background: none; margin-right: 5px; width: 50px; @@ -5820,24 +5820,25 @@ button[type=roll].sheet-stat-roller2 { box-shadow: none; } -button[type=roll].sheet-stat-roller2:hover { +button[type=action].sheet-stat-roller2:hover { color: #5e0000; box-shadow: none; } -button[type=roll].sheet-stat-roller2:active { +button[type=action].sheet-stat-roller2:active { color: #bc0000; box-shadow: none; } -.charsheet button[type=roll].sheet-skill-roller2::before, -.charsheet button[type=roll].sheet-skill-roller::before { +.charsheet button[type=action].sheet-skill-roller2::before, +.charsheet button[type=action].sheet-skill-roller::before { content: " "; } -button[type=roll].sheet-skill-roller { +button[type=action].sheet-skill-roller { background: none; margin-right: 5px; + margin-left: 3px; width: 120px; text-shadow: none; text-align: right; @@ -5850,19 +5851,19 @@ button[type=roll].sheet-skill-roller { box-shadow: none; } -button[type=roll].sheet-skill-roller2:hover, -button[type=roll].sheet-skill-roller:hover { +button[type=action].sheet-skill-roller2:hover, +button[type=action].sheet-skill-roller:hover { color: #5e0000; box-shadow: none; } -button[type=roll].sheet-skill-roller2:active, -button[type=roll].sheet-skill-roller:active { +button[type=action].sheet-skill-roller2:active, +button[type=action].sheet-skill-roller:active { color: #bc0000; box-shadow: none; } -button[type=roll].sheet-skill-roller2 { +button[type=action].sheet-skill-roller2 { background: none; margin-right: 5px; width: 90px; @@ -5877,13 +5878,13 @@ button[type=roll].sheet-skill-roller2 { box-shadow: none; } -.charsheet button[type=roll].repeating_skill_roller_emp::before, -.charsheet button[type=roll].sheet-skill-roller-emp::before { +.charsheet button[type=action].repeating_skill_roller_emp::before, +.charsheet button[type=action].sheet-skill-roller-emp::before { content: " "; } -button[type=roll].repeating_skill_roller_emp, -button[type=roll].sheet-skill-roller-emp { +button[type=action].repeating_skill_roller_emp, +button[type=action].sheet-skill-roller-emp { background: none; margin-right: -1px; width: 100px; @@ -5898,25 +5899,25 @@ button[type=roll].sheet-skill-roller-emp { box-shadow: none; } -button[type=roll].repeating_skill_roller_emp:hover, -button[type=roll].sheet-skill-roller-emp:hover { +button[type=action].repeating_skill_roller_emp:hover, +button[type=action].sheet-skill-roller-emp:hover { color: #5e0000; box-shadow: none; } -button[type=roll].repeating_skill_roller_emp:active, -button[type=roll].sheet-skill-roller-emp:active { +button[type=action].repeating_skill_roller_emp:active, +button[type=action].sheet-skill-roller-emp:active { color: #bc0000; box-shadow: none; } -.charsheet button[type=roll].sheet-stat-roll::before { +.charsheet button[type=action].sheet-stat-roll::before { font-family: "dicefontd10"; content: "0"; font-size: 16px; } -button[type=roll].sheet-stat-roll { +button[type=action].sheet-stat-roll { color: #000; background-color: #e8e8e8; text-align: center; @@ -5929,26 +5930,26 @@ button[type=roll].sheet-stat-roll { box-shadow: inset 1px 1px 1px 1px rgba(0,0,0,0.30); } -button[type=roll].sheet-stat-roll:hover { +button[type=action].sheet-stat-roll:hover { color: #5e0000; border-color: #5e0000; border: 1px solid; } -button[type=roll].sheet-stat-roll:active { +button[type=action].sheet-stat-roll:active { color: #bc0000; border-color: #bc0000; border: 1px solid; box-shadow: inset 1px 1px 1px 1px #5e0000; } -.charsheet button[type=roll].sheet-stat-roll2::before { +.charsheet button[type=action].sheet-stat-roll2::before { font-family: "Pictos Custom"; content: "t"; font-size: 16px; } -button[type=roll].sheet-stat-roll2 { +button[type=action].sheet-stat-roll2 { color: #000; background-color: #e8e8e8; text-align: center; @@ -5961,26 +5962,26 @@ button[type=roll].sheet-stat-roll2 { box-shadow: inset 1px 1px 1px 1px rgba(0,0,0,0.30); } -button[type=roll].sheet-stat-roll2:hover { +button[type=action].sheet-stat-roll2:hover { color: #5e0000; border-color: #5e0000; border: 1px solid; } -button[type=roll].sheet-stat-roll2:active { +button[type=action].sheet-stat-roll2:active { color: #bc0000; border-color: #bc0000; border: 1px solid; box-shadow: inset 1px 1px 1px 1px #5e0000; } -.charsheet button[type=roll].sheet-stat-roll3::before { +.charsheet button[type=action].sheet-stat-roll3::before { font-family: "Pictos Custom"; content: "e"; font-size: 16px; } -button[type=roll].sheet-stat-roll3 { +button[type=action].sheet-stat-roll3 { color: #000; background-color: #e8e8e8; text-align: center; @@ -5993,13 +5994,13 @@ button[type=roll].sheet-stat-roll3 { box-shadow: inset 1px 1px 1px 1px rgba(0,0,0,0.30); } -button[type=roll].sheet-stat-roll3:hover { +button[type=action].sheet-stat-roll3:hover { color: #5e0000; border-color: #5e0000; border: 1px solid; } -button[type=roll].sheet-stat-roll3:active { +button[type=action].sheet-stat-roll3:active { color: #bc0000; border-color: #bc0000; border: 1px solid; @@ -6189,14 +6190,14 @@ button[type=roll].sheet-target-roll:active { /* Profession Skill Button */ -.charsheet button[type=roll].sheet-prof-skill-roll::before { +.charsheet button[type=action].sheet-prof-skill-roll::before { font-family: "Helvetica"; content: "ROLL SKILL"; font-size: 9px; display: block; } -button[type=roll].sheet-prof-skill-roll { +button[type=action].sheet-prof-skill-roll { color: #000; background-color: #e8e8e8; text-align: center; @@ -6210,13 +6211,13 @@ button[type=roll].sheet-prof-skill-roll { box-shadow: inset 1px 1px 1px 1px rgba(0,0,0,0.30); } -button[type=roll].sheet-prof-skill-roll:hover { +button[type=action].sheet-prof-skill-roll:hover { color: #828282; border-color: #828282; border: 1px solid; } -button[type=roll].sheet-prof-skill-roll:active { +button[type=action].sheet-prof-skill-roll:active { color: #afafaf; border-color: #afafaf; border: 1px solid; @@ -6447,13 +6448,13 @@ button[type=roll].repeating_hex_damage_roll:active { /* Reputation Roll */ -.charsheet button[type=roll].sheet-rep-roll::before { +.charsheet button[type=action].sheet-rep-roll::before { font-family: "Pictos"; content: "i"; font-size: 18px; } -button[type=roll].sheet-rep-roll { +button[type=action].sheet-rep-roll { color: #000; background-color: #e8e8e8; text-align: center; @@ -6466,13 +6467,13 @@ button[type=roll].sheet-rep-roll { box-shadow: inset 1px 1px 1px 1px rgba(0,0,0,0.30); } -button[type=roll].sheet-rep-roll:hover { +button[type=action].sheet-rep-roll:hover { color: #2a72a3; border-color: #2a72a3; border: 1px solid; } -button[type=roll].sheet-rep-roll:active { +button[type=action].sheet-rep-roll:active { color: #42b2ff; border-color: #42b2ff; border: 1px solid; @@ -6481,13 +6482,13 @@ button[type=roll].sheet-rep-roll:active { /* NPC Skill */ -.charsheet button[type=roll].repeating_npc_skill_roll::before { +.charsheet button[type=action].repeating_npc_skill_roll::before { font-family: "dicefontd10"; content: "0"; font-size: 17px; } -button[type=roll].repeating_npc_skill_roll { +button[type=action].repeating_npc_skill_roll { color: #000; display: inline-block; background-color: #e8e8e8; @@ -6502,13 +6503,48 @@ button[type=roll].repeating_npc_skill_roll { box-shadow: inset 1px 1px 1px 1px rgba(0,0,0,0.30); } -button[type=roll].repeating_npc_skill_roll:hover { +button[type=action].repeating_npc_skill_roll:hover { color: #878787; border-color: #878787; border: 1px solid; } -button[type=roll].repeating_npc_skill_roll:active { +button[type=action].repeating_npc_skill_roll:active { + color: #d6d6d6; + border-color: #d6d6d6; + border: 1px solid; + box-shadow: inset 2px 1px 1px 1px #878787; + +} + +.charsheet button[type=roll].repeating_npc_weapon_roll::before { + font-family: "dicefontd10"; + content: "0"; + font-size: 17px; +} + +button[type=roll].repeating_npc_weapon_roll { + color: #000; + display: inline-block; + background-color: #e8e8e8; + text-align: center; + font-weight: bold; + margin-top: 5px; + width:18px; + height:18px; + border-radius: 100px; + border-color: #000; + border: 1px solid; + box-shadow: inset 1px 1px 1px 1px rgba(0,0,0,0.30); +} + +button[type=roll].repeating_npc_weapon_roll:hover { + color: #878787; + border-color: #878787; + border: 1px solid; +} + +button[type=roll].repeating_npc_weapon_roll:active { color: #d6d6d6; border-color: #d6d6d6; border: 1px solid; diff --git a/TheWitcher/witchersheet.html b/TheWitcher/witchersheet.html index ea9dd836e2..8583a81330 100644 --- a/TheWitcher/witchersheet.html +++ b/TheWitcher/witchersheet.html @@ -11,7 +11,7 @@

- + @@ -25,7 +25,7 @@


- + @@ -41,7 +41,7 @@


- + @@ -57,7 +57,7 @@

- + @@ -71,7 +71,7 @@

- + @@ -85,7 +85,7 @@

- + @@ -99,7 +99,7 @@

- + @@ -113,7 +113,7 @@

- + @@ -303,8 +303,8 @@
- @@ -327,8 +327,8 @@
- @@ -351,8 +351,8 @@
- @@ -375,8 +375,8 @@
- @@ -399,8 +399,8 @@
- @@ -423,8 +423,8 @@
- @@ -447,8 +447,8 @@
- @@ -471,8 +471,8 @@
- @@ -495,8 +495,8 @@
- @@ -519,8 +519,8 @@
- @@ -543,8 +543,8 @@
- @@ -567,8 +567,8 @@
- @@ -591,8 +591,8 @@
- @@ -633,39 +633,39 @@
- -
- -
- -
- -
@@ -684,8 +684,8 @@
- @@ -720,35 +720,35 @@
- -
- -
- -
-
@@ -766,8 +766,8 @@
- @@ -790,8 +790,8 @@
- @@ -826,35 +826,35 @@
- -
- -
- -
-
@@ -884,30 +884,30 @@
- -
- -
- -
@@ -938,35 +938,35 @@
- -
- -
- -
-
@@ -1001,12 +1001,12 @@
- -
@@ -1036,21 +1036,21 @@
- -
- -
@@ -1080,9 +1080,9 @@
- - -
+ + +

@@ -1096,8 +1096,8 @@
- @@ -1120,8 +1120,8 @@
- @@ -1153,8 +1153,8 @@
- @@ -1177,8 +1177,8 @@
- @@ -1206,8 +1206,8 @@
- @@ -1230,8 +1230,8 @@
- @@ -1254,8 +1254,8 @@
- @@ -1278,8 +1278,8 @@
- @@ -1302,8 +1302,8 @@
- @@ -1326,8 +1326,8 @@
- @@ -1350,8 +1350,8 @@
- @@ -1374,8 +1374,8 @@
- @@ -1398,8 +1398,8 @@
- @@ -1407,8 +1407,8 @@
- @@ -1418,8 +1418,8 @@

- @@ -1427,8 +1427,8 @@
- @@ -1444,8 +1444,8 @@
- @@ -1468,8 +1468,8 @@
- @@ -1492,8 +1492,8 @@
- @@ -1516,8 +1516,8 @@
- @@ -1540,8 +1540,8 @@
- @@ -1564,8 +1564,8 @@
- @@ -1588,8 +1588,8 @@
- @@ -1617,8 +1617,8 @@
- @@ -1641,8 +1641,8 @@
- @@ -1667,8 +1667,8 @@
- @@ -1706,12 +1706,12 @@
- -
@@ -1729,8 +1729,8 @@
- @@ -1753,8 +1753,8 @@
- @@ -1777,8 +1777,8 @@
- @@ -1887,7 +1887,7 @@
- +
@@ -1907,7 +1907,7 @@ - + @@ -1925,7 +1925,7 @@ - + @@ -1943,7 +1943,7 @@ - +
@@ -1963,7 +1963,7 @@ - + @@ -1981,7 +1981,7 @@ - + @@ -1999,7 +1999,7 @@ - +
@@ -2019,7 +2019,7 @@ - + @@ -2037,7 +2037,7 @@ - + @@ -2055,7 +2055,7 @@ - +
@@ -2267,10 +2267,10 @@
- +
- +
@@ -3157,7 +3157,7 @@
-
+
@@ -3175,14 +3175,14 @@

-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+

@@ -3231,7 +3231,7 @@ - +
@@ -3255,7 +3255,7 @@ | | - +
@@ -3980,11 +3980,65 @@ function repeatingSum (destination, section, fieldsum, fieldmult, totalmult){ }); }); } + +on('clicked:roll', (event) => { + startRoll(event.htmlAttributes.value + "{{fumble=[[1d10!]]}} {{fumble2=[[1d10!]]}}", (results) => { + var rollComputed = results.results.roll.result; + var roll2Computed = 0; + + if(results.results.roll.dice[0] == 1) // We check if the first die is a fumble. + { + rollComputed = results.results.roll.result - 1 - results.results.fumble.result; + } + + if(results.results.roll2 != null) { + roll2Computed = results.results.roll2.result; + if( results.results.roll2.dice[0] == 1) // We check if the first die is a fumble. + { + roll2Computed = results.results.roll2.result - 1 - results.results.fumble2.result; + } + } + + finishRoll( + results.rollId, + { + roll: rollComputed, + roll2: roll2Computed + + } + ); + }); +}); + +on('clicked:repeating_finearts:roll clicked:repeating_npcskill:roll', (event) => { + + // prefix gets an empty string for normal attributes, and repeating_section_ID_ for repeating attributes + var trigger = event.triggerName.slice(8); // this always starts with 'clicked:' + var prefix = trigger.split('_').slice(0,3).join('_') + '_' + + let rollPart = event.htmlAttributes.value.replaceAll('prefix-', `${prefix}`); + + startRoll(rollPart + "{{fumble=[[1d10!]]}}", (results) => { + var rollComputed = results.results.roll.result; + + if(results.results.roll.dice[0] == 1) // We check if the first die is a fumble. + { + rollComputed = results.results.roll.result - 1 - results.results.fumble.result; + } + + finishRoll( + results.rollId, + { + roll: rollComputed, + } + ); + }); +}); - + @@ -3993,17 +4047,17 @@ function repeatingSum (destination, section, fieldsum, fieldmult, totalmult){
{{title}}
NAME: {{name}}
- + - + {{#rollWasCrit() roll}}{{/rollWasCrit() roll}} {{#rollWasFumble() roll}} {{#^rollWasCrit() roll}} {{/^rollWasCrit() roll}} @@ -4011,34 +4065,34 @@ function repeatingSum (destination, section, fieldsum, fieldmult, totalmult){
{{title}}
NAME: {{name}}
SKILL ROLL: {{roll}}
SKILL ROLL: {{computed::roll}}
CRITICAL: Criticals are already calculated into the roll
- FUMBLE: Use the [FUMBLE](~{{name}}|fumble) button, **subtract** the result from your total score. + FUMBLE: Fumbles are already calculated into the roll. Your fumble roll was {{fumble}}.
- - - - - - {{#rollWasCrit() roll}}{{/rollWasCrit() roll}} - {{#rollWasFumble() roll}} + +
{{title}}
NAME: {{name}}
1ST ATTACK: {{roll}}
CRITICAL: Criticals are already calculated into the roll
+ + + + {{#rollWasCrit() roll}}{{/rollWasCrit() roll}} + {{#rollWasFumble() roll}} {{#^rollWasCrit() roll}} {{/^rollWasCrit() roll}} {{/rollWasFumble() roll}} - - {{#rollWasCrit() roll2}}{{/rollWasCrit() roll2}} - {{#rollWasFumble() roll2}} + + {{#rollWasCrit() roll2}}{{/rollWasCrit() roll2}} + {{#rollWasFumble() roll2}} {{#^rollWasCrit() roll2}} {{/^rollWasCrit() roll2}} {{/rollWasFumble() roll2}} -
{{title}}
NAME: {{name}}
1ST ATTACK: {{computed::roll}}
CRITICAL: Criticals are already calculated into the roll
- FUMBLE: Use the [FUMBLE](~{{name}}|fumble) button, **subtract** the result from your first attack. + FUMBLE: Fumbles are already calculated into the roll. Your fumble roll was {{fumble}}.
2ND ATTACK: {{roll2}}
CRITICAL: Criticals are already calculated into the roll
2ND ATTACK: {{computed::roll2}}
CRITICAL: Criticals are already calculated into the roll
- FUMBLE: Use the [FUMBLE](~{{name}}|fumble) button, **subtract** the result from your second attack. + FUMBLE: Fumbles are already calculated into the roll. Your fumble roll was {{fumble2}}.
+
@@ -4109,11 +4163,11 @@ function repeatingSum (destination, section, fieldsum, fieldmult, totalmult){ {{title}} NAME: {{name}} DESCRIPTION: {{description}} - SKILL ROLL: {{roll}} + SKILL ROLL: {{computed::roll}} {{#rollWasCrit() roll}}CRITICAL: Criticals are already calculated into the roll{{/rollWasCrit() roll}} {{#rollWasFumble() roll}} {{#^rollWasCrit() roll}} - FUMBLE: Use the [FUMBLE](~{{name}}|fumble) button, **subtract** the result from your total score. + FUMBLE: Fumbles are already calculated into the roll. Your fumble roll was {{fumble}} {{/^rollWasCrit() roll}} {{/rollWasFumble() roll}} @@ -4124,11 +4178,11 @@ function repeatingSum (destination, section, fieldsum, fieldmult, totalmult){ {{title}} NAME: {{name}} DESCRIPTION: {{description}} - SKILL ROLL: {{roll}} + SKILL ROLL: {{computed::roll}} {{#rollWasCrit() roll}}CRITICAL: Criticals are already calculated into the roll{{/rollWasCrit() roll}} {{#rollWasFumble() roll}} {{#^rollWasCrit() roll}} - FUMBLE: Use the [FUMBLE](~{{name}}|fumble) button, **subtract** the result from your total score. + FUMBLE: Fumbles are already calculated into the roll. Your fumble roll was {{fumble}} {{/^rollWasCrit() roll}} {{/rollWasFumble() roll}} @@ -4139,11 +4193,11 @@ function repeatingSum (destination, section, fieldsum, fieldmult, totalmult){ {{title}} NAME: {{name}} DESCRIPTION: {{description}} - SKILL ROLL: {{roll}} + SKILL ROLL: {{computed::roll}} {{#rollWasCrit() roll}}CRITICAL: Criticals are already calculated into the roll{{/rollWasCrit() roll}} {{#rollWasFumble() roll}} {{#^rollWasCrit() roll}} - FUMBLE: Use the [FUMBLE](~{{name}}|fumble) button, **subtract** the result from your total score. + FUMBLE: Fumbles are already calculated into the roll. Your fumble roll was {{fumble}} {{/^rollWasCrit() roll}} {{/rollWasFumble() roll}} @@ -4154,11 +4208,11 @@ function repeatingSum (destination, section, fieldsum, fieldmult, totalmult){ {{title}} NAME: {{name}} DESCRIPTION: {{description}} - SKILL ROLL: {{roll}} + SKILL ROLL: {{computed::roll}} {{#rollWasCrit() roll}}CRITICAL: Criticals are already calculated into the roll{{/rollWasCrit() roll}} {{#rollWasFumble() roll}} {{#^rollWasCrit() roll}} - FUMBLE: Use the [FUMBLE](~{{name}}|fumble) button, **subtract** the result from your total score. + FUMBLE: Fumbles are already calculated into the roll. Your fumble roll was {{fumble}} {{/^rollWasCrit() roll}} {{/rollWasFumble() roll}} @@ -4248,7 +4302,7 @@ function repeatingSum (destination, section, fieldsum, fieldmult, totalmult){ NAME: {{name}} REPUTATION: {{reputation}} - REP ROLL: {{roll}} + REP ROLL: {{computed::roll}} {{#rollWasCrit() roll}} @@ -4259,10 +4313,10 @@ function repeatingSum (destination, section, fieldsum, fieldmult, totalmult){ {{#^rollWasCrit() roll}} - FUMBLE: Use the [FUMBLE](~{{name}}|fumble) button, **subtract** the result from your total score. + FUMBLE: Fumbles are already calculated into the roll. Your fumble roll was {{fumble}}. {{/^rollWasCrit() roll}} {{/rollWasFumble() roll}} -
+
\ No newline at end of file