遊戲企劃必修課:淺談「戰鬥數值」設計 Part.01

攻擊究竟該跳多少傷害?戰鬥公式是如何設計的?

水狼陽介
THAT GAME DESIGNER - 遊戲設計師
14 min readMar 20, 2020

--

寫在前面

由於筆者不是數值專業,這篇的內容算是個人工作上的一些經驗和心得整理,僅供參考和新手入門。

數值模型(也就是數值公式和設計)五花八門,很難說哪種比較好用,只要是針對應用的專案適合的公式就是好的公式。

好的,就讓我們開始吧。

只要和戰鬥有關的遊戲,一定脫離不了戰鬥公式計算。

在職能分野上甚至會有「戰鬥企劃」這種專門針對戰鬥相關技術專精的職缺,除了戰鬥公式之外,戰鬥企劃通常也負責調整「打擊感」、「特效表現」等等戰鬥整體的呈現效果。

這次就來帶大家從頭看一遍這些和戰鬥相關的數值是如何設計的。

我們先從公式的原型和變體開始說起。

基本公式原型

第一階段:設定「基礎傷害」

一切的公式或計算都有其原點,在戰鬥公式中,「攻擊力」就是公式的核心。

A攻擊B時,根據A的攻擊力,對B造成多少傷害。

同時,為了要能夠區分勝負,我們還加入了第二個元素「生命值」。並且規範生命值歸零的時候角色會死亡。

至此,我們有了二個最基本的值:

ATK:Attack,攻擊力,越高代表能造成越多傷害。

HP:Hit Point,生命值,或也有 Health Point 的說法。代表死亡前能最多受到多少傷害。

每受到一次攻擊,HP 會降低一次等同 ATK 的值。

上面這個是程式碼的寫法,意思是當執行時,B 的 HP 會減少 A 的 ATK 一次。

第二階段:加入「時間」

接下來我們加入雙方的「攻擊速度」,也就是時間要素。
(P.S.如果是回合制,就當成雙方的攻速相同就行了。)

這時,我們獲得了兩個新增的值:

ASPD:Attack Speed,攻擊速度,單位為「次數/時間」,也就是每秒可以攻擊多少次。數值越高攻速越快。(註 1)

DPS:Damage per Second,單位為「傷害值/時間(秒)」

攻擊力乘上攻擊速度,就會得到「單位時間傷害量」,也就是DPS。

由此我們又獲得了一個新的算法,就是角色的「存活時間」

A 的存活時間就是,A 的 HP 在 B 的攻擊下可以撐多久的意思。

這時我們可以比較一下A、B的存活時間,就能得出兩人互毆的話最後誰可以活下來。

註 1

用「次數/秒」這種方式來計,優點是比較直觀,數值越大代表攻速越快,武器上面顯示這個數值玩家也看的比較爽。

但在做數值設計的時候,「單次攻擊所需時間」其實也是可以的,看個人習慣和需求。只要記得配置表有備註到底是哪種單位,實作的程式也知道就行。

第三階段:加入「傷害減免」

也就是俗稱的防禦力或是減傷效果。

攻擊力經過計算,扣除防守方的防禦力之後,才會對其造成傷害。

這邊新增兩個定義:

DEF:Defence,防禦力,可以抵銷 ATK 的數值,越高代表越難對其造成傷害。

DMG:Damage,實際傷害,也就是 ATK 扣除傷害減免後,最終造成的傷害值。

那麼,這個傷害值 DMG 究竟如何計算呢?

底下就來介紹三種業界常用的計算方法。

傷害減免的計算方式

一般來說 DMG 的計算方式分為減法、除法和乘法三種。

減法指的是直接用 ATK 和 DEF 做相減計算,結果為線性函數(直線)。

除法和乘法則是非線性函數(曲線)。

第一種:減法

減法其實就是直接用 ATK 減去 DEF 來獲得最終的傷害量。

B 對 A 造成的傷害,是 ATK 扣除 DEF 之後剩下的值。

這種方式很好計算,但會出現一個問題。

如果 DEF 大於等於 ATK,攻擊時會發生什麼事情?

若程式碼只是簡單的寫 HP = HP-DMG 的話,常常會出現攻擊力遠比防禦力低的時候,攻擊敵人會導致敵人補血這種事情。

通常為了避免這個狀況,會做幾種額外處理。

  1. 當防禦力比攻擊力高的時候,攻擊方會造成固定傷害。(例如只有1點傷害,或在某個固定數值段之間隨機)
  2. 或是最少造成一定比例(如5%)ATK 的傷害,避免完全無傷的結果。

除此之外,減法在攻擊和防禦數值接近時,增減的幅度會很大,很可能會不符合設計預期。(感謝Az大大補充)

舉個例子

防禦 40 的 A 和防禦 60 的 B 同時受到 100 的傷害。
A會受到 60 傷害。
B會受到 40 傷害。

但當 A 和 B 同時穿上一件防禦 30 的防具,
對 A 來說防禦力從 40 變成 70 ,增加了 75%
受到的傷害從 60 變成 30,減少了50%。

但對 B 來說防禦力從 60 變成 90,增加了 50%
傷害從 40 變成 10,減少了75%。

第二種:乘法

所謂的乘法,指的是攻擊力要乘上一個「減傷比例」,才能得到最後的傷害結果。

我們來定義一下這個「減傷比例」:

ABS:Absorb,傷害吸收比例,也就是實際造成的傷害有多少被這個減免效果抵銷了,單位為百分比。例如減傷 70%就代表實際能造成的傷害只有 ATK的 30%。

假設每次的傷害值為 ATK,我們可以簡單的把公式寫成這樣:

可以看出「吸收比例」越高,ATK 所能造成的「實際傷害」就越低。

雖然在這個公式中我們沒有看到 DEF,不過 DEF 還是可以作為 ABS 的參數。(這在後面王者榮耀的例子會提到)

第三種:除法

所謂的除法,指的是用 ATK 除以 DEF 作為傷害值的基礎公式原型。

但通常為了避免攻擊力提昇時數值的變化太大,會將 ATK 本身也作為分母參數來使用。例如下面這樣:

B 對 A 造成的傷害,是由「B 攻擊」除以「B 攻擊加上 A 防禦」的結果。

這種作法,會令攻擊力在不同的數值下,提昇的 DMG 效益受到影響。

也就是 ATK 越高,單位 ATK 對 DMG 的提昇效益就越差。

這點我們一樣留待底下的例子做講解,在王者榮耀的減傷比例計算會有更詳細的說明。

除法的其他變體

這種除法公式原型通常是業界RPG遊戲中最常使用的數值模型,包括像是WOW(魔獸世界)等遊戲都採用這類計算方式。

除法的變體包括

DMG=(攻擊 × 攻擊)/(攻擊 +防禦)

DMG=(2 ×攻擊 ×攻擊)/(攻擊 +防禦)

DMG=(攻擊)/(攻擊 +防禦 +等級參數)

等各種不同的類型。

根據數值設計師希望如何設計玩家的策略需求和遊戲體驗,這些公式會加入各種參數做變化。

例如 (攻擊 × 攻擊)/(攻擊+防禦)的例子,就更注重堆高攻擊所帶來的效益。

無論使用哪種公式模型,只要能達到設計者預期的遊戲體驗,那就是適合的模型。

以王者榮耀為例-乘除法的應用

以Moba類型的遊戲「王者榮耀」為例,該遊戲和英雄聯盟或是傳說對決一樣,都是5打5的競技類型遊戲。

我們就用這個遊戲來講解一下乘法和除法的應用和效果吧。

王者榮耀中的傷害算式是乘法公式

B 對 A 的傷害,會扣除 A 的減傷百分比。

而其中的 ABS 是根據裝備的護甲值來計算的。

ABS 的計算公式則是採用除法公式

左側的比例為百分比,右側的抗性分為物理和魔法兩種。

在王者榮耀中,「抗性」分為兩種:「物理抗性和魔法抗性」。

物理抗性稱為護甲,魔法抗性就叫做魔抗。

護甲:提供物理抗性,物理傷害的減免比例等於 護甲 /(護甲+602)

魔抗:提供魔法抗性,魔法傷害的減免比例等於 魔抗 /(魔抗+602)

以物理減傷為例,護甲在 500 和 1000 時,所提供的減傷比例,以及追加額外護甲時,所能提供的效益會有差異。

參考下圖的計算就能一目了然。

可以看到,護甲越高,增加每單位護甲值能提供的減免效益就越差。
可以看出護甲和減傷比例是「非線性」的關係

這種設計方式,會導致在不同情況下,追加護甲的效益會有很大的差別。

護甲越高的情況下,效益就越差,兩者權衡之下必定會有個最適合的區間段,也就是邊際效益的最大化。

而在王者榮耀中,攻擊方當然也有反制護甲的手段,就是所謂的「穿透」屬性。

護甲穿透:物理攻擊的一種屬性值,當攻擊時,防守方的護甲會先扣除攻擊方的護甲穿透,然後才計算減傷比例。

魔法穿透:同上,為針對魔法抗性的反制屬性。

當攻擊方有穿透的情況下,傷害減免比例的計算如下:

「防禦方的抗性」會先扣除「攻擊方的穿透」再進行減免計算。

因此在Moba遊戲中,知道對手裝備了哪些裝甲,會影響玩家對於武器的選擇,反之亦然。

至於為什麼分母是額外加 602,就是遊戲數值設計師定下的數值。根據這個 602,傷害計算和遊戲中裝備的設計、甚至是英雄的技能設計都會被影響。

Moba這類遊戲每一局的終點都是一樣的,每個英雄的等級上限都相同,並且裝備格子也一樣,所以這裡才能使用 602 這種固定數值

額外補充

不是只有傷害值或傷害減免能使用除法公式,很多屬性值,尤其是百分比屬性值也很適合使用這種算法。

舉個例子,崩壞三中的「爆擊率」是由「會心」這個值做計算的,但根據角色等級提昇,會心提供的爆擊率效益會越來越差

相較之下,直接提供爆擊率的武器,在高等級的後期就比提供會心值來的有效益許多。

實際的計算公式為

爆擊率 = 會心值 /(75+人物等級 × 5)

索爾之鎚是崩壞三中少數直接提供爆擊率的武器(上圖右下角)

這樣設計的原因,其實是因為如果裝備一開始就給「爆擊率」,由於只有100%,很容易造成後期數值膨脹(總不可能越給越低)。

如果不使用互相抵銷的屬性(例如有些遊戲會有「抗暴」屬性,用來抵銷攻擊方的爆擊率),就只能使用除法公式,並根據等級來調整計算結果了。

可以參考這篇攻略:談談幾個容易被誤會的屬性…..會心/爆傷/防禦

以線上 RPG 為例-等級的數值需求

RPG 遊戲常常會有所謂「升級」的需求。

如果減傷比例直接依照上面王者榮耀這種算法,那玩家就不需要隨著升級而穿更好的裝備了對吧?

就算讓敵人的「穿透」屬性更高,玩家也相應的將「抗性」提高,那就只是陷入「裝備競賽」的情況,和玩家的等級關聯不大。

因此,很多遊戲在設計時,也會將「等級」作為「除法公式」的一個參數,例如底下這樣:

當玩家的等級越高時,相應的分母數字也會提昇,造成玩家需要穿上具有更高抗性的裝備才能提供相同的減傷比例。

或是也可以把等級作為一個函數參數,不一定是乘以 20 這種這麼直白的線性關係,有可能這個等級的影響本身也是曲線函數,例如以下這樣:

等級會影響函數 f(Lv) 最終的值,進而影響減傷比例。上面公式為了簡潔,把常數併入 f(Lv) 了。

或其實這個計算出來不一定是「減傷比例」,還要經過其他計算,才會成為最終防守方的防守數值。

但總之,不斷的將分母的值動態調整,就能設計出玩家在不同情況下,對抗性數值的需求也不一樣,從而製造更多的策略需求。

額外思考

可能會有讀者想問,在RPG遊戲中,常常會有「高等玩家打低等怪」的情況,這時就算裝備相同,低等怪攻擊高等玩家造成的傷害也是很低的,這和上面的公式就違背了不是嗎?(照上面的公式,玩家升級後,同樣的裝備提供的減傷比例應該會下降

這其實是因為RPG遊戲通常還會有個另外的計算公式,叫做「等級差」機制。

這個機制主要是鼓勵玩家去挑戰相應等級的怪物,同時避免玩家一直待在低等區域練功打寶。通常會這樣設計:

  • 玩家或怪物攻擊比自己高等的對象時,每高一等直接降低 10% 的傷害。
  • 攻擊比自己低等的對象時,每高一等直接提高 10% 的傷害。
  • 玩家攻擊比自己低等級的怪物,掉寶率和經驗值獲取大幅下降。
  • 玩家和等級與自身相近的怪物戰鬥,獲得 Y% 的經驗值和掉寶率Bonus。
例如直接依照等級提供百分比攻擊加成,每提升一級固定+5%,也是一種提高等級重要性的作法。

利用以上這些機制,鼓勵玩家挑戰等級相當、甚至是更高的對手

這種情況下,無論抗性和穿透如何計算,玩家攻擊低等怪物都能收穫強大的成就感,也間接鼓勵玩家盡快升級。

聊聊「真實傷害」與「面板數字」

這兩個詞應該也是玩戰鬥遊戲或是看攻略的時候常見的詞彙,這邊因為有點關聯性就特別提出來講解一下。

真實傷害

所謂的真實傷害,其實就是指忽略所有的抗性和護甲,直接對對方的生命值造成傷害

這通常是遊戲中用來制衡把「抗性」衝很高的坦克角色所設計的技能或武器。

真實傷害很克制高護甲或抗性,但對本身血量就高的敵人效果就比較差。這點在下一篇談數值的策略循環設計時會再深入探討一下。

面板數字(又稱 帳面數字/白板數值)

所謂面板數字,就是指遊戲中讓玩家直接看到的數值。例如常聽到「面板攻擊力」或是「面板閃避」等等。

以魔物獵人為例,巨劍 I 的 384 就是面板攻擊力。

因為遊戲肯定不是直接拿面板數字作為戰鬥計算的結果,因此面板數字通常只是在比較裝備效益的時候,作為一個可參考的數值

以魔物獵人來說,根據武器的差異,面板攻擊力還需要乘上武器倍率,才能作為基礎攻擊力,帶入到傷害公式內。

可以參考一下這裡的介紹:

例如同樣「提高 10 點面板攻擊力」,因為倍率的關係,大劍提高的攻擊傷害會遠比片手劍來的高很多。

除此之外,魔物獵人的「肉質」和「屬性」等計算也相當有趣,有興趣的讀者可以自行找資料來參考。

捨棄防禦力和複雜公式的遊戲?

看了這麼多公式和計算,是否覺得腦袋昏昏呢?

沒關係,也有「不需要做複雜計算」的遊戲喔。

這通常會出現在「戰棋」、「卡牌」等,中重度回合制策略遊戲中。為的是方便玩家計算數值,擬定策略。

爐石中,每張生物牌的數值只有「費用」、「血量」和「攻擊」三個數值。

像是在爐石戰記中,就沒有所謂的防禦值,直接用攻擊力扣除血量的計算方式相當直觀。

或者像是在「Into The Breach」這款戰棋遊戲中,攻擊時也是直接用血量扣除攻擊力的作法,捨棄了繁瑣的戰鬥計算。

Into The Breach 是筆者強烈推薦的戰棋類遊戲之一

不過,這類遊戲都有一些共通點,才適合使用簡化的傷害計算。

  1. 競技型遊戲
    通常競技型遊戲由於雙方條件均等,且遊戲內的成長線比較短(例如Moba遊戲每一局都從一等重新開始),因此計算不需要太過複雜,畢竟遊戲比的是雙方玩家的操作和策略,趣味核心並不是建立在玩家和設計師的對抗。
  2. 策略型遊戲
    包括上述提到的戰棋或是卡牌,由於需要降低計算複雜度,讓玩家能著重在策略核心的擬定上,這類遊戲就將數值的計算設計的很簡單。
  3. 休閒遊戲
    休閒遊戲或小遊戲就不太需要解釋了,這類遊戲面向的玩家通常是輕度玩家,對數值計算完全不行,也排斥大量的數字,因此這類遊戲就算是以RPG為基礎,也會大量的簡化計算門檻。

雖然乍看之下帳面數字小,計算也簡單,但其實數字越小越難做數值平衡,可說是有利有弊,這點我們下一篇會聊到。

第一篇先聊到這裡

這篇我們先建立一些戰鬥公式的基礎觀念。數學類的計算通常都比較不好吸收,所以這篇我盡可能縮短內容了(笑)。

下一篇,我們來聊聊「戰鬥力」和戰鬥的「策略循環設計」吧。視情況這系列可能會有兩篇或三篇的內容。

今天就到這邊。

我是水狼,我們下次見。

--

--

水狼陽介
THAT GAME DESIGNER - 遊戲設計師

「十個企劃九個宅,還有一個特別宅。」一位忙碌的遊戲從業者。https://www.facebook.com/MizuArk