永恆之柱 (Pillars of Eternity) 攻擊強度及傷害計算方法解析

9 4 月

廣告

作者:板磚加九

來源:永恆之柱吧

 

當攻擊判定的過程結束之後,將會進入傷害計算階段,有效的攻擊會被劃分為擦傷(Graze)、擊中(Hit)、暴擊(Crit)三個強度,這三個強度分類會作為修正值加入傷害計算的過程。這裡的“傷害”可以分為直接傷害和狀態傷害兩大類,直接傷害以損傷目標的耐力值和生命值為目的,狀態傷害可以使目標受到負面效果影響。

在POE中,傷害計算以攻擊來源的基礎資料為准,所有的修正值以相加的方式累計,然後作用於基礎資料之上,那麼攻擊來源的基礎資料是什麼?

對於直接傷害來說,攻擊來源的基礎資料指的就是武器、法術、或者物品的基礎傷害值。上面三張圖片分別給出了勁弩(Arbalest)、烈焰之扇(Fan of Flames)、箭矢陷阱(Arrow Trap)的描述文字,基礎資料就是上圖中藍圈部分劃出的數值。第一張圖片中的“(base 22-32)”代表勁弩的基礎傷害數值。第二張圖片中的“(base 40-55)”代表法術烈焰之扇的基礎傷害數值。第三張圖片中的“(base 20-27)”代表箭矢陷阱的基礎傷害數值。直接傷害的計算以這些資料為基準。這裡需要特別指出,武器攻擊的傷害計算以白板武器的資料為准。

對於狀態法術來說,攻擊來源的基礎資料指的是法術效果的持續時間,上圖中藍圈部分代表了油滑術的基礎持續時間,狀態傷害的計算以這些資料為基準。

在介紹傷害計算公式之前,首先說明擦傷(Graze)、擊中(Hit)、暴擊(Crit)的具體作用

擦傷(Graze):擦傷可以為攻擊來源的基礎資料提供 -50% 的傷害修正
擊中(Hit):擊中不提供任何傷害修正
暴擊(Crit):暴擊可以為攻擊來源的基礎資料提供 +50% 的傷害修正

在瞭解以上基本的概念之後,首先介紹狀態傷害的計算方法。

Duration = BaseDuration * ( 1 + IntBonus ) * ( 1 + Special )

Duration代表法術效果的實際持續時間,BaseDuration代表法術效果的基礎持續時間,IntBonus代表智力提供的加值,Special在這裡特指擦傷、擊中、暴擊這三種傷害強度。下面以具體的示例來說明計算過程:

智力18的法師對敵人施放油滑術(Slicken)並且打出暴擊,那麼敵人會跌倒多長時間呢?

油滑術的基礎效果時間4秒
18智力可以提供40%加成
暴擊可以提供50%加成

根據以上資料可以算出

Duration = 4 * ( 1 + 40% )* ( 1 + 50% ) = 8.4

下面是實際測試截圖,可以看到計算結果無誤

直接傷害的計算由於有大量的天賦、武器、技能等加值,所以計算的複雜度比狀態傷害要高很多。直接傷害計算可以劃分為兩個階段,第一階段:攻方傷害修正,第二階段:守方傷害修正,第三階段:最終傷害的確認。具體的流程是:

攻方發起一次直接傷害攻擊,然後根據攻擊來源的基礎資料和自身的各種修正條件計算出一個傷害期望值,並且在滿足條件時提出附加轉化傷害的要求。

守方在此傷害期望值的基礎上根據自身的傷害減免狀況對該傷害作出修正,並得出減免之後的傷害值。如果攻方提出附加轉化傷害的要求,守方還要根據攻方轉化的傷害類型對傷害期望值進行單獨修正。

攻方以減免之後傷害值為基礎計算攻擊傷害和附加傷害,最終得出實際傷害值。

一、攻方傷害修正

在POE中,傷害的修正方式有“倍乘修正”和“疊加修正”兩種描述形式,下面兩張圖片分別給出描述的具體實例:

第一張圖片中以“x 1.2 Damage”的形式描述傷害修正,這就是倍乘修正,我用Multiple來表示這種形式的修正值。在直接傷害計算的過程中,倍乘修正以( Multiple -1 )的形式參與計算。

第二張圖片中以“+ 30% Damage”的形式描述傷害修正,這就是疊加修正,我用Addition來表示這種形式的修正值。在直接傷害計算的過程中,疊加修正無需改動直接以相加的形式參與計算。

根據以上提供的修正值參與方式,攻方傷害期望值的計算公式如下:

ExpDamage = BaseDamage * [ 1 + ∑(Multiple -1) + ∑Addition + Special ]

其中ExpDamage代表攻方的傷害期望值,BaseDamage代表攻擊來源的基礎傷害資料,∑(Multiple -1)代表所有倍乘修正值減1之後的總和,∑Addition代表所有疊加修正值的總和,Special特指擦傷、擊中、暴擊這三種攻擊強度。

由於POE中的直接傷害都是範圍取值,所以我們只能根據武器、法術或者物品的傷害上下限計算出傷害的浮動範圍作為參考,對於某次傷害的具體數值是無法進行預測和計算的。下面就用一個完整的攻擊實例來說明傷害範圍的計算過程

上面三張圖片給出一個7級戰士的狀態資訊、包括他的武器、天賦、屬性等等,那麼當這個戰士開啟“Savage Attack”進行攻擊時,他的傷害期望值是多少呢?下面是分析計算的過程

這個戰士使用短矛(Spear)進行攻擊,因此攻擊來源的基礎資料就是短矛的基礎傷害值,注意!以同類型的白板武器為准,也就是11-16,而不是第一張圖中藍圈部分標注的13-18,這是精確計算傷害的前提。

短矛本身帶有“Fine”附魔,提供“x 1.15 Damage”的傷害加成

該戰士學習了平民武器精通“Weapon Specialization:Peasant”,因此在使用短矛時獲得“x 1.15 Damage”的傷害加成

開啟“Savage Attack”技能可以獲得“x 1.2 Damage”的傷害加成

威力(Might)20,可以提供 + 30% 的傷害加成

我們以MinExpDamage來表示最小傷害期望值,以MaxExpDamage來表示最大傷害期望值,然後分別計算擦傷、擊中、暴擊的傷害浮動範圍

當攻擊判定為擦傷時:

MinExpDamage = 11 * [ 1 + ( 1.15 – 1 ) + ( 1.15 – 1 ) + ( 1.2 – 1 ) + 30% + ( -50% )] = 14.3
MaxExpDamage = 16 * [ 1 + ( 1.15 – 1 ) + ( 1.15 – 1 ) + ( 1.2 – 1 ) + 30% + ( -50% )] = 20.8

當攻擊判定為擊中時:

MinExpDamage = 11 * [ 1 + ( 1.15 – 1 ) + ( 1.15 – 1 ) + ( 1.2 – 1 ) + 30% ] = 19.8
MaxExpDamage = 16 * [ 1 + ( 1.15 – 1 ) + ( 1.15 – 1 ) + ( 1.2 – 1 ) + 30% ] = 28.8

當攻擊判定為暴擊時:

MinExpDamage = 11 * [ 1 + ( 1.15 – 1 ) + ( 1.15 – 1 ) + ( 1.2 – 1 ) + 30% + ( +50% )] = 25.3
MaxExpDamage = 16 * [ 1 + ( 1.15 – 1 ) + ( 1.15 – 1 ) + ( 1.2 – 1 ) + 30% + ( +50% )] = 36.8

根據以上計算,該戰士在對沒有任何傷害減免能力的敵人進行武器攻擊時,擦傷傷害範圍14.3~20.8,擊中傷害範圍19.8~28.8,暴擊傷害範圍25.3~36.8,因為POE採用浮點數進行運算,所以小數部分由於取捨規則的限定可能存在 ± 0.1 的誤差……

通過以上計算,我們可以得知這個戰士的傷害期望值範圍,在正常情況下,遊戲會根據實際戰鬥情況從這個範圍裡隨機選擇一個數值作為傷害期望值,然後提交給守方進行傷害修正。但是,我們可以看到武器上存在“Shacking Lash: + 25% Shock Damage”的附魔,因為短矛屬於穿刺傷害類型的武器,它不能造成衝擊傷害,所以這個 + 25% 是不能作為修正值列入基本傷害計算過程的。但是在使用該武器進行攻擊時,攻方可以根據這條附魔屬性向守方提出附加轉化傷害的要求。在POE中該過程的流程如下:

第一步、攻方在可能的傷害範圍內隨機選擇一個數值作為傷害期望值

第二步、傷害期望值確定之後,攻方首先根據武器的傷害類型將該數值提交給守方進行修正,此時守方收到一個穿刺類型的傷害值。

第三步、攻方根據“Shocking Lash”這條附魔屬性將上一步的傷害期望值全部轉變為衝擊傷害,然後再次提交給守方進行修正,同時要求守方將修正結果的25%加入最終傷害。此時守方收到一個衝擊類型的傷害值,數值等於傷害期望值。

二、守方傷害修正

我們繼續上面的示例,假設守方是一個穿著板甲的人物,那麼他的傷害減免能力應該如下圖所示

圖中的藍圈部分列出了守方的傷害減免能力,“Damage Reduction:12”是通用傷害減免,這表示他可以將Raw傷害之外的所有類型的傷害降低12點。下面是三項特定傷害減免,其中對揮砍傷害減免15點、對穿刺傷害減免15點、對衝擊傷害減免6點。注意,特定傷害減免與通用傷害減免不是疊加關係,而是替代關係,特定傷害減免的優先順序高於通用傷害減免。那麼我們可以這樣描述這個人物的傷害減免能力:

除了Raw傷害之外,該人物對揮砍傷害減免15點、對穿刺傷害減免15點、對衝擊傷害減免6點、對其他類型的傷害減免12點。

在攻方傷害修正的計算過程中,我們給出了一個戰士攻擊時的具體實例,那麼在攻方傷害修正的過程結束之後,守方收到了一個穿刺類型的傷害值,我們用PierceDamage來表示。守方同時還收到了一個衝擊類型的傷害值,我們以ShockDamage來表示。在守方進行傷害修正之前,PierceDamage和ShockDamage在數值上是相等的,那麼守方如何對這些傷害進行修正呢?

很簡單,守方將根據自身的傷害減免能力,使用同類型的傷害減免數值進行修正。計算過程也非常簡單:修正之後的傷害值 = 攻方傷害值 – 守方減免值。那麼:

( PierceDamage – 15 ) 就是修正過後的穿刺類型傷害值
( ShockDamage – 6 ) 就是修正過後的衝擊類型傷害值

由於攻方對於衝擊傷害值有25%的轉化率,所以守方實際需要承受的衝擊傷害為 ( ShockDamage – 6 ) * 0.25

那麼經過守方的傷害修正之後,攻方的整體傷害值就變為

( PierceDamage – 15 ) + ( ShockDamage – 6 ) * 0.25

如果沒有特殊情況的話,這就是傷害計算的最終值。但是,假如守方擁有極強的傷害減免能力,那麼很可能會讓攻方的傷害變得極低,甚至削減成負值。如果攻方的攻擊不但不能傷害對方,反而會給對方加血,那顯然是不合理的,所以在POE中規定:

A、對於任何有效的攻擊,傷害減免之後的資料不可以是負值。
B、對於任何有效的攻擊,主體傷害至少可以造成攻方修正值的20%傷害。

這又是什麼意思,我們舉例來說明:

在剛才的示例當中,假設守方依靠自身的傷害減免能力將 PierceDamage 和 ShockDamage 全部降為負值。那麼由於穿刺類型的傷害直接源自攻方的武器,因此將被視為主體傷害,衝擊傷害由主體傷害轉化而來,所以視為附加傷害。根據上面兩條規則的限制,穿刺傷害的最終修正值將變為 PierceDamage * 20% ,而 ShockDamage 將被減免為零。此時,遊戲中的戰鬥記錄會在修正傷害值的末尾加上(MIN)的標識加以區分,我把這個過程稱為傷害最小值限定修正。如下圖藍圈部分所示:

我們可以用( PierceDamage – 15 ) < PierceDamage * 20% 這個不等式來計算發生傷害最小值限定修正的臨界點,計算結果為 PierceDamage < 18.75,也就是說,如果攻方提供的傷害期望值小於18.75,那麼經過守方傷害減免之後就會出現傷害最小值限定修正。

根據以上的各種計算,在我們所舉出的示例當中,攻方對守方發動武器攻擊之後,經過雙方修正之後的最終傷害值範圍如下,計算過程略過:

當攻擊判定為擦傷時,傷害浮動範圍是 5.0~9.5
當攻擊判定為擊中時,傷害浮動範圍是 8.3~19.5
當攻擊判定為暴擊時,傷害浮動範圍是 15.2~29.5


發佈留言

發佈留言必須填寫的電子郵件地址不會公開。