Hrmmm.... it depends on exactly what kind of output you'd like. If
you're happy with just the roll expression itself being printed out, you
should be able to get that effect by removing the roll brackets
entirely, before adding them back to turn it into an actual roll: {{damage=Rolling "@{weapon1_inv_damage} @{weapon1_inv_db}" = [[ @{weapon1_inv_damage}@{weapon1_inv_db} ]] }} This
should work provided none of the @{weapon1_inv_damage} references have
any [[ sub-rolls ]] in them, though it's going to directly print out the
"2d8" rather than roll them. If you did want full control over every part of the roll, you could write a sheetworker to listen for changes/additions to the section, and run a replacer function on it. Here's an example (it's not at all robust, it doesn't even handle * or / signs.... just a quick example!) let example1 = `4 + 3d8 + 2` ; let example2 = `1d4 + 5 + @{weapon1_damage_bonus}` ; const rollWrapper = ( rollExpression ) => { return rollExpression . replace ( / ( \d + )([ dD ] \d + ) / g , ( match , part1 , part2 ) => { // expand XdY rolls & wrap separately let output = []; for ( let i = 0 ; i < part1 ; i ++) { output . push ( `[[ ${ part2 } ]]` ); } return output . join ( ' + ' ); }) . replace ( / ( ^| [ +- \s ])( \d + )([ +- \s ] |$ ) / g , ` [[$2]] ` ) // wrap lone integers so they can be called . replace ( / ( @{ [^ } ] *? } ) / g , ` [[$1]] ` ); // wrap @{attribute} references } // Expected Output: // rollWrapper(example1) ==> [[4]] + [[d8]] + [[d8]] + [[d8]] + [[2]] // rollWrapper(example2) ==> [[d4]] + [[5]] + [[@{weapon1_damage_bonus}]] It's a bit of work making sure your replacer won't choke on anything players might type in to the character sheet, though. The above is super rough and could easily be tripped up. The first option is much easier :)