指令嵌套与变量
指令中支持嵌套另一个指令,这是一种比较高级的玩法,适用于需要一些按顺序投多次骰子的场合。
例如:在某种玩法中,我们需要先投 d10
假设结果为 x
,然后再投 x
个 d10
。当然我们可以分两次骰,但如果这种操作很频繁,还是有些麻烦。
我们可以通过指令嵌套语法,把它们整合到一个表达式中,将前一次的表达式用双层中括号包裹即可:
.[[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
,然后再投 x
个 d10
和 x+1
个 d6
:
.[[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%<=31
为 1
,即 $1 = 1
, 表达式解析为 1*d10+0*d100
,即 d10
;
当理智检定失败时,d%<=31
为 0
,即 $1 = 0
,表达式解析为 0*d10+1*d100
,即 d100
。
当然,这种复杂的指令使用起来并不方便,但你正好可以利用自定义指令别名功能,自己起一个喜欢的名字来代替这一长串指令。恭喜你,发明了一个新的骰子指令!