13号避难所

标题: FO2資料載入的優先順序 [打印本页]

作者: novarain    时间: 2016-10-3 00:40
标题: FO2資料載入的優先順序
最近幾天在更新sfall源碼時看其他人提到的,fallout2.cfg內有critter_dat、critter_patches、master_dat、master_patches四項指定遊戲.DAT檔與相對應補丁的路徑設定;而啟用高分辨率補丁之後,f2_res.ini內也有f2_res_dat與f2_res_patches的路徑設定。
另外在不使用sfall的NumberPatchLoop設定情況下,遊戲默認只會找patch###.dat之中數字最低的一個(數值最高到998)載入。

今天假設有patch###.dat,不使用sfall的NumberPatchLoop,遊戲有套用高分辨率補丁,對遊戲引擎來說,資料載入的優先順序為:
patch###.dat -> critter_patches -> critter_dat -> f2_res_patches -> f2_res_dat -> master_patches -> master_dat

優先順序的意思是,如果有在各路徑/各DAT檔內都有一份同樣檔名但不同內容的檔案,在順序高的會覆蓋順序低的。
這順序邏輯明顯有些問題,或是該說和一般人想的情況不同,理論上在外部文件夾的零散檔案(critter_patches與master_patches指定的文件夾,絕大多數情況就是Data)應該都要比打包的.DAT檔案內容優先,但實際順位卻是混雜在一起的。

有人提議sfall該把順序改成:
master_patches -> critter_patches -> patch###.dat -> critter_dat -> f2_res_patches -> f2_res_dat -> master_dat(高分辨率補丁的順序部份無法干涉,因為沒有它的源碼)


作者: novarain    时间: 2016-10-4 23:17
在不啟用sfall相關設定的情況下測試了patch###.dat的載入部份,發現兩件奇妙的事:

當初負責寫這部份源碼的設計者不是思考方式與常人不同就是其他人有特別要求,再不然就是根本寫錯了。
雖然就現實情況來看他們也只有用過patch000.dat,等於上面那些限制其實沒啥實質影響就是了....

啟用sfall的NumberPatchLoop之後,就是照數值順序載入多個patch###.dat檔,內容有相同檔案的情況下,數值大的會覆蓋前面較小的。
目前想法是把NumberPatchLoop改寫成一個簡單開關,不再是設定一個上限值給遊戲檢查範圍。一方面是引擎內部其實就已經檢查到999,已經很夠了,雖然目前的NumberPatchLoop可以設定到更大範圍,但老實說誰會用到什麼patch9999.dat的情況?
再不然就是直接強制啟用sfall的多重載入,因為引擎默認的載入邏輯實在很詭異。
作者: casnalada    时间: 2016-10-5 07:53
这听起来和杯赛的MOD载入是一条心啊
不过杯赛限制255个,似乎认为超过会崩
作者: novarain    时间: 2016-10-5 10:29
那種把文件夾內的包裝檔案載入方式本來就行之有年啦,我自己摸過的遊戲從Quake一代開始就是自動載入所有的pak#.pak,新的補丁只要把數字一直拉高就好,一些mod或map pack也是打包成pak檔在說明內加註記得改數字。
Bethesda限制255是因為index值最高就只到FF,他們大概認為誰會一次載入超過兩百五十幾個esp....雖然很明顯的他們低估了玩家的偷懶或創作欲XD
作者: casnalada    时间: 2016-10-6 17:17
辐射1和2的载入MOD我印象里不是这么用的……非常奇怪,不是覆盖,就是跳过主DAT
255限制倒是不怕……因为吾等绅士可以合并esp……





欢迎光临 13号避难所 (https://bn13.net/) Powered by Discuz! X3.2