Outer Wilds

Outer Wilds

Not enough ratings
【邪道】强制让鮟鱇鱼静止不动/灭绝
By ✨Karen✨
警告:使用此方法会严重破坏游戏体验
此方法只是为了让那些无法完成最后剧情/已经被鮟鱇鱼劝退 的玩家也能体验到最后的结局(毕竟云结局还是没有自己玩快乐)
   
Award
Favorite
Favorited
Unfavorite
警告
  • 再次强调使用此方法会严重破坏游戏体验
  • 再次强调本指南只是为了让那些无法完成最后剧情/已经被鮟鱇鱼劝退 的玩家也能体验到最后的结局
  • 修改游戏代码自然有一定风险,虽然从代码上并没看到有检测,也没有带VAC封禁,但作者无法保证100%的安全性,如发生封禁的意外,本人免责
前言
写在最前面
通过“验证游戏完整性”便可恢复修改之前的样子
本来是打算写鮟鱇鱼听到声响便反向游动,但因为这个玩法依旧有概率会碰到玩家而造成死亡,所以干脆写最保险的:强制让鮟鱇鱼静止不动
这里使用的工具是最常用的反编译软件之一:dnSpy
思路
玩过Unity的都知道,基本游戏使用的C#脚本都被编译到了Assembly-CSharp.dll,因为本游戏没有进行其他加密,只有个unity自带的Momo,所以我们可以直接使用dnSpy进行反编译,找到下图的文件夹下的Assembly-CSharp.dll文件,使用dnSpy进行打开,打开后左侧列表如图二


可以看到,每个类名的作用就是标题,这分类写的,tql
我们找到AnglerfishController这个类,直译就是鮟鱇鱼控制器,我们主要要修改的就是这个类中的代码,这里先讲讲为什么这么改,怎么改在下一节
我们在这个类里能看到如图一个叫AnglerState的枚举类型,从名字就知道是控制安康鱼的状态,其中有5种状态,分别是Lurking(潜伏),Investigating(调查),Chasing(追捕),Consuming(消化),Stunned(发呆)

再根据官方的介绍,鮟鱇鱼是瞎子,但声音很灵敏,此时可以猜想到是不是给人物和飞船绑了个音源,然后通过音源传播的范围等等来判断玩家位置和是否切换状态
果然我们能够在这个类里找到一个方法叫OnClosestAudibleNoise,这就是我们要修改的。
但这还没完!!
unity里有一个方法叫FixedUpdate,一般默认情况是0.02秒执行一次,我们从代码里看到里面放了2个方法,一个叫UpdateState(更新状态)一个叫UpdateMovement(更新位置)

我们所要做的当然是修改UpdateState里的代码
看起来思路这么长,其实要改动的代码就4行
操作
  • 用dnSpy打开Assembly-CSharp.dll,并找到AnglerfishController这个类,不知道在哪的可以看看上一节《思路》里的图
  • 找到OnClosestAudibleNoise这个方法中的this.ChangeState开头的这一行(原本的347行),右键“编辑类”,如图操作,

    更改“编辑类”窗口的352行和362行划横线的地方,改成“Stunned”(这里就是改鮟鱇鱼听到声音切换状态)如图:

    改完后找到193和196行,依旧是划横线地方改成“Stunned”(这里就是改fixedUpdate里的实时更新的状态)
    找不到的可以先找到UpdateState这个类,往下找到case AnglerfishController.AnglerState.Stunned:再下面找到两行this.ChangeState开头的,如图位置

    然后点击编译
  • 此时如果跳如下图所示的错误

    双击错误定位过去,应该是[DebuggerBrowsable(DebuggerBrowsableState.Never)]这样的代码,删掉就好了,一共有4个来着
  • 最后 文件-全部保存-确定 就好了
更新1:让鮟鱇鱼灭绝
因为留言有老哥说即使静止不动都有可能撞上去,那么就根本上解决问题,那就是直接让鮟鱇鱼灭绝
我们依旧找到AnglerfishController这个类,找到应该是第60行,也就是Start方法
#Start方法只在脚本实例被启用时才会执行
在其中直接添加 base.gameObject.SetActive(false); 即可,也就是把游戏对象关闭,因为保险我把下面那个设置状态也删了(多此一举罢了)最终效果图如下:

如果有报错就把那一行删掉便可了
更新1(改):手动让鮟鱇鱼灭绝
如果开始就杀会不会感觉毫无乐趣?不如在将要被吃掉的时候按下按键再让其消失
我写的是按下M键,因为最好不要和默认按键冲突
依旧和更新1里所要写的那样,只不过我们需要做的就是额外设置个按键,当监听到我们按下那个按键就把鮟鱇鱼这个gameobject设置为关闭
注意:我们要改的地方是在FixedUpdate这个方法里(为什么?请去看思路那一节,顺带一提,start方法只会运行一次,所以我们不改在那)还有这个更新1(改)所做的和更新1有所相同,所以记得先还原代码再改动
代码如下:
if (global::Input.GetKeyDown(KeyCode.M)) { base.gameObject.SetActive(false); }
最终样子如图:

PS1:写的是全部消失,也就是按下去瞬间让所有鮟鱇鱼消失,如果你想写单个的,这里提供一个思路,就是判断鮟鱇鱼的状态是否为Chasing,在这个里面写按键消失
PS2:很可惜,是直接凭空消失,没有特效,没有爆炸,因为只是代码开源不是工程开源,无法只使用代码来做特效
后话
如有不适,我会将此指南删除,纯粹只是因为看着室友玩的可太艰难了,甚至要把手柄给砸了,相信有不少玩家因为鮟鱇鱼才没有体验到最后的结局,所以有写此指南的想法
如有什么问题请在留言版提出,我看到会及时回复
最后联动本人关于此游戏的另一篇指南
https://steamcommunity.com/sharedfiles/filedetails/?id=2146683126
< >
6 Comments
張禕崢 Mar 27 @ 7:40am 
鮟康鱼那么可爱,为什么要让鮟康鱼灭绝
Slan Ki Feb 16 @ 8:10pm 
其实只要好好探索其他地方就能知道黑棘星怎么过的,这方法算是破坏了原本游戏的核心体验(探索解密),想要好好体验游戏的还是尽量别用:WhiteWolfInterset:
思无邪 Jan 26 @ 5:06pm 
:meng1::meng0:
gyxxgzy Jan 15 @ 12:55am 
好家伙,这个绝了,我直接好家伙
✨Karen✨  [author] Jan 12 @ 4:26am 
静止后只能说大幅度减少难度,所以我干脆更新了让鮟鱇鱼直接消失,这样就根本性解决问题了吧:lunar2019crylaughingpig:
三千院言叶 Jan 10 @ 5:55am 
我每次一进黑棘星就撞鮟鱇鱼,根本没有操作空间。