Обозначим вектор взгляда v1, а вектор пули v2. Первый образован start и dest точками, а второй - start и end точками (см. функции fix_recoil_trace() плагина "Fix Recoil"). end точку можно получить так: get_tr2(ptr, TR_vecEndPos, end).
С помощью xs_vec_cross() функции из scripting\include\xs.inc библиотеки получаем ортогональный векторам v1 и v2 вектор v3.
Затем таким же образом получаем ортогональный векторам v1 и v3 вектор v4.
С помощью xs_vec_normalize() получаем единичные векторы из векторов v1, v4, v3, первые образуют новый базис, т.е. оси относительной прямоугольной декартовой системы координат.
Затем переходим к относительной полярной системе координат и поворачиваем вектор v1'' на желаемый угол, величина последнего соответсвует фактору разброса пули.
После чего переходим обратно к относительной прямоугольной декартовой системе координат, а затем - к исходной.
Полезная информация по теме:
Системы координат
Формулы векторной алгебры
Матрица
Определитель матрицы
Переход к новому базису