13号避难所

 找回密码
 立即注册
搜索
查看: 1838|回复: 3
打印 上一主题 下一主题

FO2世界地圖移動速度和隨機遭遇的運作

[复制链接]
跳转到指定楼层
楼主
发表于 2017-1-11 00:47:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
這幾天在測試原本在sfall內被半隱藏掉的WorldMapEncounterFix/Rate選項(必須要WorldMapFPSPatch=0才有作用),就翻了一下NMA過去討論。
FO2的世界地圖移動速度和CPU速度直接相關,所以後來在較新的電腦上才會變成移動起來像飛一樣快。至於隨機遭遇的判定和“上一次遭遇”有關,碰到隨機遭遇的當下時間會存在一個變數內,在世界地圖移動時,遊戲會不斷檢查現在時間和上一次的時間差距,如果差距值在1500毫秒(1.5秒)之內就不會進行隨機遭遇檢查,反之則開始擲骰做機率檢定。於是移動速度愈快,觸發檢查的次數愈少,當然碰到的隨機遭遇就更少了。

Timeslip一開始是參考Fallout 2 Patcher的功能,用WorldMapDelay在每次畫面更新之間加上延遲,後來是用WorldMapFPS來限制在世界地圖移動時的畫面更新率以藉此拖慢移動速度。
之後TeamX的Ray則提供WorldMapEncounterFix的源碼,機制是把原本遊戲進行隨機遭遇檢查的方式從:
  1. int time;

  2. worldmap_loop() {
  3.     draw_map(); // 這函式裡面會把TimeGetTime的值寫到time變數內
  4.     while (moving) {
  5.         ....
  6.         // 世界地圖移動的部份
  7.         spacial_encounter();
  8.     }
  9.     ....
  10. }

  11. spacial_encounter() {
  12.     if ((TimeGetTime() - time) > 1500) {
  13.         time = TimeGetTime();
  14.         // 檢查隨機遭遇機率和其他操作
  15.         ....
  16.     }
  17. }
复制代码

變成:
  1. int time;
  2. int loop = 0;

  3. worldmap_loop() {
  4.     draw_map(); // 這函式裡面會把TimeGetTime的值寫到time變數內
  5.     while (moving) {
  6.         loop++;
  7.         ....
  8.         // 世界地圖移動的部份
  9.         spacial_encounter();
  10.     }
  11.     ....
  12. }

  13. spacial_encounter() {
  14.     if (loop > 5) {
  15.         loop = 0;
  16.         // 檢查隨機遭遇機率和其他操作
  17.         ....
  18.     }
  19. }
复制代码

簡單來說就是把隨機遭遇檢查和遊戲時間脫勾,直接看在背景跑的世界地圖運作迴圈到底跑了幾次來決定檢查與否。
5的數值是Ray用舊電腦上的速度估算1500毫秒差不多背景運作迴圈會跑五次,再來才加上WorldMapEncounterRate項目讓使用者自訂數值,數值愈高隨機遭遇檢查頻率愈低。

最後他直接把一代這部份的源碼挖過來(一代沒有移動速度變快的問題)才有WorldMapFPSPatch和WorldMapDelay2設定,大概看了一下是在不同地方插進一個用時間間隔(默認66)做每步移動之間的緩衝,把移動速度和遊戲時間綁在一起。
也因為這樣,WorldMapFPS、WorldMapEncounterFix/Rate、WorldMapDelay等舊設定相對來說就顯得過時且多餘了,這些設定就被改成只有WorldMapFPSPatch關閉時才會生效。

不過實際上WorldMapEncounterFix/Rate就算單獨拉出來,配合WorldMapFPSPatch也一樣有作用(修改的內存位址和運作都沒干涉到),所以我把它們重新移回sfall正式設定內,之後的3.8.2就可以讓玩家自行調整隨機遭遇頻率了。
沙发
发表于 2017-1-11 09:27:06 | 只看该作者
厉害,遇敌太少也不好玩
板凳
发表于 2017-1-11 11:31:00 | 只看该作者
以前我都要开变速齿轮或者每次点一点点距离,这样才能更多遭遇
地板
发表于 2017-1-16 16:21:41 | 只看该作者
casnalada 发表于 2017-1-11 11:31
以前我都要开变速齿轮或者每次点一点点距离,这样才能更多遭遇

哈哈,就是啊,每次都一厘米一厘米的点,点到目标城镇还没遇敌,就Load再来一次……

尤其武器威猛、弹药充足、人多势众之后,走大地图不打几波,真是感觉不过瘾。最爽就是三藩市去纳瓦罗来回,不刷个八九批英克雷小队、死亡爪、外星人、多脚兽、浮游特之类,都感觉白跑了……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-25 21:24 , Processed in 0.047733 second(s), 13 queries .

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