咒法学学习手记(六):附属模组——咒灵、Iota 与磁带

关于咒灵(Hexal)

咒灵是一种极为有趣的实体,可以用咒术创造,并且可以帮助咒法师释放咒术。需要明确的是,除了游走咒灵和一些在极为特殊的情况下产生的咒灵以外,所有的咒灵都必定是有主的——咒灵的施法必定是借其主之名释放的,不能认为咒灵可以独立施法。

譬如说,咒灵使用揭示时,收到信息的是咒法师;咒灵使用爆炸对生物造成伤害时,伤害来源也是咒法师。咒灵是咒法师手与眼的延伸。

循环式咒灵每秒钟进行 20 次施法,每一次都是创建新的施法环境,并继承上一次施法的栈和渡鸦之思——如果栈管理不当,这可能招致事故。

开拓者之策略可以让循环式咒灵移动,凭此我们便可以创造出自律行动的咒灵。如果和一些用于破坏方块的咒术配合起来,那么也许可以制造出自律采矿的咒灵吧。

更多实用 Iota(moreiotas)

我发现了许多实用的新 Iota,它们分别是字符串 Iota类型 Iota物品 Iota以及矩阵 Iota

  • 字符串可以储存可以由人直接阅读的信息,相关的命名法术也可以很方便地去为物品或者实体命名;
  • 类型 Iota 则带给了我的咒术去区分方块、分辨实体以及检测 Iota 类别的能力。

比如说,我们可以预先保存好一个僵尸类型 Iota(iota:c9412e.json),然后使用区域之提整:类型,来获取到一定范围内的所有僵尸的实体 Iota,然后便可以轻而易举地使用法术来处理这些僵尸,也可以用占卜师之提整来逐个比对。

而要理解物品组 Iota,就要先理解什么叫做物品组——手中、箱子里所存放的物品都是以物品组的形式存在的,也就是一个物品类型加上一个数量再加上若干可能会有的特殊数据。它和类型 Iota 有很好的配合,利用它可以方便地获取容器信息。

至于矩阵,比较复杂,为了避免错讹,暂时不记。

磁带与守护进程(Hexcassettes)

磁带可以实现所谓的异步咒术。通过将咒术入队列到磁带,我们便可以在若干时间后在新的施法环境中释放那个咒术。

这里需要注意的是,利用磁带所进行的施法可以认为和将这个咒术进行入队列的施法没有任何关系——磁带延时执行的咒术是在一个完全的新环境中执行的,不继承任何其他环境的栈、渡鸦之思或驱动标记。

但是仅仅是让咒术在特定时间后释放并没有什么特别的。如果说,我们可以实现一个这样的咒术:它的效果很简单——将自身入队列

这样,它就会在若干时间后再次被释放,这样就形成了所谓的守护进程——常态式的、持续性的施法。

实现守护进程有两种方案:

  1. 一种是将这个法术自身储存在某种外部媒介中,每次执行时直接去读取外部储存的法术将其延时执行——而那储存的刚好是它自己。
  2. 另一种方法则是让这个咒术的执行本身就会再次生成一个和它本身一样的 Iota,这就颇费功夫了,但是极具美感。

在被执行后返回本身的咒术,叫做奎因(Quine),是通往永恒的钥匙。

让我们先看看这个图案列表 iota:11fa54.json:这个图案列表执行后会先复制自己,之后再次执行自己,最后死循环报错,这很接近我们想要的。接下来我们看看这个 iota:quine.json,它执行后变成 iota:real_quine.json。

最终的列表在一次赫尔墨斯之策略下仍然得其本身。可以发现,iota:q_part.json 在最终的列表中出现两次,实际上替代了前文所提的死循环中双子之分解和赫尔墨斯之策略的功能。

最终的得到的这一列表本质是两个一样的单元互相嵌套,每次执行时都用群体之拆解解套,并用外科医师之提整替换掉占位符。

那么如何实现持续施法也就显而易见了:以这个列表为例,如果我们在内层的外科医师之提整后添加数字和入队列以及法术,并且保证前后不额外消耗和增加 Iota,那么它就会在一次执行后把包含入队列的咒术入队列,而那个咒术本身又会再次将自己入队列,如此循环,永无休止。最终得到的列表就应当形如 iota:0d164f.json。

在被执行后返回本身的咒术,叫做奎因,是通往永恒的钥匙。