From e1943ec41858e4793a7a85b7ea97899f92e1690c Mon Sep 17 00:00:00 2001 From: Tealk Date: Wed, 21 Jan 2026 18:08:00 +0100 Subject: [PATCH] feat: Add roll visibility option to settings --- ImperiumMaledictum/sheet_new.html | 136 ++++++++++++++++-------------- 1 file changed, 75 insertions(+), 61 deletions(-) diff --git a/ImperiumMaledictum/sheet_new.html b/ImperiumMaledictum/sheet_new.html index 8af21ea628..5134703835 100644 --- a/ImperiumMaledictum/sheet_new.html +++ b/ImperiumMaledictum/sheet_new.html @@ -1287,13 +1287,23 @@

Settings

-
- - +
+
+ + +
+ +
+ + +
@@ -1756,7 +1766,7 @@ }); }); - const test_list = ["difficulty","circumstances","superiority","psychic_focus"]; +const test_list = ["difficulty","circumstances","superiority","psychic_focus","roll_visibility"]; const button_list = chars_list.concat(skill_list).concat(npc_chars_list); button_list.forEach(trigger => { on(`clicked:${trigger}`, function(eventInfo) { @@ -1848,63 +1858,67 @@ hitloc = ` {{hitlocation=[[0]]}}`; } - startRoll(`&{template:imtest} {{reroll=[Reroll](~${reroll})}} ` - .concat(`{{name=@{character_name}}} {{skill_name=${skill_name}}} `) - .concat(`{{skill_total=[[${skill_total}]]}} {{difficulty=[[${diff_roll}]]}} `) - .concat(`{{result=[[1d100]]}}${adv_roll}${disadv_roll}${circ_roll}${dmg_roll}${dmg_info}${hitloc} `) - .concat(`{{sl=[[0]]}} {{sl_info=[[0]]}} {{critical=[[0]]}} {{fumble=[[0]]}}${adjustedsl}`) - .concat(`{{superiority=${superiority}}}`), (results) => { - const result = results.results.result.result; - let digits = result.toString().split('').map(Number); - if (digits.length == 1) { - digits.push(0); - } - const difficulty = results.results.difficulty.result; - const diff_name = diff_data[`${difficulty}`]["name"]; - // account for original SL that is better/worse - let final_result = result; - let final_total = skill_total + difficulty; - let final_sl = getSl(final_total, final_result, slmod, superiority); - if (circ != 0) { - final_total += circ_bonus; + getAttrs(["roll_visibility"], function(vis) { + let rollPrefix = vis.roll_visibility === "gm" ? "/w gm " : ""; - let hi_result = result == 100 ? 100 : - Math.min(...digits) * 10 + Math.max(...digits); - let hi_sl = getSl(final_total, hi_result, slmod, superiority); - - let lo_result = result == 100 ? 100 : - Math.max(...digits) * 10 + Math.min(...digits); - let lo_sl = getSl(final_total, lo_result, slmod, superiority); - - if ((circ > 0 && parseInt(hi_sl) >= parseInt(lo_sl)) || - (circ < 0 && parseInt(hi_sl) <= parseInt(lo_sl))) { - final_result = hi_result; - final_sl = hi_sl; - } else if ((circ > 0 && parseInt(lo_sl) >= parseInt(hi_sl)) || - (circ < 0 && parseInt(lo_sl) <= parseInt(hi_sl))) { - final_result = lo_result; - final_sl = lo_sl; + startRoll(`${rollPrefix}&{template:imtest} {{reroll=[Reroll](~${reroll})}} ` + .concat(`{{name=@{character_name}}} {{skill_name=${skill_name}}} `) + .concat(`{{skill_total=[[${skill_total}]]}} {{difficulty=[[${diff_roll}]]}} `) + .concat(`{{result=[[1d100]]}}${adv_roll}${disadv_roll}${circ_roll}${dmg_roll}${dmg_info}${hitloc} `) + .concat(`{{sl=[[0]]}} {{sl_info=[[0]]}} {{critical=[[0]]}} {{fumble=[[0]]}}${adjustedsl}`) + .concat(`{{superiority=${superiority}}}`), (results) => { + const result = results.results.result.result; + let digits = result.toString().split('').map(Number); + if (digits.length == 1) { + digits.push(0); } - } - let final_sl_info = getSlInfo(final_sl); + const difficulty = results.results.difficulty.result; + const diff_name = diff_data[`${difficulty}`]["name"]; - let crit = critfum && final_result <= final_total && final_result % 10 == Math.floor(final_result / 10) ? 1 : 0; - let fumb = critfum && final_result > final_total && final_result % 10 == Math.floor(final_result / 10) ? 1 : 0; - let u = final_result % 10; - let hitlocation = `${u}, ${hitloc_data[u]["name"]}`; - finishRoll( - results.rollId, - { - "result": final_result, - "difficulty": diff_name, - "skill_total": final_total, - "sl": final_sl, - "sl_info": final_sl_info, - "critical": crit, - "fumble": fumb, - "hitlocation": hitlocation + let final_result = result; + let final_total = skill_total + difficulty; + let final_sl = getSl(final_total, final_result, slmod, superiority); + if (circ != 0) { + final_total += circ_bonus; + + let hi_result = result == 100 ? 100 : + Math.min(...digits) * 10 + Math.max(...digits); + let hi_sl = getSl(final_total, hi_result, slmod, superiority); + + let lo_result = result == 100 ? 100 : + Math.max(...digits) * 10 + Math.min(...digits); + let lo_sl = getSl(final_total, lo_result, slmod, superiority); + + if ((circ > 0 && parseInt(hi_sl) >= parseInt(lo_sl)) || + (circ < 0 && parseInt(hi_sl) <= parseInt(lo_sl))) { + final_result = hi_result; + final_sl = hi_sl; + } else if ((circ > 0 && parseInt(lo_sl) >= parseInt(hi_sl)) || + (circ < 0 && parseInt(lo_sl) <= parseInt(hi_sl))) { + final_result = lo_result; + final_sl = lo_sl; + } } - ); + let final_sl_info = getSlInfo(final_sl); + + let crit = critfum && final_result <= final_total && final_result % 10 == Math.floor(final_result / 10) ? 1 : 0; + let fumb = critfum && final_result > final_total && final_result % 10 == Math.floor(final_result / 10) ? 1 : 0; + let u = final_result % 10; + let hitlocation = `${u}, ${hitloc_data[u]["name"]}`; + finishRoll( + results.rollId, + { + "result": final_result, + "difficulty": diff_name, + "skill_total": final_total, + "sl": final_sl, + "sl_info": final_sl_info, + "critical": crit, + "fumble": fumb, + "hitlocation": hitlocation + } + ); + }); }); };