本教程根据GitHub上的热力膨胀5(下称TE)的源代码详细介绍TE中的机器在完成配方时判断是否产出以及产出多少副产物的流程。
目前(5.5.7.1),TE中共有7台机器和5种升级组件使用或涉及类似[1]流程。
这些机器分别是:磨粉机锯木机感应炉有机灌注器流体精炼机离心机和空置模式的流体转置机
升级组件分别是:升级: 辅助筛子装置升级: 板块矿质引发升级: 炽焱高温裂解升级: 生物离心分解升级: 自动轮作循环

当上述机器完成配方时,会执行以下流程以判断产出副产物的数量,离心机则是对每一种物品产物都执行该流程:

  1. 定义变量 secondaryChance = 100 - n × 15 ,其中,n 为机器中安装的升级: 辅助筛子装置的数量。

  2. 如果机器是装有升级: 板块矿质引发且有足够的板块之层岩的磨粉机,且配方的物品原料是矿石,则令 secondaryChance 减少25 。

  3. 如果机器是装有升级: 炽焱高温裂解且有足够的烈焰之炽焱的感应炉,且配方的其中一种物品原料是矿石,则令 secondaryChance 减少30 。

  4. 如果此时 secondaryChance 小于5或大于100,分别将其设为5或100 。

  5. 如果机器没有安装升级: 生物离心分解,则从0到 secondaryChance - 1 中随机选择一个整数(含两端),如果该整数小于配方中设定的副产物产出概率百分数(下称 recipeChance )[2],则产出1份[3]副产物,否则终止本流程。

  6. 如果机器是装有升级: 生物离心分解的离心机,则对于从0到 n - 1 (其中 n 为配方中设定的该产物产出数量)中的每个整数(含两端,下称 j ),都从0到 secondaryChance + j × 10 - 1 中随机选择一个整数(含两端),如果随机选择的整数小于 recipeChance 则产出1个该产物。

  7. 如果机器是流体转置机或离心机,则终止本流程。

  8. 从0到99中随机选择一个整数(含两端),如果该整数小于 recipeChance - secondaryChance ,则再产出1份副产物。

  9. 如果此时机器的副产物槽位中的物品数量超过该物品的堆叠上限,则销毁超过部分。[4]


根据该流程可以得出一些简单的结论:

  • 无论配方中设定的副产物产出概率和机器安装各种升级的数量是多少,每完成一个配方,离心机产出的任何物品产物都不超过1份,流体转置机和其它机器产出的副产物分别不超过1份和2份。

  • 对于任意给定的一套机器,升级和配方的组合,完成配方后不产出副产物和产出2份副产物的可能性不会同时存在。

  • 如果机器不是流体转置机或离心机,当现有升级和配方的组合已经使机器每完成一个配方至少产出1份副产物时,后续加装的每个升级: 辅助筛子装置会使产出第2份副产物的概率增加15% 。

  • 如果机器装有满足生效条件的升级: 板块矿质引发或升级: 炽焱高温裂解,则第6个及更多的升级: 辅助筛子装置不会进一步增加副产物产出,否则第8个及更多的升级: 辅助筛子装置不会进一步增加副产物产出。


注释:
[1]:技术上,TE中不存在一套通用的判断副产物产量的流程,而是所有机器都各自有一段用于判断副产物产量的代码,但目前(5.5.7.1)TE中所有有这段代码的机器的这段代码都很相似。
[2]:如果机器是装有升级: 自动轮作循环的有机灌注器,且配方的其中一种物品原料是光合堆肥富集光合堆肥充能光合堆肥,另一种物品原料与副产物相同,则令 recipeChance 减少 100 。
[3]:“1份”指配方中设定的每次产出数量,下同。
[4]:即使有可能产出2份副产物,机器也会在副产物槽位的剩余空间仅能容纳1份副产物时开始运行。