Je fais un jeu de rpg mobile, infini où il y a un système de butin comme Diablo 3. Les armes ont une attaque et de la vitesse, les pièces d'armure ont une valeur de résistance (pas de pourcentage).
La formule que j'utilise est:
float realDamage = SkillDmg * BaseDamage / ( BaseDamage + Defense )
Les résultats sont bons, les dégâts augmentent si la défense diminue et ils ne augmentent pas de façon exponentielle en raison de la division entre ( BaseDamage + Defense).
Disons que j'ai une épée avec une vitesse d'attaque de 1.0 qui inflige 50 dégâts. C'est 50 dps, et j'ai un poignard que je veux qu'il attaque plus rapidement, mais bien sûr, inflige moins de dégâts, pour maintenir le dps, la logique dit que si la vitesse d'attaque des dagues est doublée, les dégâts doivent être réduits de moitié (2.0 vitesse avec 25 dmg). Mais en utilisant la formule ci-dessus, vous verrez que les dégâts réels réels DPS sont inférieurs à l'épée.
Iv'e a résolu cela en faisant en sorte que le poignard ne fasse pas 25 dégâts mais un peu plus, en faisant quelques calculs, je peux faire en sorte que les vrais dps soient les mêmes pour équilibrer les choses. Dans ce cas, le poignard à une vitesse de 2,0 devrait infliger 32 dégâts pour être les mêmes dégâts réels que l'épée.
Cependant, je veux afficher le numéro DPS sur les armes. Si j'affiche simplement les poignards DPS à 32 dmg * 2, la vitesse d'attaque sera de 64 dps, par rapport à l'épée de 50 dps, on dira clairement que le poignard est meilleur, mais bien sûr que non.
Solutions possibles? Changer la formule initiale des dommages? Si oui, lequel? Supposons que je ne change pas la formule, y a-t-il une solution? Je n'aime vraiment pas devoir tromper le poignard pour infliger plus de dégâts que la moitié pour le rendre encore ...
J'aimerais vraiment connaître la formule de dégâts de diablo 3. Je sais que diablo 3 armes DPS, c'est simplement les dégâts de base * la vitesse d'attaque.
Éditer:
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)
la source
damage * damage / ( damage + defense)
), juste sans tenir compte des dégâts de compétence. La raison de la différence de DPS est que vous utilisez la même défense. La raison pour laquelle vous obtenez des résultats différents est qu'avec cette formule, les armes lentes mais fortes sont meilleures contre les ennemis à haute définition tandis que les armes rapides mais faibles sont meilleures contre les ennemis à basse définition (ce qui semble plausible). Vous avez supposé un ennemi de haute définition et équilibré les deux armes contre lui, ce qui signifie que vous avez maîtrisé le poignard. Le calcul DPS montre cette surpuissance.Réponses:
Les problèmes que vous rencontrez avec le calcul du DPS à partir de cette formule sont dus au fait que ce que vous appelez
BaseDamage
ne semble pas être le cas.En supposant que tous les nombres sont positifs, cela
BaseDamage / ( BaseDamage + Defense )
se résoudra toujours en un nombre à virgule flottante compris entre 1 et 0. Peu importe si vous en avez 10BaseDamage
, 1 000BaseDamage
ou 1 000 000BaseDamage
, vous serez toujours dans cette plage. Où dans cette gamme dépend de la façon dontBaseDamage
l'arme se compare à celleDefense
de la cible. Cela signifie que ce qui affecte réellement l'ordre de grandeur des dégâts réels d'une attaque est principalement leSkillDmg
multiplicateur.En regardant ces propriétés mathématiques, je n'appellerais pas vraiment cette propriété d'arme,
BaseDamage
mais plutôtDefensePenetration
, car elle décrit la capacité de l'arme à surmonter la défense ennemie et à faire la plupart de ses dégâts. Cela pourrait en fait être un mécanisme intéressant à avoir (ou pas ... c'est quelque chose que vous devez tester), mais cela ne dit pas grand-chose sur le niveau de puissance d'une arme.Alors, comment pouvons-nous résoudre ce problème?
Eh bien, il n'y a pas de bonne solution à ce problème. Mais un changement qui pourrait faire ce que vous voulez faire (une arme deux fois plus puissante = environ deux fois plus de dégâts) consiste à ajouter le
BaseDamage
comme un autre facteur multiplicatif:Si vous aimez le mécanisme de pénétration de la défense que vous avez découvert accidentellement, voici à quoi il ressemblerait avec
Penetration
une statistique d'arme distincte:La bonne chose à propos de cette formule est qu'elle évolue assez bien:
AttackFrequency * BaseDamage / 2
Edit: Voici quelques tableaux avec des exemples de valeurs:
Comme vous pouvez le voir à partir de ces chiffres, les armes à haute vitesse et à faible dégâts sont toujours nominalement plus puissantes contre le même ennemi que les armes à grande vitesse et à faible dommage si elles ont le même DPS selon
AttackFrequency * BaseDamage / 2
. Mais l'effet est plus visible sur les ennemis haute définition que sur les ennemis basse définition. Les deux sont également bons sur les ennemis à 0 déf. Cela signifie que les armes à attaque rapide sont moins mauvaises sur les ennemis à basse définition que sur les ennemis à haute définition.Cela pourrait être contrebalancé par le fait que les armes à grande vitesse donnent au joueur plus de flexibilité en ce qui concerne la répartition des dégâts et lui permettent ainsi d'éviter de gaspiller du DPS sur les compétences excessives. Lorsque le joueur fait face à un très grand nombre d'ennemis très faibles qui meurent tous d'un coup, une arme à 5 attaques par seconde peut tuer 5 ennemis par seconde tandis qu'une arme à 1 attaques par seconde ne peut tuer qu'un ennemi par seconde. Un autre avantage possible apparaît lorsque vous ajoutez un caractère aléatoire aux attaques. En raison de la loi des grands nombres, de nombreuses attaques faibles produiront des dégâts plus fluides et plus fiables que quelques attaques fortes. Les joueurs bénéficient généralement de la fiabilité. Mais lorsque de telles considérations ne sont pas pertinentes en raison de la mécanique de votre jeu et / ou de la conception des rencontres, vous devrez rendre vos armes plus rapides un peu plus puissantes qu'elles ne devraient l'être pour compenser.
Une façon de donner un coup de fouet aux armes à grande vitesse pourrait être l'introduction d'effets qui se déclenchent avec x% de chances par coup et ne dépendent pas des dégâts. Celles-ci seraient beaucoup plus puissantes avec une arme à attaque rapide car elles se déclencheraient beaucoup plus fréquemment.
la source
SkillDmg
? J'ai supposé que c'était un facteur multiplicatif. Une attaque de base a donc une attaque1.0
spéciale à double dégâts2.0
. Si vous préférez que ce soient des entiers, vous pouvez les ajouter auBaseDamage
lieu de les multiplier.BaseDamage * BaseDamage
), vous multipliez seulement par BaseDamage une fois (ce qui signifie que BaseDamage est réduit dans la formule).Si vous voulez que des armes de "puissance" égale donnent un DPS égal, une solution simple serait d'attribuer directement le DPS et de calculer les dégâts par coup à partir de cela, par exemple
Dans cet exemple, votre épée aurait 50 DPS et 1,0 vitesse d'attaque et le poignard aurait 50 DPS et 2,0 vitesse d'attaque. Si vous voulez afficher les dégâts par coup, c'est simplement le DPS divisé par la vitesse d'attaque (soit 50 pour l'épée et 25 pour la dague).
Notez que cela supprime le mécanisme "Les armes plus lentes sont meilleures vs haute défense", ce qui, je suppose, est ce que vous voulez.
la source