Files

86 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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——成功です。物語は成功の枝へ進み、女は主人公にお守りを投げてよこします。
![成功の枝: 「礼儀正しいね。珍しい」——彼女はクローバーのお守りを放ってよこす。](assets/check-branch.jpg)
合計が 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` のように書いてください。