警告
再次强调使用此方法会严重破坏游戏体验
再次强调本指南只是为了让那些无法完成最后剧情/已经被鮟鱇鱼劝退 的玩家也能体验到最后的结局
修改游戏代码自然有一定风险,虽然从代码上并没看到有检测,也没有带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:很可惜,是直接凭空消失,没有特效,没有爆炸,因为只是代码开源不是工程开源,无法只使用代码来做特效
更新2:让dlc的鹿角人消失
(就算让鹿哥消失了,但依旧因为太黑各种迷路)
找到类名为GhostBrain中的Start方法,直接在里面添加下面代码就好了,如图
base.gameObject.SetActive(false);
注意,我并未在修改代码后测试DLC的结局与本体的结局是否会同样被影响,希望能得到反馈
更新3:获得成就
这一章节面对的人群是: 手残完成不了高难成就,但又想全收集,但又怕使用SAM这种第三方软件导致某些问题
没有买dlc但又想拿全成就(未验证,理论可行)不过这里还是要强烈推荐DLC
依旧同上面一样,dnspy反编译,找到Achievements类,里面有个叫Type的枚举变量,这些值对应的就是成就名,如图,这里的作用就是你要达成什么成就,你就得先知道你要达成那个成就在代码里对应的名字
达成成就的代码是(下面用的是 “你们永远无法活捉我!” 举例)
Achievements.Earn(Achievements.Type.TAKEMEALIVE);我们只需要修改 Achievements.Type.成就名 ,就行了
把这一行代码,随便放到一个好达成的地方就好了,这里可以考虑放到60s之内死亡的那个成就达成条件下
在DeathManager这个类中,KillPlayer方法下(没动过的话是115行)
右键编辑方法,如图极速60s 下面两行就是加的
要什么就加什么,然后进游戏,去把极速60s再达成一次,你加的成就就会跳了(直接开局火堆送死)
后话
如有不适,我会将此指南删除,纯粹只是因为看着室友玩的可太艰难了,甚至要把手柄给砸了,相信有不少玩家因为鮟鱇鱼才没有体验到最后的结局,所以有写此指南的想法
如有什么问题请在留言版提出,我看到会及时回复
最后联动本人关于此游戏的另两篇指南https://steamcommunity.com/sharedfiles/filedetails/?id=2146683126
https://steamcommunity.com/sharedfiles/filedetails/?id=2622475579
Source: https://steamcommunity.com/sharedfiles/filedetails/?id=2340011757
More Outer Wilds guilds
- All Guilds
- How to not cry
- Outer Wild - Echo of the Eyes : Rsum de la progression dans le DLC
- Echoes of the Eye
- Achievement guide for Outer Wilds - Echoes of the Eye
- Cmo hacer para que los FPS se vean fluidos (pantallas de 60HZ, 144HZ o ms)
- "Ghosts in the Machine" Achievement Guide - Echoes of the Eye
- Outer Wilds Recommended Requirements 2021
- Outer Wilds - Points of Interest (Dark Bramble)
- Outer Wilds - Breaching Giant's Deep Guide