请选择 进入手机版 | 继续访问电脑版

13号避难所

 找回密码
 立即注册
搜索
查看: 5736|回复: 11

FO2戰鬥傷害計算

[复制链接]
发表于 2014-2-25 13:28:37 | 显示全部楼层 |阅读模式
前言:
本來只是前一陣子在NMA上幫Glovz測試他的傷害計算修正v3,覺得很滿意想寫篇介紹,但又想到不先提原版和對照用的YAAM好像不行,就沒事找事寫了這些大概沒啥人會想看的東西。

雖然應該有不少人知道了,不過還是提一下FO2的傷害計算流程,首先是代數定義:
  • 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的穿甲彈(AP)一出槍口還沒碰到敵人裝甲就先傷害減半,完全發揮不了它們本來預想的設計用途,所以那些穿甲彈在原本遊戲內只能拿去換錢。

於是就有些人想試著修正JHP/AP的問題,像Weapons Redone就是在原本公式架構下修改彈藥參數讓跑出來的傷害合理一些,不過接下來要介紹是兩個直接修改傷害計算公式的內容。

額外補充:
FO1的部份是根本沒有用上彈藥參數(其實檔案內都有,但遊戲引擎沒用上它們),簡單來說就是彈種完全不影響傷害與命中,所以傷害公式就簡化成:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
 楼主| 发表于 2014-2-25 13:28:54 | 显示全部楼层
Yet Another Ammo Mod(YAAM),作者為Haenlomal
https://falloutmods.fandom.com/wiki/YAAM_(Yet_Another_Ammo_Mod)
https://www.nma-fallout.com/threads/yet-another-ammo-mod-yaam-feedback-thread.192202/

YAAM最大的變動就是把彈藥DR修正值改為DT修正值,如果彈藥DT修正值減去目標裝甲DT後還有剩,每一點就換算成DR-10%,等於DT扣完就開始扣DR。

代數定義同上,但amDRM換成了amDTM,即彈藥的DT修正值。

計算流程:
  • 把暴擊傷害乘數乘以彈藥傷害修正的被除數:amX*CM
    .
  • 確定最初的傷害淨值,如果有Bonus Ranged Damage又是遠距攻擊就一併加上:ND=RD+RB
    .
  • 計算目標裝甲DT被彈藥減去多少:DT=armDT-amDTM,小於0就把DT設為0。
    .
  • 再看傷害值被修正後的目標裝甲DT扣去多少:ND=ND-DT,如果小於等於0就等於沒傷害然後跳過剩下的部份,進行下一次迴圈或離開。
    .
  • 把剩下的傷害值乘上第1步的傷害乘數:ND=ND*(amX*CM)
    .
  • 接著除以彈藥傷害修正的除數:ND=ND/amY,小數捨去。
    .
  • 再來除以2:ND=ND/2,小數捨去。
    .
  • 然後乘上戰鬥難易度設定值:ND=ND*CD
    .
  • 緊接著除以100:N2=N2/100,小數捨去。
    .
  • 重來一次第3步,但這回DT如果大於等於0就設成0,不然就把DT乘以10:DT=DT*10(注意,在這計算下DT會是負數)
    .
  • 計算調整後的目標裝甲DR,把目標裝甲DR值加上第11步得到的DT:DR=DR+DT,加總一樣限制在0~100,DR為100時等於沒傷害,直接跳過剩下的部份。
    .
  • 開始計算目標裝甲DR的傷害減免量,記住ND的值,另外把ND乘上第12步的DR總值:N1=ND、N2=ND*DR
    .
  • 然後N2要除以100,畢竟DR是以百分比運作的:N2=N2/100,小數捨去。
    .
  • 最後N1減去N2,就是此次攻擊的傷害值:ND=N1-N2,如果小於等於0就等於沒傷害然後進行下一次迴圈或離開。
    .
  • 和原本一樣把各個子彈傷害加總(如果是用連發攻擊)就是遊戲中顯示出來的傷害值了。
 
在不考慮流程順序和小數捨去的情況,YAAM單發傷害計算可用數學式表達如下:


因為計算公式改了,絕大多數的彈藥檔案也得跟著修改參數,不然JHP會變得更不平衡,有修改的彈藥與新參數如下表:
彈藥 傷害修正(X/Y) DT修正值
10mm JHP 3/2 0
10mm AP 1/1 4
.44 Magnum JHP 3/2 0
.44 Magnum FMJ 1/1 5
.223 FMJ 1/1 5
5mm JHP 3/2 0
5mm AP 1/1 4
14mm AP 1/1 8
7.62mm 1/1 2
9mm Ball
3/2 2
9mm 1/1 2
HN Needler Cartridge 1/1 2
HN AP Needler Cartridge 2/1 5
4.7mm Caseless 3/2 7
2mm EC
3/2 9
Flamethrower Fuel 3/4 0
Explosive Rocket 3/2 0
Rocket AP 1/1 20
Robo Rocket Ammo (此彈種實際上沒有武器使用)
1/1 10

沒修改的有12號霰彈、BB彈、.45、火焰槍燃料mk2、兩種能量電池。
壓縮檔內的excel表格有把各彈藥對上所有裝甲的傷害數值列出供參考。

另外YAAM是RP安裝檔內的默認項目,如果你啥都不看一直按Next就會安裝下去,所以不想用YAAM的請記得取消勾選。(我問過killap這件事,他說都默認勾選那麼久已經懶得改了)

使用方法:
我只說配合sfall的情況,另外RP安裝檔已經自帶這玩意兒了,想用的放給它裝就好。如果沒在玩RP而是非官方補丁或其他mod,你只需要把壓縮檔內的Proto與Text文件夾放到Fallout2\Data內,然後把Proto\Items文件夾裡面所有.pro檔都加上只讀屬性,再來打開ddraw.ini確認DamageFormula=5即可。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
 楼主| 发表于 2014-2-25 13:29:02 | 显示全部楼层
F2: damage calculation change, a FIX (v5),作者為Glovz
https://www.nma-fallout.com/threads/f2-damage-calculation-change-a-fix-v3-by-my-count.200361/

Glovz從很早之前就試著修正穿甲彈的問題,v1針對目標裝甲來調整使用穿甲彈時的傷害計算,v2把DR與彈藥傷害修正都定義為DT的加成參數,DR本身不再直接減少傷害。兩次嘗試都有些問題,特別是v2在最後叫砲塔打Frank Horrigan時幾乎傷不了它分毫,所以v3之後又是整個砍掉重來。

Glovz的修正不像YAAM一樣把彈藥DR修正值改成DT修正值,它特別針對幾個原版公式的問題進行修正,例如本來除法運算是完全捨去小數不進位,它就把除法以連續減法的迴圈取代,然後拿餘數去和除數比對來決定是否進位,小數進位方式採Bankers' Rounding(四捨六入五成雙)。

計算流程:
  • 確定最初的傷害淨值,如果有Bonus Ranged Damage又是遠距攻擊就一併加上:ND=RD+RB
    .
  • 如果目標裝甲DT小於等於0,就再檢查目標裝甲DR,若仍小於等於0則直接跳到第12步進行額外傷害計算,不然接到第6步繼續。
    .
  • 限制彈藥傷害修正的除數,最小為1。
    .
  • 如果目標裝甲DT大於0,就把裝甲DT除以彈藥傷害修正的除數:DT=armDT/amY
    .
  • 傷害淨值減去修正後的裝甲DT:ND=ND-DT,如果小於等於0就等於沒傷害然後進行下一次迴圈或離開。
    .
  • 檢查目標裝甲DR,小於等於0就跳到第13步,另外彈藥DR修正值不得為正數,如果是正數就修改為同絕對值的負數。
    .
  • 把彈藥DR修正值加上目標裝甲DR:armDR+amDRM
    .
  • 檢查戰鬥難易度設定值,若CD大於100目標裝甲DR就減20(CD'=-20),小於100則目標裝甲DR加20(CD'=20),然後計算出目標DR總值:DR=armDR+amDRM+CD'
    .
  • 限制彈藥傷害修正的被除數,最小為1,然後將DR總值除以彈藥傷害修正的被除數:DR=DR/amX
    .
  • 傷害值乘上修正後的裝甲DR,然後除以100,此即為DR減去的傷害量:temp=(ND*DR)/100
    .
  • 傷害值減去DR抵掉的傷害量:ND=ND-temp,如果小於等於0就等於沒傷害然後進行下一次迴圈或離開。
    .
  • 只有在第2步目標裝甲DT與DR皆小於等於0才會進行此步驟,第11步結束不會接到這邊。
    .
    (A) 如果彈藥傷害修正的被除數小於等於1,且除數大於1,就把傷害值乘以10再除以100,然後加回傷害值中:ND=ND+(ND*10)/100
    .
    (B) 如果彈藥傷害修正的被除數大於1,且除數小於等於1,就把傷害值乘以20再除以100,然後加回傷害值中:ND=ND+(ND*20)/100
    .
    (C) 如果彈藥傷害修正的被除數與除數皆大於1,就把傷害值乘以15再除以100,然後加回傷害值中:ND=ND+(ND*15)/100
    .
  • 如果是暴擊(CM>2),就把傷害值乘以暴擊傷害乘數,再除以2,小數捨去(因為只會有0.5):ND=(ND*CM)/2
    .
  • 和原本一樣把各個子彈傷害加總(如果是用連發攻擊)就是遊戲中顯示出來的傷害值了。
 
在不考慮流程順序的情況,單發傷害計算可用數學式表達如下:


變動最大的是彈藥傷害修正值的代表意義,從傷害倍數變成DT與DR的除數。原版除了武器有貫穿屬性或暴擊擲出穿甲效果之外無法修改裝甲DT,彈藥只能影響DR,而YAAM則是先扣DT,等到DT扣完才能去動DR。v5可以同時減少裝甲DT與DR,也由於Glovz一開始設計時有考慮到和遊戲原本的彈藥參數相容,所以就算不修改彈藥proto檔也能讓JHP和AP的特性發揮出來,只是一些彈藥的擊穿DR效果會變得太過有效,而能量武器的傷害也不會有變動,激光還是一樣弱。

Glovz提出的新彈藥參數如下表:
彈藥 AC修正值 DR修正值 彈藥X值 彈藥Y值
10mm JHP 0 0 2 1
10mm AP -5 0 1 2
.44 Magnum JHP 0 -10 2 1
.44 Magnum FMJ -5 -10 2 2
.223 FMJ -15 -15 2 2
12 ga. Shotgun Shells -15 0 3 1
5mm JHP 0 -15 2 1
5mm AP -5 -15 1 2
14mm AP -5 -30 1 2
7.62mm -10 -20 2 2
9mm Ball 0 0 1 1
9mm 0 0 2 1
.45 Caliber 0 -5 2 1
BB's 0 0 1 1
HN Needler Cartridge -20 -5 1 1
HN AP Needler Cartridge -20 -5 1 2
4.7mm Caseless -5 -25 1 2
2mm EC -25 -20 1 3
Flamethrower Fuel -20 0 1 1
Flamethrower Fuel MKII -20 -15 1 1
Explosive Rocket -10 0 1 1
Rocket AP -10 0 1 2
Small Energy Cell -20 0 2 1
Micro Fusion Cell -20 0 2 1
Robo Rocket Ammo (此彈種實際上沒有武器使用) -10 -10 1 1

他也做了個HTML/JavaScript版本的傷害計算機,可以列出各彈藥對上所有裝甲的傷害數值,同時列出原版數值供對照:http://di.proximitystore.com/newCalculator.html(原網頁已死,附件的RAR檔裡面有。)

Glovz傷害計算修正整套用下來,.223與7.62mm的連發武器會比原版更強悍,特別是對上重裝甲目標。明顯例子之一就是Enclave鑽油平台最後一段,因為Frank Horrigan是占多個六角格的人物,機槍砲塔的掃射攻擊判定不太會偏到其他目標,現在它們吃.223 FMJ的Heavy Dual Minigun對他一掃很容易就傷害上一兩百(單發4~10),在開啟反暴動模式下他幾乎活不過一個完整回合,當然要是沒開反暴動模式的話就換你痛苦了,就算全隊都穿動力裝甲也討不到什麼便宜。

使用方法:
Glovz傷害計算修正是藉由sfall運作,3.2版之前用的還是有問題的舊版源碼,3.3版之後才是現在這個公式。使用Glovz傷害計算修正只要打開ddraw.ini確認DamageFormula=1即可。若設定成DamageFormula=2則是使用暴擊傷害倍率有調整過的版本:暴擊傷害 = ND + (ND * 25% * CM),原本是暴擊傷害 = ND * CM / 2。

如果想套用上面新的彈藥參數,可以下載附件的Glovz_Fix2.rar,把裡面的內容解壓縮到Fallout2主文件夾內,其中gl_ammomod.ssl是腳本源碼,如果你有興趣看的話。這個全域腳本是我參考JimTheDinosaur的原版重寫一份而來的,加上了可調整AC修正值的部份,與避免INI檔不存在時會寫入錯誤數值進彈藥參數內的問題。

想自己修改彈藥參數只要編輯AmmoGlovz.ini內的項目就好,可以調整的參數有AC修正值、DR修正值、彈藥X值、彈藥Y值四項,這做法省去了修改一堆proto檔案的麻煩事,不想用了也只要移除AmmoGlovz.ini與gl_ammomod.int,不用再去一個一個把修改過的proto檔案刪除或改回來。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
发表于 2014-2-25 16:52:17 | 显示全部楼层
想问一下novarain,你自己认为weapon redone,YAAM和GLOVZ修正哪一个以目前的完成度来说相对最合理?
 楼主| 发表于 2014-2-25 17:04:40 | 显示全部楼层
本帖最后由 novarain 于 2014-2-25 17:12 编辑

我不會把WR拿來和後兩者相比,因為WR的尺度不同(改了所有武器和裝甲,包括敵人身上自帶的裝甲屬性),有些更動我自己有參考拿來改,有些我不喜歡的就沒動了。
而YAAM和Glovz現在這版比起來我比較喜歡後者的思維,一方面是彈藥參數的彈性較大,另一方面是我自己也花了不少時間在測試它還有和Glovz討論,說沒有私心是騙人的,所以我才把兩者運作細節都列出來讓人挑自己中意的。

NMA最近有兩個人也在搞遊戲平衡度與一些運作機制的大改造,一個是phobos2077,一個是JimTheDinosaur,兩者都用了相當多的sfall函式(與提出一卡車需求),後者自己也設計了一種戰鬥傷害計算機制,但目前沒實裝在sfall內。
发表于 2014-2-26 02:44:01 | 显示全部楼层
公式看上去排版的不错,难道是用LaTex做的么
 楼主| 发表于 2014-2-26 06:35:35 | 显示全部楼层
不,只是用Word 2013的公式編輯器而已,我不會LaTex。
 楼主| 发表于 2014-4-21 23:12:21 | 显示全部楼层
Glovz傷害計算修正改版至v5,上面內容已更新。

近兩個月以來幫Glovz一直在測他改版的源碼,v4先是拿掉彈藥X/Y值上限、修正小數進位原則以符合Bankers' Rounding、限定額外傷害加成只適用於完全無裝甲的目標(v3的情況其實算bug),並加上了暴擊傷害倍率有調整過的版本,然後就是一連串不斷嘗試精簡與“優化”源碼還有實際測試,也因為不想老是得等他花時間去檢查源碼找bug,我自己索性也翻文件把那些組合(匯編)語言逐行檢查與修改測試,幫他省些除錯工夫。

另外現在也在測試RP 2.3.3,一切順利的話五月中之後會有消息。
发表于 2018-12-18 08:09:42 | 显示全部楼层
Glovz伤害计算版本是跟着sfall的版本走的嘛?sfall4.0.6是v5还是要独立安装?

Glovz伤害计算版本的第8步.
8 檢查戰鬥難易度設定值,若CD大於100目標裝甲DR就減20(CD'=-20),小於100則目標裝甲DR加20(CD'=20),然後計算出目標DR總值:DR=armDR+amDRM+CD'
为什么高难度反而是减目标护甲DR而不是反过来,这样高难度下伤害不是变高了嘛?

如果想微调Glovz_Fix2弹药效果.是不是修改DR修正值比修改弹药X值Y值更好?
 楼主| 发表于 2018-12-18 09:24:07 | 显示全部楼层
ktmd 发表于 2018-12-18 08:09
Glovz伤害计算版本是跟着sfall的版本走的嘛?sfall4.0.6是v5还是要独立安装?

Glovz伤害计算版本的第8步.
...

1. Glovz傷害計算一直是包在sfall內,ini內的設定打開就有了。
2. 高難度減DR同時也適用在NPC攻擊玩家的狀況,等於大家都更容易死,和一些遊戲的設定類似。
3. 對。
发表于 2023-9-17 01:17:28 | 显示全部楼层
@novarain

我最近在对比NMA上的几个对damage formular 的各种尝试修复/改进, 结果才发现我一直以来是不是在玩RP 和 RPU的时候没有真正安装好YAAM或者Glovz
我的问题是,我一直有以为在安装的和时候选择,或者后来在ini里面选择用哪个formular就好了.而这些mod附带的弹药proto的修改参数是自动安装了,根据选择. 现在才发现原来这些mod自带的弹药修改是需要自己下载然后覆盖阿? 也就是以前我选择什么公式的话, 只是公式运用了,但是弹药参数什么的还是vanilla. 要想完全发挥这些mod的设计,安装RPU后我不但需要选择那个公式, 还要额外下载那个mod的文件去覆盖是吧?
发表于 2023-9-17 04:16:13 | 显示全部楼层
没关系 我已经重新自己看了RPU v27, 看到这些mod的int文件和ini文件都是带了的,所以我上面的担心是多余了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Archiver|13号避难所

GMT+8, 2024-4-16 19:48 , Processed in 0.077831 second(s), 15 queries .

快速评论 返回顶部 返回列表