13号避难所

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

掃射攻擊與屍體的影響

[复制链接]
跳转到指定楼层
楼主
发表于 2015-2-26 21:54:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
因為前些時候有人在NMA上提了個很妙的問題,自己實際測試一下才發現sfall的CorpseLineOfFireFix選項(讓屍體不會擋下掃射攻擊時的子彈)實際上沒用....

在FO2中,地上的屍體在進行掃射攻擊時會被子彈群組視為有效目標,因為掃射攻擊所呼叫的函式shoot_along_path(子彈群組沿路找可命中目標)並不會檢查找到的目標是否死亡。只有在遠程攻擊沒命中時才會檢查流彈找到的其他目標狀態,如果目標已死,就會把原來計算出來的命中率用5%取代。

sfall的CorpseLineOfFireFix選項有1和2兩種模式,1是在shoot_along_path函式中插入檢查目標是否死亡的判定(就命中率以5%取代的那個),2則是把那個5%代換成0%,不過由於sfall自己的ToHit hook(一個在命中率全部計算完後才會呼叫的特別腳本)相關程序也對同一個內存位址進行操作,變成CorpseLineOfFireFix的效果被它蓋掉了,現有的解法是利用ToHit hook寫個簡單的腳本取代遊戲回傳屍體的命中率為0(或是看你想設多少):
  1. // hs_tohit.ssl
  2. procedure start;

  3. procedure start begin
  4.     variable target;
  5.     if not init_hook then begin
  6.         target:=get_sfall_arg;
  7.         target:=get_sfall_arg;
  8.         target:=get_sfall_arg;
  9.         if (critter_state(target) bwand 1) then begin // is_critter_dead in define.h
  10.             set_sfall_return(0);
  11.         end
  12.     end
  13. end
复制代码

這樣子彈群組就會略過屍體找下一個目標,但這方法只能解決屍體位於攻擊者與被攻擊者之間時的阻擋問題,要是被攻擊者站在和屍體同一格上,子彈仍舊會被屍體吸掉一部份。

至於CorpseLineOfFireFix本身源碼是正確的,但就算它正常運作(我把ToHit hook部份註解掉再重新編譯sfall來測試),還是和上面用ToHit hook殘留的問題一樣:若被攻擊者站在和屍體同一格上就會擋掉一部份子彈。目前和維護sfall的俄國佬討論結果是該部份得用不同角度去重寫才有可能解決問題,像是把屍體視為不阻擋射擊線的物件,在一開始找目標時就直接排除掉,而不是現在這種置換對屍體命中率的方式。
沙发
发表于 2015-2-26 22:54:42 | 只看该作者
本帖最后由 白熊1 于 2015-2-26 23:00 编辑

同一个格子上要叠放多少尸体才会达到无视子弹的境界?

好吧,这只是随便一想.....哪里有可以随身携带的尸体呢?
板凳
 楼主| 发表于 2015-2-26 23:06:17 | 只看该作者
白熊1 发表于 2015-2-26 22:54
同一个格子上要叠放多少尸体才会达到无视子弹的境界?

好吧,这只是随便一想.....哪里有可以随身携带的 ...

疊幾具都是擋下一樣的比例,我自己試過連續殺了三個人在同一格上,到第四個人他還是挨一樣多的子彈。
地板
发表于 2015-2-27 08:38:58 | 只看该作者
从来都只相信距离才是安全的人表示很少跟敌人见面更别说尸体了
5#
发表于 2015-2-28 19:50:10 | 只看该作者
高大上的问题啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-28 19:17 , Processed in 0.059170 second(s), 13 queries .

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