86 lines
3.6 KiB
Markdown
86 lines
3.6 KiB
Markdown
# Stat Checks — 属性掷骰对抗难度
|
||
|
||
Stat Checks 为剧本添加一条命令:`check`。它取角色的一个属性,加上骰子和加值,把总数与难度比较,再让故事按成功或失败继续。视觉小说用它说服卫兵,图块 RPG 用它撞开一扇锈门。属性本身来自 Stats Engine 和游戏的规则(RPG Plus 中是 Classic RPG Rules)。
|
||
|
||
## 在游戏里
|
||
|
||
RPG Plus 序章中,一位陌生女子坐在岔路口。其中一个选项直接写明它要做的检定——魅力对抗 10:
|
||
|
||
![黄昏的岔路口;问题"你要对她说什么?"和两个选项:"客气地问路[魅力 10]"和"默默走过"。](assets/seer-choice.jpg)
|
||
|
||
做出选择后,掷骰结果只占一行:
|
||
|
||
![对话框中显示一行"[魅力:11 对 10] 成功"。](assets/check-line.jpg)
|
||
|
||
这里的主角是 1 级游荡者,魅力 8;d20 掷出 3,总数 11 对 10——成功。故事进入成功分支:陌生女子扔给主角一枚护符。
|
||
|
||

|
||
|
||
如果总数低于 10,这一行会显示*失败*,故事则走另一个分支——她转过身去。
|
||
|
||
## 背后的剧本
|
||
|
||
出自 `rpg_plus_game/scenarios/rpg_plus/prologue.scenario`(有删节):
|
||
|
||
```scenario
|
||
option "客气地问路[魅力 10]" -> :ask_way
|
||
option "默默走过" -> :leave
|
||
|
||
:ask_way
|
||
check cha 10 who=rpg_hero else=snub -> :gift
|
||
|
||
:gift
|
||
text "有礼貌。真稀奇……"
|
||
action item.add id=classic/clover_charm
|
||
goto -> :leave
|
||
|
||
:snub
|
||
text "你自己会找到的……"
|
||
```
|
||
|
||
`check cha 10` 掷魅力对抗难度 10。成功就跳到箭头后的标签,失败跳到 `else=` 指定的标签。没有 `else=` 时,失败就只是继续执行下一行。
|
||
|
||
## check 命令
|
||
|
||
```scenario
|
||
check <stat> <difficulty> [who=player] [dice=d20] [bonus=2] [else=label] [quiet=1] -> :label
|
||
```
|
||
|
||
- `<stat>` — 游戏中的属性 id,例如 `cha` 或 `str`。
|
||
- `<difficulty>` — 需要达到的数字:总数不低于它,检定即成功。
|
||
- `who=` — 角色 id,或 `player`(默认)。
|
||
- `dice=` — `d20`、`2d6`、`1d100` 等。`none` 不掷任何骰子,检定变成单纯的门槛:只看属性,每次结果都一样——适合小说("够不够勇敢")。
|
||
- `bonus=` — 加进总数;可以为负。
|
||
- `else=` — 失败时跳转的标签。
|
||
- `quiet=1` — 不显示掷骰行。
|
||
|
||
总数 = **属性 + 骰子 + 加值**。
|
||
|
||
### 默认骰子
|
||
|
||
没写 `dice=` 时,检定使用游戏设置 `checks.dice`,没有该设置则为 `d20`。RPG Plus 在自己的合集中设置了它:
|
||
|
||
```json
|
||
"settings": { "checks.dice": "d20" }
|
||
```
|
||
|
||
想让所有检定都不靠运气的游戏,可以设 `"checks.dice": "none"`。
|
||
|
||
### 用自己的话讲述结果
|
||
|
||
检定之后,这些对话变量保存着掷骰信息:`check_stat`、`check_value`、`check_roll`、`check_bonus`、`check_total`、`check_dc` 和 `check_result`。配合 `quiet=1`,一行 `ptext` 就能用故事自己的话来讲述结果:
|
||
|
||
```scenario
|
||
check str 14 quiet=1 else=stuck -> :open
|
||
:stuck
|
||
ptext "你使出全部的 ${check_total} 去推,门却纹丝不动。"
|
||
```
|
||
|
||
标准一行是翻译键 `checks/line`(`[${check_stat}:${check_total} 对 ${check_dc}] ${check_result}`);游戏可以在自己的本地化文件里改掉它。
|
||
|
||
## 如果遇到问题
|
||
|
||
1. **总数只有骰子。** 属性 id 写错了,或者角色没有这个属性。
|
||
2. **结果总是一样。** 游戏的 `checks.dice` 是 `none`,或者这一行里写了 `dice=none`。
|
||
3. **骰子写法不对。** 格式错误的 `dice=` 不会弄坏场景,只是什么都不掷——检定于是变成单纯的门槛。骰子请写成 `d20`、`2d6`、`1d100`。
|