遊戲企劃必修課:淺談「戰鬥數值」設計 Part.01
攻擊究竟該跳多少傷害?戰鬥公式是如何設計的?
寫在前面
由於筆者不是數值專業,這篇的內容算是個人工作上的一些經驗和心得整理,僅供參考和新手入門。
數值模型(也就是數值公式和設計)五花八門,很難說哪種比較好用,只要是針對應用的專案適合的公式就是好的公式。
好的,就讓我們開始吧。
只要和戰鬥有關的遊戲,一定脫離不了戰鬥公式計算。
在職能分野上甚至會有「戰鬥企劃」這種專門針對戰鬥相關技術專精的職缺,除了戰鬥公式之外,戰鬥企劃通常也負責調整「打擊感」、「特效表現」等等戰鬥整體的呈現效果。
這次就來帶大家從頭看一遍這些和戰鬥相關的數值是如何設計的。
我們先從公式的原型和變體開始說起。
基本公式原型
第一階段:設定「基礎傷害」
一切的公式或計算都有其原點,在戰鬥公式中,「攻擊力」就是公式的核心。
A攻擊B時,根據A的攻擊力,對B造成多少傷害。
同時,為了要能夠區分勝負,我們還加入了第二個元素「生命值」。並且規範生命值歸零的時候角色會死亡。
至此,我們有了二個最基本的值:
ATK:Attack,攻擊力,越高代表能造成越多傷害。
HP:Hit Point,生命值,或也有 Health Point 的說法。代表死亡前能最多受到多少傷害。
每受到一次攻擊,HP 會降低一次等同 ATK 的值。
第二階段:加入「時間」
接下來我們加入雙方的「攻擊速度」,也就是時間要素。
(P.S.如果是回合制,就當成雙方的攻速相同就行了。)
這時,我們獲得了兩個新增的值:
ASPD:Attack Speed,攻擊速度,單位為「次數/時間」,也就是每秒可以攻擊多少次。數值越高攻速越快。(註 1)
DPS:Damage per Second,單位為「傷害值/時間(秒)」
由此我們又獲得了一個新的算法,就是角色的「存活時間」:
這時我們可以比較一下A、B的存活時間,就能得出兩人互毆的話最後誰可以活下來。
註 1
用「次數/秒」這種方式來計,優點是比較直觀,數值越大代表攻速越快,武器上面顯示這個數值玩家也看的比較爽。
但在做數值設計的時候,「單次攻擊所需時間」其實也是可以的,看個人習慣和需求。只要記得配置表有備註到底是哪種單位,實作的程式也知道就行。
第三階段:加入「傷害減免」
也就是俗稱的防禦力或是減傷效果。
攻擊力經過計算,扣除防守方的防禦力之後,才會對其造成傷害。
這邊新增兩個定義:
DEF:Defence,防禦力,可以抵銷 ATK 的數值,越高代表越難對其造成傷害。
DMG:Damage,實際傷害,也就是 ATK 扣除傷害減免後,最終造成的傷害值。
那麼,這個傷害值 DMG 究竟如何計算呢?
底下就來介紹三種業界常用的計算方法。
傷害減免的計算方式
一般來說 DMG 的計算方式分為減法、除法和乘法三種。
減法指的是直接用 ATK 和 DEF 做相減計算,結果為線性函數(直線)。
而除法和乘法則是非線性函數(曲線)。
第一種:減法
減法其實就是直接用 ATK 減去 DEF 來獲得最終的傷害量。
這種方式很好計算,但會出現一個問題。
如果 DEF 大於等於 ATK,攻擊時會發生什麼事情?
若程式碼只是簡單的寫 HP = HP-DMG 的話,常常會出現攻擊力遠比防禦力低的時候,攻擊敵人會導致敵人補血這種事情。
通常為了避免這個狀況,會做幾種額外處理。
- 當防禦力比攻擊力高的時候,攻擊方會造成固定傷害。(例如只有1點傷害,或在某個固定數值段之間隨機)
- 或是最少造成一定比例(如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,我們可以簡單的把公式寫成這樣:
雖然在這個公式中我們沒有看到 DEF,不過 DEF 還是可以作為 ABS 的參數。(這在後面王者榮耀的例子會提到)
第三種:除法
所謂的除法,指的是用 ATK 除以 DEF 作為傷害值的基礎公式原型。
但通常為了避免攻擊力提昇時數值的變化太大,會將 ATK 本身也作為分母參數來使用。例如下面這樣:
這種作法,會令攻擊力在不同的數值下,提昇的 DMG 效益受到影響。
也就是 ATK 越高,單位 ATK 對 DMG 的提昇效益就越差。
這點我們一樣留待底下的例子做講解,在王者榮耀的減傷比例計算會有更詳細的說明。
除法的其他變體
這種除法公式原型通常是業界RPG遊戲中最常使用的數值模型,包括像是WOW(魔獸世界)等遊戲都採用這類計算方式。
除法的變體包括
DMG=(攻擊 × 攻擊)/(攻擊 +防禦)
DMG=(2 ×攻擊 ×攻擊)/(攻擊 +防禦)
DMG=(攻擊)/(攻擊 +防禦 +等級參數)
等各種不同的類型。
根據數值設計師希望如何設計玩家的策略需求和遊戲體驗,這些公式會加入各種參數做變化。
例如 (攻擊 × 攻擊)/(攻擊+防禦)的例子,就更注重堆高攻擊所帶來的效益。
無論使用哪種公式模型,只要能達到設計者預期的遊戲體驗,那就是適合的模型。
以王者榮耀為例-乘除法的應用
以Moba類型的遊戲「王者榮耀」為例,該遊戲和英雄聯盟或是傳說對決一樣,都是5打5的競技類型遊戲。
我們就用這個遊戲來講解一下乘法和除法的應用和效果吧。
王者榮耀中的傷害算式是乘法公式:
而其中的 ABS 是根據裝備的護甲值來計算的。
ABS 的計算公式則是採用除法公式:
在王者榮耀中,「抗性」分為兩種:「物理抗性和魔法抗性」。
物理抗性稱為護甲,魔法抗性就叫做魔抗。
護甲:提供物理抗性,物理傷害的減免比例等於 護甲 /(護甲+602)
魔抗:提供魔法抗性,魔法傷害的減免比例等於 魔抗 /(魔抗+602)
以物理減傷為例,護甲在 500 和 1000 時,所提供的減傷比例,以及追加額外護甲時,所能提供的效益會有差異。
參考下圖的計算就能一目了然。
這種設計方式,會導致在不同情況下,追加護甲的效益會有很大的差別。
護甲越高的情況下,效益就越差,兩者權衡之下必定會有個最適合的區間段,也就是邊際效益的最大化。
而在王者榮耀中,攻擊方當然也有反制護甲的手段,就是所謂的「穿透」屬性。
護甲穿透:物理攻擊的一種屬性值,當攻擊時,防守方的護甲會先扣除攻擊方的護甲穿透,然後才計算減傷比例。
魔法穿透:同上,為針對魔法抗性的反制屬性。
當攻擊方有穿透的情況下,傷害減免比例的計算如下:
因此在Moba遊戲中,知道對手裝備了哪些裝甲,會影響玩家對於武器的選擇,反之亦然。
至於為什麼分母是額外加 602,就是遊戲數值設計師定下的數值。根據這個 602,傷害計算和遊戲中裝備的設計、甚至是英雄的技能設計都會被影響。
Moba這類遊戲每一局的終點都是一樣的,每個英雄的等級上限都相同,並且裝備格子也一樣,所以這裡才能使用 602 這種固定數值。
額外補充
不是只有傷害值或傷害減免能使用除法公式,很多屬性值,尤其是百分比屬性值也很適合使用這種算法。
舉個例子,崩壞三中的「爆擊率」是由「會心」這個值做計算的,但根據角色等級提昇,會心提供的爆擊率效益會越來越差。
相較之下,直接提供爆擊率的武器,在高等級的後期就比提供會心值來的有效益許多。
實際的計算公式為
爆擊率 = 會心值 /(75+人物等級 × 5)
這樣設計的原因,其實是因為如果裝備一開始就給「爆擊率」,由於只有100%,很容易造成後期數值膨脹(總不可能越給越低)。
如果不使用互相抵銷的屬性(例如有些遊戲會有「抗暴」屬性,用來抵銷攻擊方的爆擊率),就只能使用除法公式,並根據等級來調整計算結果了。
可以參考這篇攻略:談談幾個容易被誤會的屬性…..會心/爆傷/防禦
以線上 RPG 為例-等級的數值需求
RPG 遊戲常常會有所謂「升級」的需求。
如果減傷比例直接依照上面王者榮耀這種算法,那玩家就不需要隨著升級而穿更好的裝備了對吧?
就算讓敵人的「穿透」屬性更高,玩家也相應的將「抗性」提高,那就只是陷入「裝備競賽」的情況,和玩家的等級關聯不大。
因此,很多遊戲在設計時,也會將「等級」作為「除法公式」的一個參數,例如底下這樣:
當玩家的等級越高時,相應的分母數字也會提昇,造成玩家需要穿上具有更高抗性的裝備才能提供相同的減傷比例。
或是也可以把等級作為一個函數參數,不一定是乘以 20 這種這麼直白的線性關係,有可能這個等級的影響本身也是曲線函數,例如以下這樣:
或其實這個計算出來不一定是「減傷比例」,還要經過其他計算,才會成為最終防守方的防守數值。
但總之,不斷的將分母的值動態調整,就能設計出玩家在不同情況下,對抗性數值的需求也不一樣,從而製造更多的策略需求。
額外思考
可能會有讀者想問,在RPG遊戲中,常常會有「高等玩家打低等怪」的情況,這時就算裝備相同,低等怪攻擊高等玩家造成的傷害也是很低的,這和上面的公式就違背了不是嗎?(照上面的公式,玩家升級後,同樣的裝備提供的減傷比例應該會下降)
這其實是因為RPG遊戲通常還會有個另外的計算公式,叫做「等級差」機制。
這個機制主要是鼓勵玩家去挑戰相應等級的怪物,同時避免玩家一直待在低等區域練功打寶。通常會這樣設計:
- 玩家或怪物攻擊比自己高等的對象時,每高一等直接降低 10% 的傷害。
- 攻擊比自己低等的對象時,每高一等直接提高 10% 的傷害。
- 玩家攻擊比自己低等級的怪物,掉寶率和經驗值獲取大幅下降。
- 玩家和等級與自身相近的怪物戰鬥,獲得 Y% 的經驗值和掉寶率Bonus。
利用以上這些機制,鼓勵玩家挑戰等級相當、甚至是更高的對手。
這種情況下,無論抗性和穿透如何計算,玩家攻擊低等怪物都能收穫強大的成就感,也間接鼓勵玩家盡快升級。
聊聊「真實傷害」與「面板數字」
這兩個詞應該也是玩戰鬥遊戲或是看攻略的時候常見的詞彙,這邊因為有點關聯性就特別提出來講解一下。
真實傷害
所謂的真實傷害,其實就是指忽略所有的抗性和護甲,直接對對方的生命值造成傷害。
這通常是遊戲中用來制衡把「抗性」衝很高的坦克角色所設計的技能或武器。
真實傷害很克制高護甲或抗性,但對本身血量就高的敵人效果就比較差。這點在下一篇談數值的策略循環設計時會再深入探討一下。
面板數字(又稱 帳面數字/白板數值)
所謂面板數字,就是指遊戲中讓玩家直接看到的數值。例如常聽到「面板攻擊力」或是「面板閃避」等等。
因為遊戲肯定不是直接拿面板數字作為戰鬥計算的結果,因此面板數字通常只是在比較裝備效益的時候,作為一個可參考的數值。
以魔物獵人來說,根據武器的差異,面板攻擊力還需要乘上武器倍率,才能作為基礎攻擊力,帶入到傷害公式內。
可以參考一下這裡的介紹:
例如同樣「提高 10 點面板攻擊力」,因為倍率的關係,大劍提高的攻擊傷害會遠比片手劍來的高很多。
除此之外,魔物獵人的「肉質」和「屬性」等計算也相當有趣,有興趣的讀者可以自行找資料來參考。
捨棄防禦力和複雜公式的遊戲?
看了這麼多公式和計算,是否覺得腦袋昏昏呢?
沒關係,也有「不需要做複雜計算」的遊戲喔。
這通常會出現在「戰棋」、「卡牌」等,中重度回合制策略遊戲中。為的是方便玩家計算數值,擬定策略。
像是在爐石戰記中,就沒有所謂的防禦值,直接用攻擊力扣除血量的計算方式相當直觀。
或者像是在「Into The Breach」這款戰棋遊戲中,攻擊時也是直接用血量扣除攻擊力的作法,捨棄了繁瑣的戰鬥計算。
不過,這類遊戲都有一些共通點,才適合使用簡化的傷害計算。
- 競技型遊戲
通常競技型遊戲由於雙方條件均等,且遊戲內的成長線比較短(例如Moba遊戲每一局都從一等重新開始),因此計算不需要太過複雜,畢竟遊戲比的是雙方玩家的操作和策略,趣味核心並不是建立在玩家和設計師的對抗。 - 策略型遊戲
包括上述提到的戰棋或是卡牌,由於需要降低計算複雜度,讓玩家能著重在策略核心的擬定上,這類遊戲就將數值的計算設計的很簡單。 - 休閒遊戲
休閒遊戲或小遊戲就不太需要解釋了,這類遊戲面向的玩家通常是輕度玩家,對數值計算完全不行,也排斥大量的數字,因此這類遊戲就算是以RPG為基礎,也會大量的簡化計算門檻。
雖然乍看之下帳面數字小,計算也簡單,但其實數字越小越難做數值平衡,可說是有利有弊,這點我們下一篇會聊到。
第一篇先聊到這裡
這篇我們先建立一些戰鬥公式的基礎觀念。數學類的計算通常都比較不好吸收,所以這篇我盡可能縮短內容了(笑)。
下一篇,我們來聊聊「戰鬥力」和戰鬥的「策略循環設計」吧。視情況這系列可能會有兩篇或三篇的內容。
今天就到這邊。
我是水狼,我們下次見。
也可以到臉書追蹤我喔: 粉絲專頁連結
最後,請多利用我的個人文章列表,會持續更新: