指令嵌套与变量

指令中支持嵌套另一个指令,这是一种比较高级的玩法,适用于需要一些按顺序投多次骰子的场合。

例如:在某种玩法中,我们需要先投 d10 假设结果为 x,然后再投 xd10。当然我们可以分两次骰,但如果这种操作很频繁,还是有些麻烦。

我们可以通过指令嵌套语法,把它们整合到一个表达式中,将前一次的表达式用双层中括号包裹即可:

.[[d10]]d10
Maca 🎲
先是 🎲 d10: [6] = 6
最后 🎲 6d10: [6, 7, 3, 10, 1, 1] = 28

当然,嵌套也是支持多层的。例如我们将前一次投骰的结果作为后一次投骰的面数:

.d[[d[[d[[d10]]]]]]  
Maca 🎲
先是 🎲 d10: [8] = 8 
然后 🎲 d8: [3] = 3 
然后 🎲 d3: [2] = 2 
最后 🎲 d2: [1] = 1

在嵌套中可以引用之前投骰的结果,例如:先投 d10 假设结果为 x,然后再投 xd10x+1d6:

.[[d10]]d10+[[$1+1]]d6  
Maca 🎲
先是 🎲 d10: [3] = 3 
然后 🎲 3+1: 3+1 = 4 
最后 🎲 3d10+4d6: [3, 1, 6]+[3, 1, 4, 6] = 24

表达式中的 $1 代表你第一次投骰的结果。第一次的结果是 d10 = 3,故 $1 = 3。最终的表达式就是 3d10+4d6。同理你也可以使用 $2$3 代表第二次、第三次投骰的结果。


指令选项中的暗骰(h)选项,当用在嵌套指令中,代表投骰但不出现在最终的表达式里。利用这个特性,我们可以模拟出变量的功能:

.[[hd10]][[$1]]d10+[[$1+1]]d6   
Maca 🎲
先是 🎲 d10: [5] = 5 
然后 🎲 5: 5 = 5 
然后 🎲 5+1: 5+1 = 6 
最后 🎲 5d10+6d6: [9, 9, 7, 4, 1]+[3, 5, 4, 3, 5, 5] = 55

这里我们首先投 hd10 = 5,这个结果 5 不会出现在最终表达式里,但是会赋予 $1。因此后面的 [[$1]]d10+[[$1+1]]d6 就会被解析为 5d10+6d6


综合上述的功能,我们就能组合出复杂的指令出来。就以理智检定为例,已知直视伟大的克苏鲁掉 san 1d10/1d100,我们可以使用:

.[[hd%<=$san]][[$1]]*d10+[[1-$1]]*d100 直视伟大的克苏鲁  
Maca 🎲 直视伟大的克苏鲁
先是 🎲 d%<=31: [42] = 0 
然后 🎲 0: 0 = 0 
然后 🎲 1-0: 1-0 = 1 
最后 🎲 0*d10+1*d100: 0*[6]+1*[74] = 74

这里首先投 hd%<=$san,人物卡 san 值为 31, d%<=31 代表投一个百分骰,计算小于等于当前 san 值(31)的骰子个数。因此:

当理智检定通过时,d%<=311,即 $1 = 1, 表达式解析为 1*d10+0*d100,即 d10;

当理智检定失败时,d%<=310,即 $1 = 0,表达式解析为 0*d10+1*d100,即 d100


当然,这种复杂的指令使用起来并不方便,但你正好可以利用自定义指令别名功能,自己起一个喜欢的名字来代替这一长串指令。恭喜你,发明了一个新的骰子指令!

Last Updated: