*〈歴史に敬意を払い、新しい体験へ〉*
TRPGセッションをより快適にするために、日本製の新しいダイスボット[TDiceBot](https://discord.com/discovery/applications/1303380164889284638)を開発しました。初心者から上級者まで、すべてのプレイヤーが最高のセッション体験を得られるような機能を鋭意開発中です。
# スラッシュコマンド一覧
TDiceBotを導入すると、ダイスボット用スラッシュコマンドが利用できるようになります。各コマンドは実行に成功した場合に、一部を除いて1クレジットを消費します。クレジットの詳細については[[004_利用プラン|利用プラン]]を参照してください。
この文書の内容と実際の挙動に相違がある場合には、実際の動作が優先します。
## 汎用コマンド
### /d100 \[private?\]
1D100のロールを実行します。`[private?]` に `true` を指定した場合は、結果を自分にだけ通知して、管理人含めてほかのメンバーが見ることはできません。
### /expr \[expr\] \[private?\]
数式を計算できます。詳細は後述の「数式について」を参照してください。
### /choice \[p\] \[n?\] \[d?\] \[private?\]
空白文字やカンマで区切られた選択肢 `[p]` の中から `[n]` 個の要素をランダムで抽出します。 `[d]` に `true` が設定された場合は、重複ありで抽出します。
## エモクロアTRPG コマンド
エモクロアTRPG系のコマンドでは、数値が要求される部分に式を入力できます。入力できる式については「数式について」を参照してください。
また、20個を超えるダイスロールの内容は省略されます。
### /emo-skill \[level\] \[value\] \[label?\] \[private?\]
エモクロアTRPGの技能ロールを実行します。`[level]` は技能レベル、`[value]` は判定値です。オプションとして `[label?]` で技能名を指定できます。指定しなかった場合の既定値は「技能値」です。
### /emo-res \[level\] \[strength\] \[kind\] \[private?\]
エモクロアTRPGの共鳴判定ロールを実行します。`[level]` は技能レベル、`[strength]` は強度、`[kind]` は感情マッチング種別です。
## クトゥルフ神話TRPG 第6版 コマンド
クトゥルフ神話TRPG系のコマンドでは、数値が要求される部分に式を入力できます。入力できる式については「数式について」を参照してください。
### /coc-cbr \[x\] \[y\] \[label?\] \[private?\]
組合せ技能ロール `CBR(x, y)` を実行します。`[label?]` で技能名を指定できます。指定しなかった場合の既定値は「技能値」です。
### /coc-cbrb \[x\] \[y\] \[label?\] \[private?\]
組合せ技能ロール `CBRB(x, y)` を実行し、それぞれ結果を返します。
### /coc-cc \[x\] \[label?\] \[private?\]
技能ロール `CC(x)` を実行します。
### /coc-ccb \[x\] \[label?\] \[private?\]
技能ロール `CCB(x, y)` を実行し、それぞれ結果を返します。
### /coc-res \[x\] \[y\] \[label?\] \[private?\]
抵抗ロール `RES(x, y)` を実行します。
### /coc-resb \[x\] \[y\] \[label?\] \[private?\]
抵抗ロール `RESB(x, y)` を実行します。
## クトゥルフ神話TRPG 第7版 コマンド
### /coc7-bpd \[n\] \[x\] \[label?\] \[private?\]
ボーナス・ペナルティダイスロール `BPD(n, x)` を実行します。ボーナスの場合は `n > 0` を、ペナルティの場合は `n < 0` を指定してください。
### /coc7-cbr \[x\] \[y\] \[label?\] \[private?\]
組合せ技能ロール `CBR(x, y)` を実行します。
### /coc7-cc \[x\] \[y\] \[label?\] \[private?\]
技能ロール `CC(x, y)` を実行します。
## 管理用コマンド
### /tdice-activate \[key\]
ダイスボットのライセンスキーを入力します。このコマンドはダイスボットのクレジットを消費しません。
### /tdice-stats
ダイスボットの利用プランと使用量を確認します。このコマンドはダイスボットのクレジットを消費しません。
# 数式について
TDiceBotでは `10` や `8` といった単一の値だけでなく、`2.5 + 8` のような式を書くこともできます。普段からExcelやプログラミング言語に慣れ親しんだ人にとっては理解しやすいとは思いますが、少し複雑な部分もあるので、ひとつずつ順を追って解説します。
## 整数と実数
`20` や `5` といった値は整数として扱われます。TDiceBotでは $-2^{63}$ から $2^{63}-1$ の間の値を扱うことができ、式の計算過程でこの範囲外になったときは計算エラーが発生します。
`3.14` や `20.5` は実数として扱われます。コンピュータで実数を扱う都合上、計算誤差を防ぎきれないので、細かすぎる値では正しい結果にならないことがあります。
`20 + 5` のように整数と整数を計算したときの結果は整数となりますが、`3 + 20.5` のように、整数と実数を計算したときの結果は実数となります。実数から整数に変換したいときには、後述の `FLOOR()`, `CEIL()` または `ROUND()` 関数を使用してください。
## 利用できる演算子
`+` や `*` などの計算記号を演算子と呼びます。TDiceBotで利用可能な演算子には次のものがあります。これらの演算子は整数と実数を区別せず、どちらに対しても適用できます。
| 式 | 意味 | 説明 |
| ----------- | ------ | --------------------------------------- |
| 3 + 8 | 加算 | 値を足します。 |
| 9 - 2 | 減算 | 値を引きます。 |
| 4 * 3 | 乗算 | 値を掛けます。 |
| 10 / 8 | 除算 | 値を割ります。整数の場合、端数は切捨てとなります($10 / 8 = 1$)。 |
| -20 | 単項マイナス | 負数を返します。 |
| (2 + 3) * 4 | 括弧 | 式の優先順位を上げます。 |
## 特殊な演算子
TDiceBotでは、ダイスロールを表す特殊な演算子 `xdy` が用意されています[^1]。ダイスの個数は10,000まで( $x \le 10000$ )、面数に制限はありませんが、面数と計算結果ともに整数で表現可能な範囲に収まっている必要があります。
| 式 | 意味 | 説明 |
| --- | ------ | -------------- |
| 2d6 | 2d6ダイス | 2個の6面ダイスを表します。 |
## 関数
関数を使うことで、通常の演算子だけでは表現できない複雑な処理を実現できます。また、関数の引数に式を書くことや、関数を式として利用することもできます。
| 関数 | 意味 | 説明 |
| -------------- | ---- | -------------------------- |
| ABS(-32) | 絶対値 | 値の絶対値を返します。 |
| FLOOR(20.3) | 切捨て | 小数点以下を切捨て、整数を返します。 |
| CEIL(20.3) | 切上げ | 小数点以下を切上げ、整数を返します。 |
| ROUND(20.3) | 四捨五入 | 小数点以下を四捨五入して、整数を返します。 |
| MAX(2, 8, ...) | 最大値 | 2つ以上の複数の式のうち、一番大きいものを返します。 |
| MIN(4,3, ...) | 最小値 | 2つ以上の複数の式のうち、一番小さいものを返します。 |
関数名は大文字と小文字を区別しません。
## 式の例
次に示す式はすべて有効な式です。
```
0
4 + 8
2 - -3
(2 + 3) * 4
-(10 - 3)
9 / 3
CEIL(9.0 / 2) + 2
MIN(1, 2, 3, 4, 5 + 5)
```
さらに `/expr` コマンドでは次の式も有効です。
```
5
20d6 + 2
1d(2 + 3)
2d(3d(4 + 5))
1d2 + 1d3 + 1d4
MAX(1d6, 4)
```
# その他
## ロールの算出根拠および解釈
本ボットでは、下記の書籍の定義に沿ってロール結果の算出を行います。また後述の引用は著作権法 第32条1項に基づくものです:
・株式会社KADOKAWA, クトゥルフ神話TRPG, 2004, ISBN978-4-04-729464-6 (第6版)
・株式会社KADOKAWA, 新クトゥルフ神話TRPG ルールブック, 2019, ISBN978-4-04-735852-2 (第7版)
## 第6版の1D100ロールについて
本ボットでは、次の示す条件を上から順に判定します:
- 1D100によりクリティカルが発生した場合 → クリティカル
- 1D100 ≦ `技能値` だった場合 → 成功
- 1D100によりファンブルが発生した場合 → ファンブル
- 1D100 > `技能値` だった場合 → 失敗
### ロールの解釈
> 【D100ロール】:(前略)…D100の結果が探索者のパーセント値以下だった場合、そのアクションは成功したことになる。それ以外の場合、アクションは失敗したのである。(pp.58)
> 【戦闘時の決定的成功とファンブル】武器の技能のロールで、D100の結果が「01~05」だった場合には、「決定的成功」だったということである…(中略)…D100の結果が「96~00」だった場合には、そのロールはファンブル(大失敗)だったことを表す。…(中略)…モンスターでもファンブルすることがあるが、攻撃技能が100%以上あれば、攻撃でファンブルすることはない。(pp.149)
pp.58のD100ロールの基本的な定義と、pp.149のモンスターの攻撃技能が十分あればファンブルを無視できるという記述から、成功はファンブルに優先すると考えることが自然であると判断しています。
## 第6版の組み合わせロールについて
本ボットでは、組み合わせロールに指定した技能値ごとに結果を返します。判定結果をひとつにまとめて「部分的成功」と表現することはありません。それぞれの結果をどう解釈するかはキーパーに委ねられます。
### ロールの解釈
> 【組み合わせロール】(前略)…成功するためには、ロール結果がパーセント値の少ない方の技能値以下の値でなければならない。2つの技能の1つにだけ成功した場合には、部分的成功を意味する場合もあるし、完全な失敗とみなされる場合もある。…(中略)…ハーベイの〈図書館〉は65%、〈ラテン語〉は50%である。プレイヤーのロール結果は「51」だった。〈図書館〉には成功したが〈ラテン語〉は惜しいところで失敗だった。成功するためには50以下でなければならなかったのだ。キーパーは今回は部分的成功だったことにし、ハーベイはその本見つけたけれども、中に書かれている中世の引用や言葉を理解するのには助けが必要だといった。(pp.149)
このようにpp.149では、前後関係があるように見える組み合わせロールが例示されています。しかし実際には条件に前後関係があるのか、それとも並列なのかが文脈によるものであり、どちらの場合でも組み合わせロールは発生しうると考えられます。
また、その結果も判定に使われた技能に依存するので、端的に「部分的成功」とみなすことはできません。そのため「部分的成功」と表示することは避けています。
## 第7版のボーナス・ペナルティダイスについて
### ボーナス・ペナルティ値の解釈
日本版公式クトゥルフ神話TRPGアカウントからは、
> ルールブック87ページにありますように、ボーナス・ダイス、ペナルティー・ダイスは2つまでです。
> [https://x.com/cthulhumasters/status/1868527532175458350](https://x.com/cthulhumasters/status/1868527532175458350)
のように回答が得られていますが、本ボットではシナリオやハウスルール等に柔軟に対応するべく、ボーナス・ペナルティダイスの値に明確な制限を設定していません。
> 多くの場合、キーパーはロールを応援するか不利にする時にボーナス・ダイスかペナルティー・ダイスを1つだけ与えるだろう。しかし、状態が非常に有利だったり、ひどかったりすれば、2つ目のボーナス・ダイスまたはペナルティー・ダイスを与えてもよい。 (pp.87)
pp.87の記述を一般的に捉えれば、多くてもボーナス・ペナルティダイスは2つまでと読み取ることが妥当ですが、一方で最大で2つであることは明示されておらず、解釈に差が生じうるとも言えます。
[^1]: この式は `/expr` コマンドでのみ利用可能です。