13号避难所
标题:
FO2世界地圖移動速度和隨機遭遇的運作
[打印本页]
作者:
novarain
时间:
2017-1-11 00:47
标题:
FO2世界地圖移動速度和隨機遭遇的運作
這幾天在測試原本在sfall內被半隱藏掉的WorldMapEncounterFix/Rate選項(必須要WorldMapFPSPatch=0才有作用),就翻了一下NMA過去討論。
FO2的世界地圖移動速度和CPU速度直接相關,所以後來在較新的電腦上才會變成移動起來像飛一樣快。至於隨機遭遇的判定和“上一次遭遇”有關,碰到隨機遭遇的當下時間會存在一個變數內,在世界地圖移動時,遊戲會不斷檢查現在時間和上一次的時間差距,如果差距值在1500毫秒(1.5秒)之內就不會進行隨機遭遇檢查,反之則開始擲骰做機率檢定。於是移動速度愈快,觸發檢查的次數愈少,當然碰到的隨機遭遇就更少了。
Timeslip一開始是參考Fallout 2 Patcher的功能,用WorldMapDelay在每次畫面更新之間加上延遲,後來是用WorldMapFPS來限制在世界地圖移動時的畫面更新率以藉此拖慢移動速度。
之後TeamX的Ray則提供WorldMapEncounterFix的源碼,機制是把原本遊戲進行隨機遭遇檢查的方式從:
int time;
worldmap_loop() {
draw_map(); // 這函式裡面會把TimeGetTime的值寫到time變數內
while (moving) {
....
// 世界地圖移動的部份
spacial_encounter();
}
....
}
spacial_encounter() {
if ((TimeGetTime() - time) > 1500) {
time = TimeGetTime();
// 檢查隨機遭遇機率和其他操作
....
}
}
复制代码
變成:
int time;
int loop = 0;
worldmap_loop() {
draw_map(); // 這函式裡面會把TimeGetTime的值寫到time變數內
while (moving) {
loop++;
....
// 世界地圖移動的部份
spacial_encounter();
}
....
}
spacial_encounter() {
if (loop > 5) {
loop = 0;
// 檢查隨機遭遇機率和其他操作
....
}
}
复制代码
簡單來說就是把隨機遭遇檢查和遊戲時間脫勾,直接看在背景跑的世界地圖運作迴圈到底跑了幾次來決定檢查與否。
5的數值是Ray用舊電腦上的速度估算1500毫秒差不多背景運作迴圈會跑五次,再來才加上WorldMapEncounterRate項目讓使用者自訂數值,數值愈高隨機遭遇檢查頻率愈低。
最後他直接把一代這部份的源碼挖過來(一代沒有移動速度變快的問題)才有WorldMapFPSPatch和WorldMapDelay2設定,大概看了一下是在不同地方插進一個用時間間隔(默認66)做每步移動之間的緩衝,把移動速度和遊戲時間綁在一起。
也因為這樣,WorldMapFPS、WorldMapEncounterFix/Rate、WorldMapDelay等舊設定相對來說就顯得過時且多餘了,這些設定就被改成只有WorldMapFPSPatch關閉時才會生效。
不過實際上WorldMapEncounterFix/Rate就算單獨拉出來,配合WorldMapFPSPatch也一樣有作用(修改的內存位址和運作都沒干涉到),所以我把它們重新移回sfall正式設定內,之後的3.8.2就可以讓玩家自行調整隨機遭遇頻率了。
作者:
delete1204
时间:
2017-1-11 09:27
厉害,遇敌太少也不好玩
作者:
casnalada
时间:
2017-1-11 11:31
以前我都要开变速齿轮或者每次点一点点距离,这样才能更多遭遇
作者:
the_one
时间:
2017-1-16 16:21
casnalada 发表于 2017-1-11 11:31
以前我都要开变速齿轮或者每次点一点点距离,这样才能更多遭遇
哈哈,就是啊,每次都一厘米一厘米的点,点到目标城镇还没遇敌,就Load再来一次……
尤其武器威猛、弹药充足、人多势众之后,走大地图不打几波,真是感觉不过瘾。最爽就是三藩市去纳瓦罗来回,不刷个八九批英克雷小队、死亡爪、外星人、多脚兽、浮游特之类,都感觉白跑了……
欢迎光临 13号避难所 (https://bn13.net/)
Powered by Discuz! X3.2