Làm thế nào để thiết kế một công thức sát thương trong một game nhập vai giữ cho vũ khí có tốc độ tấn công khác nhau được cân bằng?


8

Tôi đang tạo một trò chơi rpg trên thiết bị di động, một trò chơi vô tận có hệ thống loot như Diablo 3. Vũ khí có sức tấn công và tốc độ, các mảnh giáp có giá trị kháng (không phải là tỷ lệ phần trăm).

Công thức tôi đang sử dụng là:

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

Kết quả rất tốt, sát thương sẽ lớn hơn nếu phòng thủ thấp hơn và nó không tăng theo cấp số nhân vì sự phân chia giữa ( BaseDamage + Defense).

Hãy nói rằng tôi có một thanh kiếm với tốc độ tấn công 1.0 gây sát thương 50 điểm. Đó là 50 dps, và tôi có một con dao găm mà tôi muốn nó tấn công nhanh hơn, nhưng tất nhiên sẽ gây ra ít thiệt hại hơn, để duy trì dps logic nói rằng nếu tốc độ tấn công của dao găm tăng gấp đôi, thì sát thương cần phải giảm một nửa (tốc độ 2.0 với 25 dmg). Nhưng sử dụng công thức trên bạn sẽ thấy rằng DPS thiệt hại thực tế thấp hơn thanh kiếm.

Iv'e đã ​​giải quyết điều này bằng cách làm cho con dao găm không gây sát thương 25 mà nhiều hơn một chút, thực hiện một số tính toán tôi có thể làm cho các dps thực sự giống nhau để cân bằng mọi thứ. Trong trường hợp này, con dao găm ở tốc độ 2.0 sẽ cần phải gây 32 sát thương để trở thành dps sát thương thực sự giống như thanh kiếm.

Tuy nhiên, tôi muốn hiển thị số DPS trên vũ khí. Nếu tôi chỉ hiển thị dao găm DPS là 32 dmg * 2 thì tốc độ sẽ là 64 dps, so với thanh kiếm 50 dps, người ta sẽ nói rõ rằng dao găm tốt hơn, nhưng dĩ nhiên là không.

Phương pháp khả thi? Thay đổi công thức thiệt hại ban đầu? Nếu vậy thì cái nào? Giả sử tôi không thay đổi công thức, có giải pháp nào không? Tôi thực sự không thích phải lừa con dao găm để gây sát thương nhiều hơn một nửa để làm cho nó thậm chí ...

Tôi thực sự muốn tôi biết công thức sát thương cho diablo 3. Tôi biết rằng diablo 3 vũ khí DPS nó chỉ đơn giản là sát thương cơ bản * tốc độ tấn công.

Biên tập:

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
Trong phần chỉnh sửa của bạn, bạn có công thức tôi đã đăng trong câu trả lời của mình ( damage * damage / ( damage + defense)), chỉ cần không tính đến thiệt hại kỹ năng. Lý do cho sự khác biệt trong DPS là vì bạn đang sử dụng cùng một biện pháp phòng thủ. Lý do tại sao bạn nhận được kết quả khác nhau là vì với công thức đó, vũ khí chậm nhưng mạnh sẽ tốt hơn trước kẻ thù có độ phân giải cao trong khi vũ khí nhanh nhưng yếu thì tốt hơn trước kẻ thù có độ phân giải thấp (có vẻ hợp lý). Bạn giả định một kẻ thù có độ phân giải cao và cân bằng cả hai vũ khí chống lại nó, điều đó có nghĩa là bạn đã khiến con dao găm bị áp đảo. Tính toán DPS cho thấy sức mạnh quá mức.
Philipp

Câu trả lời:


20

Các vấn đề bạn gặp phải khi tính toán DPS từ công thức đó là bởi vì những gì bạn gọi BaseDamagekhông thực sự có vẻ là như vậy.

Giả sử rằng tất cả các số đều dương, BaseDamage / ( BaseDamage + Defense )sẽ luôn giải quyết thành một số dấu phẩy động ở đâu đó trong khoảng từ 1 đến 0. Không có vấn đề gì nếu bạn có 10 BaseDamage, 1.000 BaseDamagehoặc 1.000.000 BaseDamage, bạn sẽ luôn ở trong phạm vi đó. Trường hợp trong phạm vi đó phụ thuộc vào cách BaseDamagevũ khí so sánh với Defensemục tiêu. Điều đó có nghĩa là những gì thực sự ảnh hưởng đến thứ tự cường độ của RealDamage của một cuộc tấn công chủ yếu là cấp SkillDmgsố nhân.

Nhìn vào các tính chất toán học này, tôi thực sự sẽ không gọi tài sản vũ khí này BaseDamagemà là DefensePenetrationvì nó mô tả khả năng của vũ khí để vượt qua hàng phòng thủ của kẻ thù và vẫn gây ra phần lớn thiệt hại. Đây thực sự có thể là một cơ chế thú vị để có (hoặc không ... đó là thứ bạn cần thử), nhưng nó không nói nhiều về mức độ sức mạnh của vũ khí.

Vậy làm thế nào để chúng ta giải quyết vấn đề này?

Vâng, không có giải pháp đúng cho vấn đề này. Nhưng một thay đổi có thể làm những gì bạn muốn làm (vũ khí mạnh gấp đôi = lực sát thương gấp đôi) là thêm BaseDamageyếu tố nhân rộng khác:

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

Nếu bạn thích cơ chế thâm nhập phòng thủ mà bạn vô tình phát hiện ra, đây là cách nó trông giống Penetrationnhư một chỉ số vũ khí riêng biệt:

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

Điều hay ho về công thức này là nó có tỷ lệ khá tốt:

  • Ngay cả khi phòng thủ thảm hại so với giá trị tấn công, không bao giờ có thiệt hại nhiều hơn tấn công. Điều này cung cấp cho bạn một giới hạn trên về mức độ thiệt hại mà nhân vật có thể gây ra, điều này giúp việc cân bằng trở nên dễ dàng hơn rất nhiều.
  • Ở một thái cực khác, cho dù phòng thủ có cao đến đâu, nó cũng không bao giờ có thể giảm thiểu hoàn toàn thiệt hại (ngoại trừ thông qua các lỗi làm tròn), vì vậy luôn có chỗ để cải thiện cho hậu vệ và không bao giờ có một cuộc tấn công hoàn toàn vô nghĩa.
  • Khi Defense và BaseDamage (và Penetration khi bạn muốn) gần như giống nhau, thì có khoảng một nửa RealDamage tương đương với BaseDamage. Điều này đúng cho dù giá trị lớn đến đâu. Đây cũng là những gì bạn có thể dựa trên ước tính DPS của mình. Đơn giản chỉ cần giả định rằng kẻ thù có nhiều phòng thủ như vũ khí đã tấn công / thâm nhập, điều đó có nghĩa là công thức DPS của bạn trở thànhAttackFrequency * BaseDamage / 2

Chỉnh sửa: Dưới đây là một số bảng có giá trị mẫu:

 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

Như bạn có thể thấy từ những con số này, vũ khí có độ sát thương cao, tốc độ thấp vẫn mạnh hơn so với cùng một kẻ thù so với vũ khí tốc độ cao có sát thương thấp nếu chúng có cùng DPS AttackFrequency * BaseDamage / 2. Nhưng hiệu quả có thể thấy rõ hơn ở những kẻ thù có độ phân giải cao hơn là những kẻ thù có độ phân giải thấp. Cả hai đều tốt như nhau trên kẻ thù 0-def. Điều đó có nghĩa là vũ khí tấn công nhanh sẽ ít tệ hơn đối với kẻ thù có độ phân giải thấp so với kẻ thù có độ phân giải cao.

Điều này có thể được cân bằng bởi thực tế là vũ khí tốc độ cao giúp người chơi linh hoạt hơn trong việc phân phối thiệt hại và do đó cho phép họ tránh lãng phí DPS khi sử dụng quá mức. Khi người chơi phải đối mặt với một số lượng rất lớn kẻ thù rất yếu, tất cả đều chết chỉ với một đòn, thì 5 đòn tấn công mỗi giây có thể giết 5 kẻ thù mỗi giây trong khi vũ khí 1 tấn mỗi giây chỉ có thể giết 1 kẻ địch mỗi giây. Một lợi thế khác có thể xuất hiện khi bạn thêm tính ngẫu nhiên vào các cuộc tấn công. Do luật số lượng lớn, nhiều đòn tấn công yếu sẽ tạo ra một lượng sát thương mượt mà và đáng tin cậy hơn so với một vài đòn mạnh. Người chơi thường được hưởng lợi từ độ tin cậy. Nhưng khi những cân nhắc như vậy không liên quan do cơ chế trò chơi và / hoặc thiết kế cuộc gặp gỡ của bạn, bạn sẽ phải làm cho vũ khí nhanh hơn của mình mạnh hơn một chút so với mức cần thiết để bù lại.

Một cách để tăng vũ khí tốc độ cao có thể là giới thiệu các hiệu ứng kích hoạt với x% cơ hội mỗi lần đánh và không phụ thuộc vào sát thương. Chúng sẽ mạnh hơn rất nhiều với vũ khí tấn công nhanh vì chúng sẽ kích hoạt thường xuyên hơn.


Cảm ơn @Philipp, tôi nghĩ rằng sẽ giải quyết nó. Thiệt hại sẽ quá cao vào lúc này nhưng tôi sẽ điều chỉnh nó.
marcg11

@ marcg11 Chính xác thì phạm vi của bạn là SkillDmggì? Tôi cho rằng nó là một yếu tố nhân. Vì vậy, một cuộc tấn công cơ bản có 1.0và một cuộc tấn công đặc biệt thiệt hại gấp đôi sẽ có 2.0. Nếu bạn muốn chúng là số nguyên, bạn có thể muốn thêm nó vào BaseDamagethay vì nhân nó.
Philipp

Tôi đã nhận ra rằng công thức bạn đưa ra hoàn toàn giống với công thức của tôi nếu tôi thiết lập skillDamage như một số nhân. Vì vậy, tôi vẫn không thể giảm một nửa sát thương của con dao găm nếu tôi tăng gấp đôi tốc độ tấn công để duy trì thiệt hại.
marcg11

@ marcg11 Không, nó không giống nhau. Sự khác biệt chính là tôi nhân với BaseDamage bình phương ( BaseDamage * BaseDamage), bạn chỉ nhân với BaseDamage một lần (có nghĩa là BaseDamage bị giảm đi trong công thức).
Philipp

Nhưng skillDmg của tôi không bao giờ là một phần trăm, skillDmg tấn công bình thường cũng giống như baseDmg, vì vậy nó giống nhau.
marcg11

0

Nếu bạn có ý định sử dụng vũ khí có "sức mạnh" tương đương để tạo ra DPS bằng nhau, một giải pháp dễ dàng là chỉ định trực tiếp DPS và tính toán thiệt hại cho mỗi lần đánh từ đó, ví dụ:

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

Trong ví dụ này, thanh kiếm của bạn sẽ có 50 tốc độ tấn công DPS và 1.0 và dao găm sẽ có 50 tốc độ tấn công DPS và 2.0. Nếu bạn muốn hiển thị sát thương mỗi lần đánh, đó đơn giản là DPS chia cho tốc độ tấn công (tức là 50 cho thanh kiếm và 25 cho dao găm).

Lưu ý rằng điều này thoát khỏi cơ chế "vũ khí chậm hơn là tốt hơn so với phòng thủ cao", mà tôi cho rằng đó là những gì bạn muốn.


Có, đó là ý tưởng ít nhiều, nhưng thay vì DPS, tôi đang sử dụng một giá trị giống nhau cho tất cả các vũ khí cấp x
marcg11
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.