※前言:如果有翻過各種舊攻略的人,多半都會看到提及遊戲中的穿甲彈(AP)是產廢,當然實際測起來也的確如此,這篇就是把實際運作細節和原因寫出來給人參考用的。
首先是代數定義:
- ND - 傷害淨值。
- RD - 擲骰得出的攻擊傷害值。
- RB - perk有選Bonus Ranged Damage又是以遠距武器攻擊時的額外傷害值,每一級+2。
- CM - 暴擊傷害乘數,沒有暴擊時為2,暴擊時依照傷害效果表內的乘數。
- armDR - 裝甲DR值,包括一些perk加上的部份。
- armDT - 裝甲DT值。
- amX - 彈藥傷害修正的被除數。
- amY - 彈藥傷害修正的除數。
- amDRM - 彈藥的DR修正值,原版公式內唯一允許為負數的數值。
- CD - 戰鬥難易度設定值,簡單75、普通100、困難125,如果攻擊者是玩家或隊友則固定為100。
另外因為引擎內部都是用整數去做運算,所以計算過程中除法產生的小數全部捨去不會進位。
※計算流程:
- 把攻擊者武器內彈藥的DR修正值加上目標的裝甲DR值:armDR + amDRM,加總限制在0到100之間。
- 把暴擊傷害乘數乘以彈藥傷害修正的被除數:amX * CM
- 確定最初的傷害淨值,如果有Bonus Ranged Damage又是遠距攻擊就一併加上:ND = RD + RB
- 把傷害淨值乘上第2步的傷害乘數:ND = ND * (amX * CM)
- 接著除以彈藥傷害修正的除數:ND = ND / amY
- 再來除以2:ND = ND / 2
- 然後乘上戰鬥難易度設定值:ND = ND * CD
- 再除以100:ND = ND / 100
- 開始計算目標裝甲的減免,先減去目標的裝甲DT值:ND = ND - armDT,如果小於等於0就等於沒傷害然後跳過剩下的部份,進行下一次迴圈或離開。
- 記住ND的值,另外把ND乘上第1步的DR總值:N1 = ND、N2 = ND * (armDR + amDRM)
- 然後N2除以100,畢竟DR是以百分比運作的:N2 = N2 / 100
- N1減去N2,N2即目標裝甲DR擋下的傷害量:ND = N1 - N2,如果小於等於0就等於沒傷害然後進行下一次迴圈或離開。
- 最後把各個子彈的傷害加總(如果是用連發攻擊)就是遊戲中顯示出來的傷害值了。
▲在不計較流程順序和小數捨去的情況,單發傷害計算可用數學式表達如下:
從流程中可以發現彈藥傷害修正套用的場合太早,在還沒開始計算裝甲DT與DR減傷之前就影響傷害值,等於彈藥傷害修正為1/2的穿甲彈一出槍口還沒碰到敵人裝甲就先減半傷害,完全發揮不了它們本來預想的設計用途,這就是為何穿甲彈在原本遊戲內只能拿去換錢的原因。
於是這些年以來有些人試著修正JHP/AP的問題,像是在原本公式架構下修改彈藥參數讓跑出來的傷害合理一些,不過之後會介紹兩個直接把傷害計算公式整個改掉的設計:
YAAM和
Glovz傷害計算修正※額外補充:FO1的部份則是根本沒有用上彈藥參數(其實檔案內都有,但遊戲引擎沒用上它們),簡單來說就是彈種完全不影響傷害與命中,所以傷害公式就簡化成: