Wie entwerfe ich eine Schadensformel in einem Rollenspiel, die Waffen mit unterschiedlichen Angriffsgeschwindigkeiten im Gleichgewicht hält?

8

Ich mache ein mobiles RPG-Spiel, ein unendliches, in dem es ein Beutesystem wie Diablo 3 gibt. Waffen haben Angriff und Geschwindigkeit, Rüstungsteile haben einen Widerstandswert (nicht Prozentsatz).

Die Formel, die ich benutze, lautet:

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

Die Ergebnisse sind gut, der Schaden wird größer, wenn die Verteidigung geringer wird, und er steigt aufgrund der Trennung zwischen ( BaseDamage + Verteidigung) nicht exponentiell an .

Nehmen wir an, ich habe ein Schwert mit einer Angriffsgeschwindigkeit von 1,0, das 50 Schaden verursacht. Das sind 50 dps, und ich habe einen Dolch, von dem ich möchte, dass er schneller angreift, aber natürlich weniger Schaden verursacht. Um die dps aufrechtzuerhalten, sagt die Logik, dass der Schaden halbiert werden muss, wenn die Angriffsgeschwindigkeit der Dolche verdoppelt wird (2,0 Geschwindigkeit mit) 25 dmg). Aber wenn Sie die obige Formel verwenden, werden Sie sehen, dass der tatsächliche Schaden DPS niedriger ist als das Schwert.

Ich habe das gelöst, indem ich den Dolch nicht 25 Schadenspunkte, sondern ein bisschen mehr Schaden zufügen ließ. Mit einigen Berechnungen kann ich dafür sorgen, dass die tatsächlichen Schadenspunkte gleich sind, um die Dinge auszugleichen. In diesem Fall müsste der Dolch mit einer Geschwindigkeit von 2,0 32 Schadenspunkte verursachen, um den gleichen tatsächlichen Schaden wie das Schwert zu erzielen.

Ich möchte jedoch die DPS-Nummer auf Waffen anzeigen. Wenn ich nur die DPS des Dolches als 32 dmg * 2 Angriffsgeschwindigkeit anzeige, werden es 64 dps sein, verglichen mit dem Schwert 50 dps, man wird klar sagen, dass der Dolch besser ist, aber natürlich nicht.

Mögliche Lösungen? Die anfängliche Schadensformel ändern? Wenn ja zu welchem? Nehmen wir an, ich ändere die Formel nicht. Gibt es eine Lösung? Ich mag es wirklich nicht, den Dolch austricksen zu müssen, um mehr Schaden als die Hälfte zu verursachen, um ihn gleichmäßig zu machen ...

Ich wünschte wirklich, ich würde die Schadensformel für Diablo 3 kennen. Ich weiß, dass Diablo 3 Waffen DPS einfach Grundschaden * Angriffsgeschwindigkeit sind.

Bearbeiten:

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)
marcg11
quelle
1
In Ihrer Bearbeitung haben Sie die Formel, die ich in meiner Antwort ( damage * damage / ( damage + defense)) gepostet habe , nur ohne Berücksichtigung des Fähigkeitsschadens. Der Grund für den Unterschied im DPS liegt darin, dass Sie dieselbe Verteidigung verwenden. Der Grund, warum Sie unterschiedliche Ergebnisse erzielen, ist, dass mit dieser Formel langsame, aber starke Waffen besser gegen hochauflösende Feinde sind, während schnelle, aber schwache Waffen besser gegen niederauflösende Feinde sind (was plausibel erscheint). Sie haben einen hochauflösenden Feind angenommen und beide Waffen gegen ihn abgewogen, was bedeutet, dass Sie den Dolch überwältigt haben. Die DPS-Berechnung zeigt diese Übermacht.
Philipp

Antworten:

20

Die Probleme, die Sie bei der Berechnung des DPS aus dieser Formel haben, liegen darin, dass das, was Sie nennen BaseDamage, nicht das zu sein scheint.

Angenommen, alle Zahlen sind positiv, BaseDamage / ( BaseDamage + Defense )wird immer in eine Gleitkommazahl zwischen 1 und 0 aufgelöst. Es spielt keine Rolle, ob Sie 10 BaseDamage, 1.000 BaseDamageoder 1.000.000 haben BaseDamage, Sie befinden sich immer in diesem Bereich. Wo in diesem Bereich, hängt davon ab, wie die BaseDamageWaffe mit der Defensedes Ziels verglichen wird . Das heißt, was tatsächlich die Größenordnung des realDamage eines Angriffs beeinflusst, ist meistens der SkillDmgMultiplikator.

Wenn ich mir diese mathematischen Eigenschaften anschaue, würde ich diese Waffeneigenschaft nicht wirklich nennen BaseDamage, sondern DefensePenetrationweil sie die Fähigkeit der Waffe beschreibt, die feindliche Verteidigung zu überwinden und dennoch den größten Teil ihres Schadens zu verursachen. Dies mag tatsächlich eine interessante Mechanik sein (oder auch nicht ... es ist etwas, das Sie testen müssen), aber es sagt nicht viel über die Stärke einer Waffe aus.

Wie lösen wir dieses Problem?

Nun, es gibt keine richtige Lösung für dieses Problem. Aber eine Änderung, die das tun könnte, was Sie tun möchten (doppelt so mächtige Waffe = ungefähr doppelt so viel Schaden), besteht darin, das BaseDamageals weiteren multiplikativen Faktor hinzuzufügen :

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

Wenn Ihnen die Abwehrmechanik gefällt, die Sie versehentlich entdeckt haben, sieht sie folgendermaßen aus Penetration:

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

Das Schöne an dieser Formel ist, dass sie recht gut skaliert:

  • Selbst wenn die Verteidigung im Vergleich zum Angriffswert erbärmlich ist, gibt es nie mehr Schaden als Angriff. Dies gibt Ihnen eine Obergrenze dafür, wie viel Schaden ein Charakter anrichten kann, was das Balancieren erheblich erleichtert.
  • Auf der anderen Seite kann die Verteidigung, egal wie hoch die Verteidigung wird, den Schaden niemals vollständig mindern (außer durch Rundungsfehler), so dass der Verteidiger immer Raum für Verbesserungen hat und es niemals einen völlig sinnlosen Angriff gibt.
  • Wenn Verteidigung und BaseDamage (und Penetration, wenn Sie es möchten) ungefähr gleich sind, gibt es ungefähr halb so viel RealDamage wie BaseDamage. Dies gilt unabhängig davon, wie groß die Werte sind. Darauf können Sie auch Ihre DPS-Schätzung stützen. Nehmen Sie einfach an, dass der Feind genauso viel Verteidigung hat wie die Waffe Angriff / Penetration hat, was bedeutet, dass Ihre DPS-Formel wirdAttackFrequency * BaseDamage / 2

Bearbeiten: Hier sind einige Tabellen mit Beispielwerten:

 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

Wie Sie diesen Zahlen entnehmen können, sind Waffen mit hohem Schaden und niedriger Geschwindigkeit gegen denselben Feind nominell immer noch mächtiger als Waffen mit niedrigem Schaden und hoher Geschwindigkeit, wenn sie den gleichen Schaden pro Sekunde haben AttackFrequency * BaseDamage / 2. Der Effekt ist jedoch bei hochauflösenden Gegnern sichtbarer als bei niedrigauflösenden Gegnern. Beide sind bei 0-def-Gegnern gleich gut. Das bedeutet, dass Waffen mit schnellem Angriff bei Gegnern mit niedriger Auflösung weniger schlecht sind als bei Gegnern mit hoher Auflösung.

Dies könnte durch die Tatsache ausgeglichen werden, dass Hochgeschwindigkeitswaffen dem Spieler mehr Flexibilität hinsichtlich der Schadensverteilung bieten und es ihm somit ermöglichen, die Verschwendung von Schaden pro Sekunde durch Overkills zu vermeiden. Wenn der Spieler einer sehr großen Anzahl sehr schwacher Feinde gegenübersteht, die alle mit einem Treffer sterben, kann eine Waffe mit 5 Angriffen pro Sekunde 5 Feinde pro Sekunde töten, während eine Waffe mit 1 Angriff pro Sekunde nur 1 Feind pro Sekunde töten kann. Ein weiterer möglicher Vorteil ergibt sich, wenn Sie Angriffen Zufälligkeit hinzufügen. Aufgrund des Gesetzes der großen AnzahlViele schwache Angriffe verursachen einen gleichmäßigeren und zuverlässigeren Schaden als wenige starke. Spieler profitieren normalerweise von der Zuverlässigkeit. Wenn solche Überlegungen jedoch aufgrund Ihrer Spielmechanik und / oder Ihres Begegnungsdesigns irrelevant sind, müssen Sie Ihre schnelleren Waffen etwas leistungsfähiger machen, als sie zum Ausgleich sein sollten.

Eine Möglichkeit, Hochgeschwindigkeitswaffen einen Schub zu verleihen, könnte die Einführung von Effekten sein, die mit einer Chance von x% pro Treffer ausgelöst werden und nicht vom Schaden abhängen. Diese wären mit einer Schnellangriffswaffe viel mächtiger, weil sie viel häufiger auslösen würden.

Philipp
quelle
Danke @Philipp, ich denke das wird es lösen. Der Schaden wird im Moment zu hoch sein, aber ich werde ihn optimieren.
März 11
@ marcg11 Wofür genau ist dein Sortiment SkillDmg? Ich nahm an, dass es ein multiplikativer Faktor ist. Ein Basisangriff hat also 1.0einen Doppelschaden-Spezialangriff 2.0. Wenn Sie lieber möchten, dass diese Ganzzahlen sind, möchten Sie sie möglicherweise hinzufügen, BaseDamageanstatt sie zu multiplizieren.
Philipp
Ich habe festgestellt, dass die Formel, die Sie angegeben haben, genau die gleiche ist wie meine, wenn ich SkillDamage als Multiplikator festlege. Daher kann ich den Schaden des Dolches immer noch nicht halbieren, wenn ich die Angriffsgeschwindigkeit verdopple, um den Schaden aufrechtzuerhalten.
März 11
@ marcg11 Nein, es ist nicht dasselbe. Der Hauptunterschied besteht darin, dass ich mit BaseDamage squared ( BaseDamage * BaseDamage) multipliziere. Sie multiplizieren nur einmal mit BaseDamage (was bedeutet, dass BaseDamage in der Formel reduziert wird).
Philipp
Aber mein SkillDmg war nie ein Prozent, ein normales Angriffs-SkillDmg ist dasselbe wie BaseDmg, also ist es dasselbe.
März 11
0

Wenn Sie beabsichtigen, dass Waffen mit gleicher "Kraft" zu gleichen Schaden pro Sekunde führen, besteht eine einfache Lösung darin, Schaden pro Sekunde direkt zuzuweisen und den Schaden pro Treffer daraus zu berechnen, z

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

In diesem Beispiel hätte Ihr Schwert eine Angriffsgeschwindigkeit von 50 DPS und 1,0 und der Dolch eine Angriffsgeschwindigkeit von 50 DPS und 2,0. Wenn Sie Schaden pro Treffer anzeigen möchten, ist dies einfach DPS geteilt durch die Angriffsgeschwindigkeit (dh 50 für das Schwert und 25 für den Dolch).

Beachten Sie, dass dadurch die Mechanik "Langsamere Waffen sind besser gegen hohe Verteidigung" beseitigt wird, von der ich annehme, dass Sie sie wollen.

Ruther Rendommeleigh
quelle
Ja, das ist mehr oder weniger die Idee, aber anstelle von DPS verwende ich einen Wert, der für alle Waffen der Stufe x gleich ist
marcg11