如何在RPG中devise一个可以保持不同攻击速度的武器的伤害公式?

我正在制作一个移动RPG游戏,这是一个无限的游戏,里面有暗黑破坏神3这样的战利品系统。武器有攻击和速度,装甲都有一个阻力值(不是百分比)。

我使用的公式是:

float realDamage = SkillDmg * BaseDamage / ( BaseDamage + Defense ) 

结果是好的,如果防守降低,伤害会变得更大,并且由于(基本伤害 +防御)之间的分配而不会成指数上升。

假设我有一把攻击速度为1.0的剑,造成50点伤害。 那50秒,我有一把匕首,我希望它能更快地攻击,但是当然伤害更less,保持DPS的逻辑上说,如果匕首的攻击速度加倍,伤害需要减半(2.0速度25 dmg)。 但是使用上面的公式,你会发现实际的真实伤害DPS低于剑。

我解决了这个问题,使匕首没有造成25点伤害,而是多了一点点,做了一些计算,我可以让真正的DPS相同来平衡事情。 在这种情况下,2.0速的匕首需要造成32点伤害,与剑相同的真实伤害值。

但是,我想在武器上显示DPS号码。 如果我把匕首的DPS显示为32 dmg * 2的攻击速度就会达到64 dps,相比剑50 dps,人们会明显的说匕首更好,但是当然不是。

可能的解决scheme? 改变最初的伤害公式? 如果是这样的话? 让我们假设我不改变公式,有没有解决办法? 我真的不想欺骗匕首来造成更多的伤害

我真的希望我知道暗黑破坏神3的伤害公式。我知道暗黑3武器的DPS只是基础伤害*攻击速度。

编辑:

 Lets assume defense = 50 and normal attack (skillDmg = baseDmg) Sword 1.0 attack speed dealing 50 dmg -> real damage hit= 50 * 50 / ( 50 + 50 ) = **25 dmg** = 25 dps Dagger 2.0 attack speed dealing 32 dmg -> real damage hit = 32 * 32 / ( 32 + 50 ) = **12.5 dmg** = 25 dps Sword item, lets display the actual sword dps, 50 * 1.0 = **50 dps** Dagger item, lets display the dagger dps, 32 * 2.0 = **64 dps** (SHOULD BE THE SAME) 

用这个公式计算DPS的问题是因为你所说的BaseDamage实际上并不是这样。

假设所有的数字都是正数, BaseDamage / ( BaseDamage + Defense )总是会parsing为1到0之间的浮点数。如果你有10个BaseDamage ,1,000 BaseDamage或1,000,000 BaseDamage ,那么你将永远处于那个范围。 在这个范围内的哪个地方取决于武器基本BaseDamage与目标Defense的比较。 这意味着实际上影响攻击的真正伤害量级的因素主要是SkillDmg乘数。

考虑到这些math性质,我不会真的把这个武器属性BaseDamage ,而是把DefensePenetration BaseDamage DefensePenetration ,因为它描述了武器克服敌人防御的能力,并且仍然对它造成大部分伤害。 这实际上可能是一个有趣的机制(或不是…这是你需要testing的东西),但是没有提到武器的功率水平。

那么我们如何解决这个问题呢?

那么,这个问题没有正确的解决scheme。 但是一个可能做你想做的改变(两倍于强大的武器=大约两倍的伤害)是把BaseDamagejoin另一个乘法因子:

 float realDamage = SkillDmg * BaseDamage * BaseDamage / (BaseDamage + Defense) 

如果你喜欢你偶然发现的防御机制,这就是Penetration作为一个单独的武器的外观:

 float realDamage = SkillDmg * BaseDamage * Penetration / (Penetration + Defense) 

关于这个公式的好处是,它的规模相当好:

  • 即使防御与攻击值相比是可怜的,也不会有比攻击更多的伤害。 这给你一个角色可以造成多大伤害的上限,这使得平衡变得容易得多。
  • 另一方面,无论防守能力有多高,都不可能完全减轻伤害(除了四舍五入的错误)​​,所以对于防守者来说总是有改进的空间,而且从来没有完全毫无意义的进攻。
  • 当防御和基本伤害(和你想要的渗透)大致相同时,基本伤害大约有一半是真实伤害。 无论价值有多大,这都是事实。 这也是你可以基于你的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 

从这些数字可以看出,高伤害低速武器对于同一个敌人来说仍然比低伤害高速武器更强大,只要根据AttackFrequency * BaseDamage / 2具有相同的DPS。 但是这个效果在高清敌人上比在低清敌人上更明显。 两者在0D的敌人上同样好。 这意味着快速攻击武器对低空敌人的伤害要比对高空敌人的伤害要小。

高速武器可以使玩家在伤害分配方面有更大的灵活性,从而避免在DPS上浪费DPS。 当玩家面对大量非常弱的敌人时,每击一次都会死亡,那么每秒5次攻击可以每秒杀死5个敌人,而每秒1次攻击每秒只能杀死1个敌人。 另外一个可能的好处是当你随机添加攻击时出现。 由于大数定律 ,许多弱攻击会比less数弱攻击产生更平稳,更可靠的伤害输出。 玩家通常从可靠性中受益。 但是当这些考虑因素与你的游戏机制和/或遭遇devise无关时,你将不得不让你的速度更快一些。

提高高速武器的一个方法就是引入效果,每次命中的几率为x%,而不依赖于伤害。 使用快速攻击武器会更强大,因为它们会更频繁地触发。

如果你打算使用相同“能量”的武器来获得相同的DPS,那么一个简单的解决scheme就是直接分配DPS并计算每个命中的伤害,例如

 float realDamage = (SkillDmg * DPS / ( DPS + Defense )) / AttackSpeed 

在这个例子中,你的剑有50 DPS和1.0的攻击速度,匕首有50 DPS和2.0的攻击速度。 如果你想显示每击伤害,就是DPS除以攻击速度(即剑50,匕首25)。

请注意,这摆脱了“较慢的武器比较高的防御”机制,我认为这是你想要的。