updated roll function