BCDice icon indicating copy to clipboard operation
BCDice copied to clipboard

[FledgeWitch] 『魔女×見習いRPG フレッジウィッチ』のダイスボットを追加

Open ViVi-shark opened this issue 3 years ago • 6 comments

ゲームについて

  • 書名:『魔女×見習い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 )ことにもとづきます。

ViVi-shark avatar Nov 26 '21 12:11 ViVi-shark

Codecov Report

Merging #517 (298f37c) into master (44c26e9) will increase coverage by 0.03%. The diff coverage is 100.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 Impacted file tree graph

@@            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.

codecov[bot] avatar Nov 26 '21 12:11 codecov[bot]

シノビガミやナイトウィザード The 2nd Edition、オラクルエンジンにおいて「#」はファンブル値の指定として扱われているので、必要な成功数の書式として用いるとややこしいのではないかという懸念があります。

spore0814 avatar Nov 30 '21 14:11 spore0814

@ViVi-shark PRありがとうございます。

「#」はファンブル値の指定として扱われているので、必要な成功数の書式として用いるとややこしいのではないかという懸念があります。

BCDiceとしては# をファンブル値の指定として扱いたいという狙いはありますが、このシステム上ファンブルに相当する指定を使わないのであれば問題ないと思います。

記号を * としたのは、しばしば“必須の記入欄”などを表現する記号として * がもちいられることから、馴染みやすいと考えたためです。

* は乗算記号として一般的すぎるため、オプション指定としては利用を避けたいです。また、コマンドのパースがかなり複雑になっているため、 Command::Parser を用いることができないか検討して欲しいです。Command::Parserでは@, #, $でオプションを指定できます。

Command::Parser: https://yard.bcdice.org/BCDice/Command/Parser.html

ysakasin avatar Dec 01 '21 12:12 ysakasin

おふたりとも、コメントありがとうございます

まだ検討中ですが、現時点では、

  • #@
  • *#

に置き換えようかと思っています (ゲーム中に高頻度で指定する値が # なのは(一般的なキーボード入力にとって)やや不便だと思ったので @ に。番号のニュアンスではなく、 @ → at で時間的位置のニュアンスとして馴染みやすそう、という意図もあります) (乗算記号との混同に配慮して * は避けて、代わりはまぁなんでもいいんですが、あまり視認性のよい ASCII 範囲の記号の選択肢もないので # に)

ViVi-shark avatar Dec 01 '21 13:12 ViVi-shark

@ysakasin

パースの実装(の主な部分)を Command::Parser に置き換えました。 https://github.com/bcdice/BCDice/pull/517/commits/251d94b37d3711772182c1a052332366ecc82950 (汎用の処理に委譲(というか forwarding )する前に正規表現で置換しているので、完全に parser で実現しているわけではありませんが、このほうがコードベースへのインパクトが小さいのと、 parser と正規表現の併用には前例もあるので、まぁいいかとおもいました)

それに際し、既存の挙動だけでは目的のコマンドインタフェースを実現できなかったため、以下の機能を追加しています:

  • &x ( x は値)によるオプション指定
  • target より後ろのオプション指定

(なお、後者に関して、 h-mikisato, opparco 両氏にご協力いただきました。ありがとうございます)

ViVi-shark avatar Dec 02 '21 16:12 ViVi-shark

@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) として扱うのはできれば避けたいところです。いったん何か別の形式や方針がないか、こちらでも考えてみます。

ysakasin avatar Dec 02 '21 17:12 ysakasin