缺氧DLC1甜素甲虫变异机制数据详解

缺氧的DLC中新增了生物甜素甲虫,这种生物本身存在着变异的机制,但变异的几率许多玩家不是很了解。那么它有多大概率产生变异呢?今天小编为大家带来了由“234xdd”分享的缺氧DLC1甜素甲虫变异机制数据详解,希望对大家有所帮助。

简化版总结

太长不看版,甜素甲虫产虫果果虫卵的概率为随照料虫果类植物的次数增加而增加,直至趋近于100%,而甜素甲虫每周期可以照料7棵左右的作物。

因此,大约可以在全效照

料4周期以后达到50%,7周期后达到70%,10周期后达到80%。如适用虫果果虫产卵,猜测除初始值变更为33%以外变异机制与甜素甲虫一致。

理论计算公式在概率不足98%时为a_n = 1 - (1 - a_0)*(1 + x)^(-n),超过98%时增长会更慢。其中n表示照料虫果类植物的次数,a表示产下果虫卵的概率,a_0表示初始概率2%。x表示变异率2.5%。

代码分析

首先找到甜素甲虫的文件 DivergentBeetleConfig。

找到 EntityTemplates.ExtendEntityToFertileCreature()(这一行定义了动物的生殖行为,所以海牛和章鱼应该时没这一行的)。

找到其中定义产卵概率的参数 DivergentTuning.EGG_CHANCES_BEETLE,所以我们转战 DivergentTuning 文件。

其实到这里乍一看就无计可施了,因为 EGG_CHANCES_BEETLE 只定义了 0.02 和 0.98 两个数字,对应甜素甲虫初始状态下产出两种卵的概率。

好在仔细一看,这个文件中还有一个似乎和产卵概率相关的变量有定义 TIMES_TENDED_PER_CYCLE_FOR_EVOLUTION 为 2,直译为“进化所需的每周期照料次数”。

搜索 TIMES_TENDED_PER_CYCLE_FOR_EVOLUTION 在代码文件中的引用,发现在 TUNING.CREATURES.EGG_CHANCE_MODIFIERS 文件中的 CropTendedModifier 有用到。 CropTendedModifier 的第一个参数为虫果果虫id,第二个为虫果果虫卵id,第三个为两种能提供变异的植物((贫瘠)虫果植株),第四个参数即是0.05除以TIMES_TENDED_PER_CYCLE_FOR_EVOLUTION (得0.025)。那么我门接下来分析 CropTendedModifier 的逻辑。

可以看到,在 FertilityModifier 的最后一个变量 applyFunction 中,回调的输入被转换为 CropTendingStates.CropTendingEventData 植物照料事件数据,它其中便有被照料的植物id -- corpID。代码逻辑为,如果被照料的植物是之前定义的几种植物((贫瘠)虫果植株)中的一种,那就调用 inst.AddBreedingChance(eggType, modifierPerEvent) 函数调整变异概率,其中eggType是回调函数的输入值,盲猜是虫果果虫卵的id,modifierPerEvent 正式之前算出的第四个参数 0.025。

现在来看 AddBreedingChance,简化的代码为 chance.weight += Min(1 - chance.weight, Max(0f - chance.weight, 0.025)),套用到虫果果虫的例子中用人话说就是,虫果果虫卵当前的权重加上0.025,再把它限制到0到1的范围之内。注意后面还有一行NormalizeBreedingChances(),作用就是等比缩放所有的蛋的概率使得它们的和为1。

公式推导

本段涉及到最多到高中的数学知识

符号定义:

a 产出虫果果虫卵的概率,用0到1之间的小数表示。

x 每次照料增加的概率系数,为0.025

n 照料虫果系植株的次数,为自然数。

这样,a_0就是初始状态下甜素甲虫产下虫果果虫卵的概率0.02(2%),a_n就是照料过n次虫果系植株以后的甜素甲虫产下虫果果虫卵的概率。

根据代码中的逻辑,现在可以得到虫果果虫卵概率的递推公式:

当a_{n-1} 小于等于 0.975时,a_n = (a_{n-1} + x) / ((a_{n-1} + x) + (1 - a_{n-1})) = (a_{n-1} + x) / (1 + x)

当a_{n-1} 大于 0.975 时,a_n = 1 / (1 + (1 - a_{n-1} )) = 1 / (2 - a_{n-1})

根据高中的通过递推公式求通项公式的知识(我自己忘得差不多了所以去某乎复习了一下),易得(等式两边同时减 1 即为等比数列)

当a_{n-1} 小于等于 0.975时,a_n = 1 - (1 - a_0) * (1 + x)^(-n)

根据(excel)计算,n 最大为 149 (即第一个超过 0.975 的 a_n 对应的 n)

那么当 n 大于 149 时,通项公式为(等式两边同时减 1 再取倒数即为等差数列)

a_n = 1 + 1/(1/(a_{149}-1) - n + 149)

结论验证

数据

其中"观察值"为(1 - "原始观察值"/100)。"理论值近似"为"理论值"四舍五入后的百分率表示方法。

图表

可以看到观察值与理论值分毫不差。

结论验证

数据

其中"理论值近似"为"理论值"四舍五入后的百分率表示方法。

图表

可以看到理论值和实际值有一定误差。推测误差有两方面,一是也许每周期照料作物棵数不是恰好为7,二是单精度浮点数计算上的误差。

总结

目前看来论证公式能很好得解释游戏中的现象。根据相似的代码查找方法,可以推测如果用虫果果虫产卵,除初始值变更为33%以外变异机制与甜素甲虫一致。对于别的小动物的变异机制,理论上应该也能通过分析TUNING.CREATURES.EGG_CHANCE_MODIFIERS 文件来得到确切的逻辑。

也许你还喜欢

白银之城附记怎么玩 白银之城附记

最近玩家们讨论火热的游戏就是白银之城了,这可能是接下来玩家们

失落的方舟加速器推荐 2026热门稳

《失落的方舟》国内玩家常遇到哪些网络问题?这是许多刚接触这款高人

对峙交锋时刻akr怎么样 对峙交锋时

对峙交锋时刻游戏中有很多武器的,其中akr就是一个外形非常酷

War3闪退原因全解析 War3稳定运行

《魔兽争霸III》的战役模式以深度策略性和丰富叙事著称,在RTS

山海奇旅飞行能力玩法介绍 山海奇

山海奇旅是一款自由度极高的社交类手游,在游戏中玩家还能掌握飞

永恒之塔闪退原因分析 永恒之塔常

《永恒之塔》作为一款以星界战场与魔法史诗为背景的MMORPG,其

白银之城奇案推演怎么玩 白银之城

白银之城属于二次元养成玩法,这类游戏要有一点特色才能吸引足够

战术小队进不去服务器三点原因解析

战术小队作为一款强调协同作战的多人在线战术射击游戏,其服务器连接

双人竞技场好玩吗 双人竞技场游戏

如果说玩家喜欢益智类的趣味小游戏,想必玩家会很看重游戏的趣味

死亡岛2闪退怎么办 死亡岛2游戏崩

《死亡岛2》作为一款主打近战爽感与丧尸清剿体验的动作RPG,凭借