in magic.c in the rd_parse function find case '*': case '/': case '%': case 'd': case 'D': case '<': case '>': case '{': case '}': case '=': if( !total ) gop = x; break; make it like this case '*': case '/': case '%': case 'd': case 'D': case 'R': case '<': case '>': case '{': case '}': case '=': if( !total ) gop = x; break; Thats just adding in the 'r' and 'R' cases Then farther down find case 'd': case 'D': total = dice( total, rd_parse( ch, level, sexp[1] ) ); break; case '<': total = ( total < rd_parse( ch, level, sexp[1] ) ); break; make it like this case 'd': case 'D': total = dice( total, rd_parse( ch, level, sexp[1] ) ); break; case 'R': total = number_range( total, rd_parse( ch, level, sexp[1] ) ); break; case '<': total = ( total < rd_parse( ch, level, sexp[1] ) ); break; Thats adding in the handling of them :) Thats all there is to that one and it's actually a nice little deal :) Just have to make sure that its used correctly (10*5)R(12*7) returned 70 from dice_parse and that one would always return 70 while doing this ((10*5)R(12*7)) returned <random number between 50 and 84> from dice_parse Hope someone finds it useful even though its a simple deal later. *Update* Removed the 'r' cases since they have been found to be able to cause like sanctuary (in the modified field and scry etc...) to return wierd values instead of the 0 they should return so you get the right affects :)