Как известно, в настольной ролевой игре D&D 5e присутствует следующая механика: преимущество (персонаж кидает две двадцатигранные игральные кости и выбирает наибольшее число) и помеха (то же самое, но с выбором наименьшего числа).
Сам я по образованию математик, поэтому мне пришла в голову следующая идея: ведь все оптимизаторские билды учитывают только потенциальный урон, однако они не учитывают того, что при броске атаки существует ненулевая вероятность нанести критический урон.
В текущем посте я расскажу, как можно рассчитать среднее значение урона для любых бросков атак. На картинке ниже вы видите три линии, отложенные для случая, когда вы не добавляете значение своей характеристики к броску урона. К этому базово относятся произнесение любого заклинания, требующего броска урона. По оси абсцисс отложена величина z=AC-tohit, или, говоря простым языком, минимальное значение на кубе, необходимое Вам для того, чтобы попасть в цель. По оси ординат отложен коэффициент, на который стоит умножить значение урона. Например, значение 0.9 означает, что среднее значение вашей атаки надо умножить на 0.9, и так далее.
Синяя линия отражает обычную ситуацию, когда у вас нет ни помехи, ни преимущества, оранжевая линия отражает преимущество, а зелёная - помеху.
Очевидно, что все линии являются невозрастающими по z: действительно, чем большее значение на кубе необходимо выбросить, тем меньше вероятность попасть и тем меньше средний урон.
Откуда же возникает увеличенный и уменьшенный урон (которого не будет у спасбросков)? Дело в том, что преимущество увеличивает вероятность крита с 5% (1/20) до 9.75%(39/400), а помеха уменьшает его с тех же 5% до каких-то 0.25%(1/400). При этом в относительных величинах симметрия между двумя механиками сохраняется: первая увеличивает вероятность на 95%, а вторая уменьшает её на 95%.
Как же нам подсчитать все эти кривые? Самый простой случай - это когда у нас ни помехи, ни преимущества. Пусть для попадания нам необходимо выкинуть на кубе z или больше. Тогда мы можем записать следующее распределение вероятностей:
Вероятность промаха M равна вероятности выкинуть на кубе от 1 до z-1. В этом случае мы наносим 0% урона
Вероятность попадания H равна вероятности выкинуть на кубе от z-1 до 19. В этом случае мы наносим 100% от среднего урона (коэффициент 1)
Вероятность критического попадания C равна вероятности выкинуть на кубе 20. В этом случае мы наносим 200% от среднего урона (так как кости урона удваиваются)
Легко видеть, что p(M)=(z-1)/20, p(H)=(20-z)/20 и p(C)=1/20. Однако важно понимать границы применимости нашей модели: во-первых, мы не можем выкинуть на к20 меньше 1, при этом 1 - это всегда критический промах. Даже если у вашей цели AC 8 (привет, зомби), а у вас +14 на атаку - на 1 вы промахиваетесь. Отсюда минимальное значение z равно 2.
Во-вторых, пусть у нас монстр с бесконечным классом брони. Однако вы всё равно имеете шанс пробить его, пускай и с критического попадания. Поэтому максимальное значение z равно 20.
Действительно, при z=2 мы промахиваемся с вероятностью 1/20, попадаем с вероятностью 18/20 и наносим критический урон с вероятностью 1/20. Аналогично, при z=20 мы промахиваемся с вероятностью 19/20, попадаем с вероятностью 0, и наносим критический урон с вероятностью 1/20.
Несложно видеть, что если z<2, то распределение вероятностей такое же, как и при z=2. Аналогичная ситуация при z>20, поэтому наиболее интересный участок расположен на отрезке [2,20].
Мы можем спокойно найти среднее значение урона, пользуясь формулой математического ожидания: (z-1)/20*0+(20-z)/20*1+1/20*2=(22-z)/20.
Итак, в случае обычного броска атаки коэффициент вашего среднего урона составит (22-z)/20 и он будет линейно уменьшаться от 1 при z=2 до 0.1 при z=20.
Но теперь мы переходим к случаю преимущества. Прямыми расчётами можно установить, что вероятность p_k выбросить число k с преимуществом можно рассчитать по формуле p_k = (2*k-1)/400.
Тогда распределение вероятностей мы можем посчитать по формуле суммы арифметической прогрессии. Итоговое распределение вероятностей выглядит так:
Вероятность промахнуться M составляет [(z-1)/20]^2, вероятность попасть H составляет [(z+18)(20-z)]/400, вероятность нанести критическое попадание C составляет 39/400. Заметим, что на границах применимости нашей модели у нас распределение вероятностей так же меняется:
При z=2 (промах только на 1) мы имеем: p(M)=1/400, p(H)=9/10, p(C)=39/400, а при z=20 (попадание только на 20): p(M)=361/400, p(H)=0, p(C)=39/400.
Соответственно, математическое ожидание урона у нас равно (-z^2+2z+438)/400. Знак "-" перед квадратном не должен вас смущать: ведь зависимость урона от минимального значения куба у нас теперь получилась нелинейной: несложно видеть, что на отрезке [2,20] указанная парабола принимает положительные значений, и строго убывает от 1.095 при z=2 до 0.0975 при z=20.
Аналогично, мы можем найти, что вероятность p_k выбросить число k с помехой рассчитывается по простой формуле p_k = (41-2*k)/400. В этом случае наши расчёты приводят к следующему:
Вероятность промахнуться M составляет [(-z^2+42z-41)/400]^2, вероятность попасть H составляет [(z-20)(z-22)]/400, вероятность нанести критическое попадание C составляет 1/400. Заметим, что на границах применимости нашей модели у нас распределение вероятностей выглядит следующим образом:
При z=2 (промах только на 1) мы имеем: p(M)=39/400, p(H)=9/10, p(C)=1/400, а при z=20 (попадание только на 20): p(M)=399/400, p(H)=0, p(C)=1/400.
Соответственно, математическое ожидание урона у нас равно (z^2-2z+442)/400. Зависимость урона от минимального значения куба у нас вновь получилась нелинейной: несложно видеть, что на отрезке [2,20] указанная парабола принимает положительные значений, и строго убывает от при 0.905 при z=2 до 0.005 при z=20.
Теперь вы можете решить следующую задачу. Перед вами в 5 футах стоит воин, закованный в тяжёлые латы и держащий в правой руке щит, соответственно, его AC равен 20. Вы мультиклассированный клирик/сорка второго тира и у вас есть выбор: использовать shocking grasp или рискнуть inflict wounds. Какой выбор нанесёт в среднем больше урона, если ваш модификатор к броску атаки равен +5.
Решение задачи. Число z = AC - tohit = 15. Inflict Wounds наносит 3d10 урона, т. е. 16.5 урона в среднем. Shocking grasp нанесёт только 2d8 урона (9 в среднем), однако у вас будет преимущество на бросок атаки, поскольку цель носит металлическую броню.
Подставляем z=15 в нашую формулу: для Inflict Wounds доля составляет 7/20, которые вместе со средним дают нам значение среднего урона в 7/20*16.5 = 5.775.
Для shocking grasp с адвантажем доля составит 243/400. В итоге средний урон составит 243/400 * 9 = 5.4675.
Парадоксальный результат: во втором тире Inflict wounds в среднем в такой ситуации нанесёт чуь больше урона, чем shocking grasp с адвантажем, так что имеет смысл попробовать рискнуть первым слотом.
Если же мы хотим дополнительно учесть бонус характеристики (например, Agonizing Blast или атака оружием), формула чуть-чуть поменяется: Пусть y - средний урон вашей атаки, и Abi - ваш модификатор атакующей характеристики.
В итоге мы получим следующие формулы, более усложнённые. На картике представлены в следующем порядке: обычный случай, преимущество, помеха
К примеру, мы можем рассмотреть следующий пример:
Гиш с бонусом атаки +5 и бонусом силы +3 атакует персонажа с AC 14 в металлической броне. Что выгоднее: shocking grasp или оружие с помощью GWM и Longsword в двух руках (-5 к броску атаки/+10 к урону).
Решение. Для shocking grasp z= 16 - 5 = 9, y=9, Abi = 0. Формула даёт нам: 15/16, что даёт в итоге 15/16*9 = 8.4375.
Для longsword в двух руках: +10 к урону мы приплюсовываем к бонусу силы, т. о. Abi=13. А штраф -5 добавим к бонусу атаки: tohit = 0. В итоге z= 14-0=14, y=5.5 (1d10 урона) и Abi=13. Формула даст нам 1.22727. Таким образом, средний урон от GWM составит 1.22727 * 5.5 = 6.75.
То есть, в этом случае размен -5/+10 нам невыгоден.