【Noita探秘】如何掏出一把加特林大杀四方?

从游戏代码和实验数据深入剖析Noita的法杖秘密,链锯机枪流派达成!!!“哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒”

传送门:不想看过程的可以自行跳到 第4点-初步结论
1法杖基础机制
想要知道这个问题的答案,我们就得了解法杖施法间隔的构成,
施法间隔分为:施放延迟和充能时间两个部分,
施放延迟:法杖每次施法后所需要等待的时间,相当于开枪后“呯”“呯”两枪之间的时间差
充能时间:法杖所有法术施放后下一轮需要等待的时间,相当于打完全部子弹后的换弹时间

以初始法杖为例,初始法杖本身有0.17秒的施法延迟和0.40秒的充能时间,看起来好像施法间隔等于两者之和,其实不然。因为法术本身也有施放延迟!!

还是以初始法杖为例。初始法杖里带了两个火花弹,每个火花弹有0.05秒的施法延迟。因为这不是乱序杖,所以法杖内的法术按顺序施放。
“开枪总时间=第一枪时间+第二枪时间+换弹时间”
所以
总施法间隔
=(法杖施放延迟+火花弹1号施放延迟) + (法杖施放延迟+火花弹2号施放延迟) + 总充能时间
= (0.17s+0.05s) + (0.17s+0.05s) + 0.40s
= 0.84s
经由评论区Turfia提醒,特此勘误:
充能时间会在法杖内所有法术施放完时立即开始结算,而不等最后一发法术的施放延迟。
因为法杖施放延迟+火花弹2号施放延迟=0.17+0.05=0.22s<总充能时间0.4s
两者在施放完第二发火花弹后同时开始结算
所以在充能时间走完之前第二发火花弹的施放延迟已经结算完成了
∴总施法间隔
=(法杖施放延迟+火花弹1号施放延迟)+总充能时间
= (0.17s+0.05s) + 0.40s
=0.62s
每秒只能打一点几发,充其量只是一把小手枪,远远达不到我们法术加特林的标准。
射速(每秒攻击次数)= 1÷总施法间隔
所以要想达成法术加特林,这个总施法间隔必须足够小。
2方法探究和代码分析
那么有没有什么办法能减小这个数值呢?
此时就要介绍一下Noita中bug般的存在:链锯

看起来似乎很不起眼,只不过让充能时间减少0.17秒罢了。
只看纸面数据的话还比不上水滴,不光减充能0.17秒还减施放延迟0.25,更何况链锯还有散射+3度的负面属性。

那为什么还说链锯是bug呢?让我们先来看个例子

按理说这是把垃圾的不能再垃圾的杖,虽然别的属性还不错,可施放延迟达到了惊人的6.67秒,我想你应该不会想要一把开一枪等6秒才能开第二枪的老爷枪,但是法术配好的效果却令人意外。

可以看到火花弹密集的射出形成了光柱,这正是我们想要的法术机枪!!
为什么会这样呢?
我们深挖背后的实现代码就会发现链锯的bug之处。

注意看其中这条

这条语句的意思是将当前施放延迟设置为0,
(等一下,制作组,纸面数据只有减0.17秒充能时间啊喂!!哪冒出来的施放延迟置0??)
对比水滴的减15单位时间施放延迟(1单位≈0.017s)可是强太多了

从代码来看只要我们 ”合理使用”链锯的话,就能达到让施放延迟为0的目的!!!!
3 实验分析
接着我们来看如何”合理使用”链锯。

经过多组对照实验可以得到一个初步结论
4初步结论和公式
1.法杖的法术要以链锯结尾
(为了让法杖的本身的施放延迟被至0)
2.法术需要和链锯组成多重施法包且以链锯结尾。
(由于法术本身的施放延迟也会影响施法间隔)
3. 施放延迟多少关系不大,但充能时间一定要尽可能达到0
(链锯可以将施放延迟归0)
4.链锯数量会影响法术机枪攻速,越多攻速越低
(推测可能是因为法术本身有个最小施法延迟1帧即1个单位时间≈0.017s)
目前还未挖掘到官方ACTION_DRAW_RELOAD_TIME_INCREASE的函数实现,所以还不能下最终结论,如有新发现会继续更新。


目前得到的法术机枪公式:
多重施法(投射物+链锯结尾)+ N个减充能且无延迟法术 + 链锯结尾

补充说明1:其中减充能法术的数量由法杖和法术的总充能时间决定,直接进行加法计算,需要将总充能时间减至0或者0以下
补充说明2:初步结论中有一条很重要,链锯数量会影响法术机枪攻速,越多攻速越低。
解决办法就是多加几个多重(多重施法,多重散射均可)嵌套,使整个法术链变成一个法术包
补充说明3:公式中 【N个减充能法术】部分不一定是链锯,目的就是为了达到0充能时间,但是多重里的链锯和结尾链锯不可替换。

新更新公式:
A(可选)+ B(可多选)+【C+D(可多选)+链锯】+ 链锯+ E(可选)
条件:①非乱序杖 ②总充能时间尽可能小,施放延迟不用管
说明:
A 提升法力
机枪杖很容易缺蓝,如果缺蓝可在前面加上“提升法力”修正,非必须

B 多重施放


C 非静态投射物


D 减少“充能时间”法术

根据需要增加个数以让充能时间总和小于等于0

E 投射修正或被动
可以让射速翻倍,非必须

举个例子:
我现在手上有一根非乱序杖想组成机枪杖,该如何配呢

可以看到魔杖的充能时间为0.68,所以需要有多个减充能法术将总充能减至0或0以下
所以一个可行的配法是:

2B(多重施放) + 【C(火花弹) + 2D(减充能法术) + 链锯 】+ 链锯 + E(火把)
充能时间=0.68(魔杖) -0.17(链锯) -0.17(水滴) -0.17(链锯) -0.17(链锯) =0
满足总充能时间≤0的条件

鸣谢
感谢Nolla官方制作了这款游戏并开放mod接口
特别感谢ZJoep提供的代码数据挖掘
感谢 ZJoep和Kid在贴吧交流群里提出的建议和指导

黑羽拔毛群212270866 欢迎各位大佬进来拔毛~
业务范围:粉丝催更,游戏交流,翻译汉化,mod制作,艺术绘图,八卦闲聊等