BCDice
BCDice copied to clipboard
[FledgeWitch] 『魔女×見習いRPG フレッジウィッチ』のダイスボットを追加
ゲームについて
- 書名:『魔女×見習いRPG フレッジウィッチ』
- 著:はいふん / 発行: Symbol-House
- 初版発行日: 2021/11/21 (「ゲームマーケット2021秋」の2日目)
- 電子版: BOOTH
なお、本件の実装にあたって参照した文献、ならびに参照ページとして記載しているページ番号は、すべて上記の電子書籍版にもとづきます。
実装したコマンド
- 判定ルール(ルールブック p28~30 ほか)
- プレイ中に利用する表類
- 日常表(ルールブック p24 )
- トラブル表(ルールブック p30 )
- 技能を無作為に決めるための表(ルールブック p35 )
- 註)この表には、ルールブック内で明示的な呼称が設定されていません。ヘルプには便宜上「ランダム技能」と記載しました。
設計判断の補足
システム名のアルファベット表記
ルールブックの裏表紙にある「FLEDGE WITCH」という表記にもとづいています。
判定コマンド
xB6 形式
このゲームの判定ルールは、基本的には(あらゆる細則を無視すれば)、汎用の xB6>=y
コマンドと同系統の処理です。そのため、それの延長線上のインタフェースを提供するために、 xB6 で始める記法をサポートしています。
xFW 形式
「成功ライン( = y )」「必要な成功数」その他あらゆる入力値を省略して判定を振る場合(ルールとゲームプレイを考えればありえると判断しました)、 xB6 形式だと汎用コマンドと区別不能になってしまうので、そのケースを考慮して B6 の代わりに FW と書けるようにもしました。 FW は、ゲームタイトルの単語の頭文字です。
ダイス数が 0 のケース
ルールブック内で明記されているわけではありませんが、ダイス数が 0 ならばあらゆる条件にかかわらず失敗となるはずであり、そもそもダイス数が 0 になるような判定をプレイヤーがおこなう理由もないため(どんなキャラクターがどんな場面でも、振ろうと思えば1~2個は振れます)、エラーメッセージを返すようにしています。
成功ラインの記法
「成功ライン」とは、汎用の xB6>=y
における閾値 y に相当します。そのまま >=y
の書式を採用しました。
成功ラインの丸め処理
ルールブックでは、下限値や上限値が定められているわけではありません。ただし、ルールの挙動として、 1 未満はすべて 1 と等価であり、 7 超はすべて 7 と等価です(6面ダイスの出目 ≧ 成功ライン、という使いかたをするため)。
「必要な成功数」の書式
@z
( z は入力値)の書式としました。
このゲームにおいて、判定するときの「必要な成功数」は、デフォルトでは「ミッションシーンの番号」と一致します(ルールブック p29 )。 @
→ at から、時間的位置を示すニュアンスによる馴染みやすさを狙っています。
「特定のダイス目を必要とするケース」の書式
#r
( r は入力値)の書式としました。
記号を #
としている積極的な理由は、とくにありません。
「 ASCII の範囲で、まぁまぁ視認しやすく、一般的な数式の一部っぽくない」記号として、消去法的にこうしています。
特定のダイス目を成功数2と数えるケース
&t
( t は入力値)の書式としました。
記号を &
としたのは、 xB6
記法から続けて書いたとき(例: 3B6&5
)、「 6 と 5 だけ成功数2と扱う」振る舞いと親和するだろうと考えたためです。
なお、この挙動を使用するのは、現行ルールブックの範囲では魔法スキル「ひらめいた!」のみですが、魔法スキルの種類が全6個しかなく、プレイヤー人数が1~3人であることや、1セッションごとに魔法スキルの取得数が増えていくことも踏まえると、実質的にはかなり高い割合でセッション中に登場すると考え、サポートしています。
スペシャル( critical のあつかい)
出目が一定の条件を満たしたとき、「スペシャル」(ルールブック p30 )という特殊な結果になります。
このときに critical = true
としています。(「スペシャル」は絶対成功なので、一般的なクリティカルの概念と互換すると考えています)
(「クリティカル」という語自体は、ルールブック内に登場しません)
表類
トラブル表
コマンドは FailureTrouble
, FT
としています。
failure の根拠は、この表が判定の失敗時に使用されるものだからです(ルールブック p30 )。
ランダム技能
コマンドは RandomField
, RF
としています。
「技能」は、一般的には skill と訳すのが自然だとは思いますが、このゲームには「技能」とは別の意味の「魔法スキル」という用語が定義されており(ルールブック p10 ほか)、それとの混同を避けるために別の語を当てました。
そのうえで、 field としたのは、このゲームの「技能」が魔法の“分野”(例:「召喚術」「詠唱術」等)を示すものである(ルールブック p9~10 )ことにもとづきます。
Codecov Report
Merging #517 (298f37c) into master (44c26e9) will increase coverage by
0.03%
. The diff coverage is100.00%
.
:exclamation: Current head 298f37c differs from pull request most recent head 251d94b. Consider uploading reports for the commit 251d94b to get more accurate results
@@ Coverage Diff @@
## master #517 +/- ##
==========================================
+ Coverage 95.52% 95.55% +0.03%
==========================================
Files 318 320 +2
Lines 18693 18806 +113
==========================================
+ Hits 17857 17971 +114
+ Misses 836 835 -1
Impacted Files | Coverage Δ | |
---|---|---|
lib/bcdice/game_system.rb | 100.00% <100.00%> (ø) |
|
lib/bcdice/game_system/FledgeWitch.rb | 100.00% <100.00%> (ø) |
|
lib/bcdice/game_system/Bakenokawa.rb | 100.00% <0.00%> (ø) |
|
lib/bcdice/game_system/Cthulhu.rb | 98.50% <0.00%> (+0.74%) |
:arrow_up: |
Continue to review full report at Codecov.
Legend - Click here to learn more
Δ = absolute <relative> (impact)
,ø = not affected
,? = missing data
Powered by Codecov. Last update 44c26e9...251d94b. Read the comment docs.
シノビガミやナイトウィザード The 2nd Edition、オラクルエンジンにおいて「#」はファンブル値の指定として扱われているので、必要な成功数の書式として用いるとややこしいのではないかという懸念があります。
@ViVi-shark PRありがとうございます。
「#」はファンブル値の指定として扱われているので、必要な成功数の書式として用いるとややこしいのではないかという懸念があります。
BCDiceとしては#
をファンブル値の指定として扱いたいという狙いはありますが、このシステム上ファンブルに相当する指定を使わないのであれば問題ないと思います。
記号を * としたのは、しばしば“必須の記入欄”などを表現する記号として * がもちいられることから、馴染みやすいと考えたためです。
*
は乗算記号として一般的すぎるため、オプション指定としては利用を避けたいです。また、コマンドのパースがかなり複雑になっているため、 Command::Parser
を用いることができないか検討して欲しいです。Command::Parser
では@
, #
, $
でオプションを指定できます。
Command::Parser
: https://yard.bcdice.org/BCDice/Command/Parser.html
おふたりとも、コメントありがとうございます
まだ検討中ですが、現時点では、
-
#
→@
-
*
→#
に置き換えようかと思っています
(ゲーム中に高頻度で指定する値が #
なのは(一般的なキーボード入力にとって)やや不便だと思ったので @
に。番号のニュアンスではなく、 @ → at で時間的位置のニュアンスとして馴染みやすそう、という意図もあります)
(乗算記号との混同に配慮して *
は避けて、代わりはまぁなんでもいいんですが、あまり視認性のよい ASCII 範囲の記号の選択肢もないので #
に)
@ysakasin
パースの実装(の主な部分)を Command::Parser
に置き換えました。 https://github.com/bcdice/BCDice/pull/517/commits/251d94b37d3711772182c1a052332366ecc82950
(汎用の処理に委譲(というか forwarding )する前に正規表現で置換しているので、完全に parser で実現しているわけではありませんが、このほうがコードベースへのインパクトが小さいのと、 parser と正規表現の併用には前例もあるので、まぁいいかとおもいました)
それに際し、既存の挙動だけでは目的のコマンドインタフェースを実現できなかったため、以下の機能を追加しています:
-
&x
( x は値)によるオプション指定 - target より後ろのオプション指定
(なお、後者に関して、 h-mikisato, opparco 両氏にご協力いただきました。ありがとうございます)
@ViVi-shark
ありがとうございます。変更点を軽くみてました。どうやら Command::Parser
が支援したいコマンドの設計思想とViVIさんのコマンド設計思想がかなり異なっているようで、かえってややこしくなっていそうですね。
Command::Parser
ではそもそも 1+2+3CMD4+5+4
と (1+2+3)CMD(4+5+4)
を等価としませんし、 @1+3
を @(1+3)
とみなすようなオプションもサポートしていません。以前も色々なPRで話題になりましたが、1+2+3CMD4+5+4
と (1+2+3)CMD(4+5+4)
として扱うのはできれば避けたいところです。いったん何か別の形式や方針がないか、こちらでも考えてみます。