Two things are breaking this, and one of them explains the "always 2" result. Problem 1: `kh` can't take parentheses. The keep modifier only accepts a plain number. Attribute calls work because they're substituted as text before the roll parses, but the parens around it break the parser. Once `kh(` fails, the leftover `<2` gets read as a target number comparison, and that switches the roll into success-counting mode. Instead of summing your dice, it counts how many dice met the condition. That's why you're seeing tiny flat results like 2 instead of damage totals. Problem 2: the reroll comparison can swallow your flat bonus. With `r<2+(@{...|level})+3`, the parser can read the comparison target as the whole expression rather than just the 2. Keep the modifiers tight against the dice and add the flat bonus cleanly afterward. One rules check worth confirming at your table: this rerolls until no 1s or 2s remain, including on the rerolled dice. If your intent is "reroll each 1 or 2 only once," use `ro<2` (reroll once) instead of `r<2`. I think this is a version that will get you what you want. [[(1+@{Azram the Flameborn|proficiency})d10r<2kh@{Azram the Flameborn|proficiency} + @{Azram the Flameborn|level} + 3]]