さまざまな攻撃速度の武器のバランスを保つRPGのダメージ式を設計するにはどうすればよいですか?


8

私はモバイルRPGゲームを作成しています。ディアブロ3のような戦利品システムがある無限のゲームです。武器には攻撃と速度があり、鎧には抵抗値があります(パーセントではありません)。

私が使用している式は次のとおりです。

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

結果は良好です。防御力が低くなると、ダメージが大きくなり、(BaseDamage + Defense)の間の分割のために指数関数的に上昇しません。

攻撃速度が1.0で、50のダメージを与える剣があるとします。それは50 dpsであり、私はそれがより速く攻撃したいダガーを持っていますが、もちろんより少ないダメージを与えます、dpsを維持するために、ロジックはダガーの攻撃速度が2倍になる場合、ダメージは半分になる必要があると言います(2.0スピード25 dmg)。しかし、上記の式を使用すると、実際の実際のダメージDPSが剣よりも低いことがわかります。

ダガーに25のダメージを与えずに少しだけ増やして、これを解決しました。いくつかの計算を行って、実際のdpsを同じにして、物事のバランスをとることができます。この場合、2.0スピードの短剣は剣と同じ実際のダメージdpsになるように32ダメージを与える必要があります。

しかし、武器にDPS番号を表示したい。短剣のDPSを32 dmg * 2の攻撃速度で表示すると、剣の50 dpsと比較して64 dpsになります。

可能な解決策?最初のダメージ計算式を変更しますか?もしそうなら、どれに?式を変更しないとしましょう、解決策はありますか?私は本当にそれを作るために半分より多くのダメージを与えるために短剣をだまさなければならないのが好きではありません...

私は本当にディアブロ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)

1
あなたの編集には、damage * damage / ( damage + defense)スキルのダメージを考慮せずに、私の回答()に投稿した式があります。DPSが異なるのは、同じ防御策を使用しているためです。異なる結果が得られる理由は、その式では、低速で強力な武器は高解像度の敵に対して優れているのに対し、高速で弱い武器は低解像度の敵に対して優れているためです(これはもっともらしいことです)。あなたは高防御の敵を想定し、それに対して両方の武器のバランスをとりました。つまり、短剣を圧倒しました。DPSの計算は、その過大能力を示しています。
Philipp

回答:


20

その数式からDPSを計算する際に発生する問題BaseDamageは、実際にはそうではないように見えるためです。

すべての数値が正であると仮定すると、BaseDamage / ( BaseDamage + Defense )常にあなたは10があればそれは問題ではない1と0の間の浮動小数点数のどこかに解決されBaseDamage、千BaseDamageまたは1,000,000をBaseDamage、あなたは常にその範囲内であろう。その範囲のどこBaseDamageが、武器のとDefenseターゲットのの比較に依存します。つまり、実際に攻撃のrealDamageの大きさ影響を与えるのは、主にSkillDmg乗数です。

これらの数学的性質を見て、私は本当にこの武器のプロパティを呼び出すことはありませんBaseDamage、むしろしかしDefensePenetration、それは敵の防御を克服し、今でもその被害のほとんどを実行する武器の能力を記述しているので、。これは実際には面白いメカニックかもしれませんが(そうでない場合...テストプレイに必要なものです)、武器のパワーレベルについてはあまり言及していません。

では、この問題をどのように解決すればよいでしょうか?

さて、この問題に対する正しい解決策はありません。しかし、あなたがやりたいことを行うかもしれない変更(強力な武器の2倍=約2倍のダメージ)は、BaseDamageを別の乗法因子として追加することです:

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

誤って発見した防御貫通メカニズムが気に入った場合は、次のようにPenetration別の武器ステータスとして表示されます。

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

この式の良い点は、それが非常によくスケーリングすることです:

  • 防御力が攻撃値に比べて悲惨な場合でも、攻撃以上のダメージはありません。これにより、キャラクターが与えることができるダメージの上限が与えられ、バランシングがはるかに簡単になります。
  • 反対に、防御力がどれほど高くても、完全にダメージを軽減することはできません(丸め誤差を除く)。したがって、防御側には常に改善の余地があり、完全に無意味な攻撃はありません。
  • DefenseとBaseDamage(および必要な場合のペネトレーション)がほぼ同じ場合、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を浪費することを避けることができるという事実によってバランスがとられるかもしれません。プレイヤーが非常に多くの非常に弱い敵に直面し、すべてが1ヒットで死ぬ場合、1秒あたり5発の武器は1秒あたり5人の敵を殺すことができ、1秒あたり1発の武器は1秒あたり1人の敵しか殺せません。攻撃にランダム性を加えると、もう1つの可能な利点が現れます。多数法則により、多くの弱い攻撃は、いくつかの強い攻撃よりもスムーズで信頼性の高いダメージを出力します。プレイヤーは通常、信頼性の恩恵を受けます。ただし、ゲームのメカニズムやエンカウンターのデザインが原因でこのような考慮事項が無関係である場合は、より高速な武器を補正するよりも少し強力にする必要があります。

高速武器にブーストを与える1つの方法は、ヒットごとにx%の確率でトリガーされ、ダメージに依存しないエフェクトの導入です。これらははるかに頻繁にトリガーするため、ファストアタック武器ではるかに強力になります。


@Philippに感謝します。それで解決すると思います。現時点でのダメージは大きすぎますが、微調整します。
marcg11 2017

@ marcg11正確にはあなたの範囲はSkillDmg何ですか?私はそれが乗法因子であると想定しました。つまり、基本攻撃には1.02倍のダメージ、特殊攻撃には2倍のダメージがあり2.0ます。これらを整数にしたい場合はBaseDamage、乗算するのではなく、整数に追加することをお勧めします。
Philipp

私がskillDamageを乗数として確立した場合、あなたが与えた式は私のものとまったく同じであることに気づきました。ですから、ダメージを維持するために攻撃速度を2倍にしても、ダガーのダメージを半分にすることはできません。
marcg11 2017

@ marcg11いいえ、同じではありません。主な違いは、BaseDamageの2乗(BaseDamage * BaseDamage)を乗算することです。BaseDamageを乗算するのは1回だけです(つまり、BaseDamageは式で削減されます)。
Philipp

しかし、私のskillDmgはパーセントではありませんでした。通常の攻撃skillDmgはbaseDmgと同じなので、同じです。
marcg11 2017

0

等しい「パワー」の武器が等しいDPSをもたらすことを意図している場合、簡単な解決策は、DPSを直接割り当て、それからヒットあたりのダメージを計算することです。たとえば、

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

この例では、あなたの剣は50 DPSと1.0の攻撃速度を持ち、短剣は50 DPSと2.0の攻撃速度を持っています。ヒットあたりのダメージを表示したい場合、それは単純にDPSを攻撃速度で割ったものです(つまり、剣の場合は50、短剣の場合は25)。

これは、「遅い武器は優れた防御力よりも優れている」メカニズムを排除することに注意してください。


はい多かれ少なかれ考えですが、代わりにDPS Iのレベルのすべての武器のために同じ値を使用していますただし、X
marcg11
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.