[原创]MHR护石系统的一种可能解释
咸鱼老猎人自知技术不过硬,本身对刷极限护石得极限配装没有太大兴趣,不过最近也看了一些护石、痛风相关的讨论,突然想到了一种对现在MHR护石伪随机系统的一个看起来比较合理的解释,以及对月底更新以后可能出现的情况做一个简单预测,如果早就有人提出了同样的看法那就权当我火星了
首先我们来总结一下目前发现的护石表的特点:
1,很多猎人发现自己在痛风表里面不断循环
2,一张表前面可以有不同的分支,都有可能进入同一张表
3,有一定概率从一张表“跳”到另一张表,且已经摸索出了部分表确定的下一张表
4,不同表的大小并不相同
5,也有很多人发现自己刷的护石都不在目前总结的内容中
看到这里我第一反应就是很奇怪,卡普空怎么会有鬼才设计出这么复杂的一套伪随机系统来生成护石?因为用伪随机是很好理解的,但是搞得这么复杂且不稳定显然违背了程序设计的基本原则而且毫无意义。但结合一些从洋流、大气相关科普视频得到的灵感,我找到了一个可以解释目前这个护石伪随机系统的简单理论。
本人并非数学/计算机专业学生,在解释过程中可能会有专业名词的误用,还请大佬指正。
首先从目前已知的信息结合伪随机设计的初衷,我们可以得出以下基本原则:
a, 当刷出一个确定的护石,则下一个护石一定是唯一确定的;(不然就还要在游戏流程内引入随机性,伪随机的设计前功尽弃)
b, 护石一定是可以无限生成的,可能会循环但不可能出现没有下一个护石的情况
c, 两个不同护石的下一个可以指向同一个护石(由上述特点1+3可知)
那么根据这几个原则,我们就可以假设:
一、 在游戏发售的时刻,所有玩家并非在创建存档的时候随机到一张一维的护石表,而是共享一张二维(或更高)的护石表。这张表可能非常庞大,我没有仔细考察现有数据所以也估计不出这张总表的数量级。
二、 每一个护石都是表上的一个点,同时有一个向量指向接下来会出的下一个护石。
三、 该表可能没有边界(并不是无限大,想象地球表面),也可能有边界但边界处的所有护石都指向表内(由原则b可知)
四、 每个玩家创建存档的时候,并非从数张随机的表中选取一张,而是在这张总表上随机一个起点,之后出护石的顺序便不再变化
这么说可能太抽象了,我来举一个简单的例子:这是一张3x4的有边界的符合上述假设的表:

那么这么一个理论可以解决什么问题呢?
首先,它足够简洁。卡普空只需要在游戏发售之前制作一张护石表,无论这张表本身有多复杂,都不需要后续任何其他操作,它以相同的形态放在所有玩家的游戏数据里就可以了。而给每个存档随机一个起点的操作显然比随机一张表然后再考虑从一张表跳到另一张表要方便许多。
其次,它满足伪随机的要求。不在游戏过程中引入随机性,这点的考虑很多大佬已经分析过了,就是1.减少运算成本,2.防止玩家花大量时间琢磨如何通过物理SL改变护石结果,而不去刷怪。(虽然我就是要暴力地延长你的游戏时间,但你也必须要用我希望的方式(反复刷怪)去得到护石,不要动歪脑筋)
而且,它完美地解释了循环的产生。在满足以上所有基本原则的前提下画出的任何一张表(无论是二维的还是多维的,无论有没有边界)最后一定会产生至少一个由有限个元素组成的循环。(这个理论不是我提出的,但叫什么我不记得了)如果不信,可以去自己尝试一下,然后检查一下:是否每个点都唯一指向下一个点?是否存在指向表外的点?
那么,几个衍生结论:
1, 那些可以“跳出”的表,并不是真正的循环,而是在总表上一些很多分支都会进入的“主干线”,因为出现频率高而被记录了下来。真正的循环如痛风表都是无法跳出的。
2, 因为总表的规模未知,所以短时间内不太可能把完整的总表统计出来,因为很可能有很多玩家“出生”在表上很偏远或小众的分支上,这部分数据几乎无法统计。(当然目前大佬的工作已经总结出了这张总表主干线上的大致样貌,这部分工作是大家的共同努力的结果,是十分可敬的)
3, 如果卡普空在接下来的更新中不修改这个伪随机产生的整体机制,而只是重新随机了这张表上的向量,或者重新随机了表上所有的护石,类似的“痛风”表都会永远存在,这是这个机制本身无法避免的。(而我虽然希望,但不太相信卡普空会为了修改这个bug就重写护石系统的底层逻辑)在这种情况下,我们只能祈祷新表的每一个循环中都存在痛2S2的护石了。
4, (接上条)有人可能会幻想在这样一张总表上出现无限不循环的护石顺序,很遗憾,这是不可能的,具体原因就在于原则a,可以自己画两张简单的表尝试一下
【本文为原创,NGA上是我委托同学帮忙发的】