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)
quelle
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.Antworten:
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 10BaseDamage
, 1.000BaseDamage
oder 1.000.000 habenBaseDamage
, Sie befinden sich immer in diesem Bereich. Wo in diesem Bereich, hängt davon ab, wie dieBaseDamage
Waffe mit derDefense
des Ziels verglichen wird . Das heißt, was tatsächlich die Größenordnung des realDamage eines Angriffs beeinflusst, ist meistens derSkillDmg
Multiplikator.Wenn ich mir diese mathematischen Eigenschaften anschaue, würde ich diese Waffeneigenschaft nicht wirklich nennen
BaseDamage
, sondernDefensePenetration
weil 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
BaseDamage
als weiteren multiplikativen Faktor hinzuzufügen :Wenn Ihnen die Abwehrmechanik gefällt, die Sie versehentlich entdeckt haben, sieht sie folgendermaßen aus
Penetration
:Das Schöne an dieser Formel ist, dass sie recht gut skaliert:
AttackFrequency * BaseDamage / 2
Bearbeiten: Hier sind einige Tabellen mit Beispielwerten:
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.
quelle
SkillDmg
? Ich nahm an, dass es ein multiplikativer Faktor ist. Ein Basisangriff hat also1.0
einen Doppelschaden-Spezialangriff2.0
. Wenn Sie lieber möchten, dass diese Ganzzahlen sind, möchten Sie sie möglicherweise hinzufügen,BaseDamage
anstatt sie zu multiplizieren.BaseDamage * BaseDamage
) multipliziere. Sie multiplizieren nur einmal mit BaseDamage (was bedeutet, dass BaseDamage in der Formel reduziert wird).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
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.
quelle