UNPKG

@randsum/daggerheart

Version:

A flexible, type-safe dice roller for building Daggerheart-compatible applications

2 lines (1 loc) 1.24 kB
import{roll as s}from"@randsum/dice";function p({modifier:e=0,amplifyHope:t=!1,amplifyFear:r=!1}){if(t&&r)return[{quantity:2,sides:20,modifiers:{plus:e}}];if(t)return[{quantity:1,sides:20,modifiers:{plus:e}},{quantity:1,sides:12,modifiers:{plus:e}}];if(r)return[{quantity:1,sides:12,modifiers:{plus:e}},{quantity:1,sides:12,modifiers:{plus:e}}];return[{quantity:2,sides:12,modifiers:{plus:e}}]}function o({modifier:e=0,rollingWith:t,amplifyHope:r=!1,amplifyFear:n=!1}){let{result:[u,l],total:i}=s(...p({modifier:e,amplifyHope:r,amplifyFear:n}));if(u===void 0||l===void 0)throw new Error("Failed to roll hope and fear");let[a,c]=d(i,t);return{type:f(u,l),total:a,rolls:{hope:u,advantage:c,fear:l,modifier:e}}}function f(e,t){if(e===t)return"critical hope";if(e>t)return"hope";return"fear"}function d(e,t){if(t){let r=D();if(t==="Advantage")return[e+r,r];return[e-r,-r]}return[e,void 0]}function D(){return s({quantity:1,sides:6}).total}function m(e,t){let r=o(t),n={...r,success:r.type==="critical hope"?!0:r.total>=e,target:e};return{...n,description:H(n)}}function H({type:e,success:t}){if(e==="critical hope")return"Critical Success (With Hope)";if(t)return`Success with ${e}`;return`Failure with ${e}`}export{o as rollDH,m as meetOrBeatDH};