Проблемы с вычислением DPS по этой формуле заключаются в том, что то, что вы называете BaseDamage
, на самом деле не таково.
Предполагая, что все числа положительные, BaseDamage / ( BaseDamage + Defense )
всегда будут преобразовываться в числа с плавающей точкой где-то между 1 и 0. Неважно, если у вас есть 10 BaseDamage
, 1 000 BaseDamage
или 1 000 000 BaseDamage
, вы всегда будете в этом диапазоне. Где этот диапазон зависит от того, BaseDamage
как оружие сравнивается с Defense
целью. Это означает, что на самом деле на порядок величины реального повреждения атаки влияет в основном SkillDmg
множитель.
Глядя на эти математические свойства, я бы на самом деле не назвал это свойство оружия, BaseDamage
а скорее DefensePenetration
потому, что он описывает способность оружия преодолевать оборону противника и при этом наносить большую часть его урона. На самом деле это может быть интересная механика (или нет ... это то, что вам нужно для тестовой игры), но она мало говорит об уровне мощности оружия.
Итак, как мы решаем эту проблему?
Ну, нет правильного решения этой проблемы. Но изменение, которое может сделать то, что вы хотите сделать (вдвое мощнее оружие = примерно вдвое больше урона), это добавить BaseDamage
еще один множитель:
float realDamage = SkillDmg * BaseDamage * BaseDamage / (BaseDamage + Defense)
Если вам нравится механика защитного проникновения, которую вы случайно обнаружили, вот как она будет выглядеть Penetration
в виде отдельной характеристики оружия:
float realDamage = SkillDmg * BaseDamage * Penetration / (Penetration + Defense)
Приятно то, что эта формула достаточно хорошо масштабируется:
- Даже когда защита жалкая по сравнению со значением атаки, урона никогда не бывает больше, чем атаки. Это дает вам верхний предел того, сколько урона может нанести персонаж, что значительно облегчает баланс.
- С другой стороны, независимо от того, насколько высока защита, она никогда не сможет полностью смягчить урон (кроме как из-за ошибок округления), поэтому у защитника всегда есть место для улучшения и никогда не бывает совершенно бессмысленной атаки.
- Когда Defence и BaseDamage (и Penetration, когда вы этого хотите) примерно одинаковы, realDamage примерно вдвое меньше, чем BaseDamage. Это верно независимо от того, насколько велики значения. Это также то, на чем вы можете основывать свою оценку DPS. Просто предположите, что у врага столько же защиты, сколько у оружия / атаки, что означает, что ваша формула DPS становится
AttackFrequency * BaseDamage / 2
Изменить: Вот несколько таблиц с примерами значений:
Damage by Defense for single attack
Defense
| 0 | 35 | 50 | 100
---+-------+------+-------+-------
35 | 35 | 17.5 | 14.4 | 9.1
Attack 50 | 50 | 29.4 | 25.0 | 16.6
100 | 100 | 74.0 | 66.7 | 50.0
Dps assuming HitFrequency = 100 / Attack
Defense
| 0 | 35 | 50 | 100
---+-------+-------+------+-------
35 | 100 | 50.0 | 41.1 | 25.9
Attack 50 | 100 | 58.8 | 50.0 | 33.3
100 | 100 | 74.0 | 66.7 | 50.0
Как вы можете видеть из этих цифр, оружие с высоким уроном и низкой скоростью все еще номинально сильнее против того же врага, чем оружие с низким уроном и высокой скоростью, если оно имеет одинаковый DPS в соответствии с AttackFrequency * BaseDamage / 2
. Но эффект более заметен для врагов с высоким разрешением, чем для врагов с низким разрешением. Оба одинаково хороши для врагов 0-def. Это означает, что оружие быстрой атаки менее опасно для врагов с низким разрешением, чем для врагов с высоким разрешением.
Это может быть уравновешено тем фактом, что высокоскоростное оружие дает игроку больше гибкости в распределении урона и, таким образом, позволяет ему не тратить впустую DPS на излишки. Когда игрок сталкивается с очень большим количеством очень слабых врагов, которые все умирают с одного удара, то оружие с 5 атаками в секунду может убить 5 врагов в секунду, в то время как оружие с 1 атакой в секунду может убить только 1 врага в секунду. Другое возможное преимущество появляется, когда вы добавляете случайность к атакам. Из-за закона больших чиселмногие слабые атаки наносят более гладкий и надежный урон, чем несколько сильных. Игроки обычно выигрывают от надежности. Но когда такие соображения не имеют значения из-за вашей игровой механики и / или дизайна столкновения, вам придется сделать свое более быстрое оружие немного более мощным, чем оно должно было бы компенсировать.
Одним из способов повышения быстродействия оружия может быть введение эффектов, которые срабатывают с вероятностью x% за удар и не зависят от урона. Они были бы намного мощнее с быстрым оружием, потому что они будут срабатывать гораздо чаще.
damage * damage / ( damage + defense)
), просто без учета урона навыка. Причина различия в DPS заключается в том, что вы используете одну и ту же защиту. Причина, по которой вы получаете разные результаты, заключается в том, что с этой формулой медленное, но сильное оружие лучше против врагов с высоким разрешением, а быстрое, но слабое оружие лучше против врагов с низким разрешением (что кажется правдоподобным). Вы приняли противника с высокой обороной и уравновесили против него оба оружия, а это значит, что вы одолели кинжал. Расчет DPS показывает, что это сила.