Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Irisbane] 『瞳逸らさぬイリスベイン』のダイスボットを作成 #482

Merged
merged 21 commits into from
Jul 14, 2021

Conversation

ViVi-shark
Copy link
Contributor

@ViVi-shark ViVi-shark commented Jun 25, 2021

ゲームシステム

 『瞳逸らさぬイリスベイン』(著:木野目理兵衛/どらこにあん,新紀元社刊)。
 電子書籍版は 2021/06/25 現時点でリリース済み、物理書籍版の公式発売日は 2021/06/26 。

機能

  • 「攻撃判定」(ルールブックp146)の処理
  • 上記専用コマンドを使わずにバラバラダイスで原始的に処理するケースを考慮して、バラバラダイスをソートする設定
  • 端数処理を切り上げに設定(ルールブックp54)
  • 各種チャート類( 2021/06/26 00:00 追記)

攻撃判定のインタフェースについて

        ■攻撃判定( ATTACKx,y,z )
        x: 攻撃力
        y: 判定数
        z: 目標値
        (※ ATTACK は ATK または AT と簡略化可能)
        例) ATTACK2,3,5
        例) ATK10,2,4
        例) AT8,3,2

 ルールブック内では「【攻撃力:X 判定数:Y 目標値:Z】の攻撃判定を行う」という書式で表記される。
 ルール記述からコマンドに起こす際に、数値の順序が入れ替わらないことを重視した。

 数値の意味を踏まえて ATTACKx*(yD<=z) などとする案もあったが、タイピング量がかさむことと、数式としての乗算との混同の可能性を考慮して、単純なカンマ区切りにした。

@codecov
Copy link

codecov bot commented Jun 25, 2021

Codecov Report

Merging #482 (96558af) into master (8f24f72) will increase coverage by 0.01%.
The diff coverage is 100.00%.

Impacted file tree graph

@@            Coverage Diff             @@
##           master     #482      +/-   ##
==========================================
+ Coverage   95.35%   95.37%   +0.01%     
==========================================
  Files         292      294       +2     
  Lines       18744    18819      +75     
==========================================
+ Hits        17874    17949      +75     
  Misses        870      870              
Impacted Files Coverage Δ
lib/bcdice/dice_table.rb 100.00% <100.00%> (ø)
lib/bcdice/dice_table/d66_left_range_table.rb 100.00% <100.00%> (ø)
lib/bcdice/game_system.rb 100.00% <100.00%> (ø)
lib/bcdice/game_system/Irisbane.rb 100.00% <100.00%> (ø)

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 8f24f72...96558af. Read the comment docs.

@ysakasin ysakasin self-assigned this Jul 5, 2021
@ysakasin
Copy link
Member

@ViVi-shark レビューがだいぶ遅くなりすみません。

コマンドの形式ですが、できればカンマで引数を区切っていく方式は避けたいです。理由はいくつかあり、一つはコマンドから入力内容の推測は判別がしづらくなること、次に何個目の数が何を示すのかわかりずらいこと、最後に今後引数を増やしたくなってしまった時に余計煩雑になるためです。

カンマ区切りで複雑化してしまった例としては、新クトゥルフ神話TRPGの自動火器コマンドがあります。

目標値zは <=z にするとして、xとyの記述方法に何か良いアイディアはないでしょうか?

@ViVi-shark
Copy link
Contributor Author

@ysakasin

 ダイスボットのインタフェースの問題というよりは元ルールが本質的に有する複雑度の問題だとおもいますが、仰有ることは理解できます。


 プリフィックス+値(または値+サフィックス)の形式だといかがでしょうか?(これは実在しないルールですが、たとえば「クリティカル値5」を「c5」(または「5c」)と指定するようなイメージ)

 ルール上に存在するパラメタが「攻撃力」「判定数」「目標値」で、「判定数」がダイスの数をあらわすので、(文字を D として) Dx よりは xD のほうが慣例に沿う……と考えるとプリフィックスよりはサフィックスでしょうか。この方針だと、

  • 攻撃力 → 係数として使うので coefficient → c
  • 判定数 → ダイス数として使うので dices → d
  • 目標値 → 閾値として使うので threshold → t

 として、 ATTACKxCyDzT みたいな形式になります。(パラメタの順序は問わない実装にしそうな気がしますが)

 ……と提案はしてみましたが、判読しづらい、前の文字と後の文字のどっちにくっつくのかわかりづらい、みたいな問題が容易に想像されて、あんまり改善されていないですね……。

 これよりは ATTACKc=x,d=y,t=z みたいな方向性のほうがマシかもしれません。(順序を問わなければ入力内容の判別のしやすさ、パラメタの意味のわかりやすさ、拡張性の容易さのすべてにおいてまぁまぁ改善される)


 それか、乗算記号の混同を顧みず(パース自体はやろうとおもえばできますし) ATTACKx*(yD<=z) 案でいくのもアリかとはおもいます。

 * の代わりに x**# あたりの(四則演算コマンドでつかわない)文字列にする手もあります。

@ViVi-shark
Copy link
Contributor Author

 x#y<=zx**y<=z がいちばんマシな気がしてきました。

@ysakasin
Copy link
Member

ATTACKxCyDzT みたいな見辛さは従来では記号で解決することにしていて、プレフィックスとしてはアルファベットではなく@#を採用しています。

PRの説明にも書いてくださった通り順序にこだわってらっしゃるのは承知で提案しますが、
yAD@x<=z のような形式はどうでしょうか AD@は変更の余地があるとは思います。
上げてくださったATTACKx#y<=z のような形式でも良いと思います。

@ViVi-shark
Copy link
Contributor Author

@ysakasin

 入力の便宜としてもニュアンスとしても # より @ のほうがよさそうなので、

 ATTACKx@y<=z でどうでしょう?

@ysakasin
Copy link
Member

@ViVi-shark ATTACKx@y<=z で良いと思います!

@ViVi-shark
Copy link
Contributor Author

@ysakasin

 ATTACKx@y<=z に変更しました。 443f32a

@ysakasin
Copy link
Member

@ViVi-shark 修正ありがとうございます。見た限り、コードの方は問題ないと思います。

表についてなのですが、以下の表は一見するとキャラクター作成に使うような表に見えますが、セッション中に使うものでしょうか? プレイ中に使うものであれば何ら問題ありません。

ご存知かと思いますが、BCDiceでは表類はセッション中に使うもののみサポートし、キャラクター作成に使う類のものは実装しない方針です。

        ■シルエットライン(p37)
        SilhouetteLineEye, SilhouetteLEye, SLineEye, SLEye 瞳の印象
        SilhouetteLineHair, SilhouetteLHair, SLineHair, SLHair 髪の長さ
        SilhouetteLineHeight, SilhouetteLHeight, SLineHeight, SLHeight 身長
        SilhouetteLineCon, SilhouetteLCon, SLineCon, SLCon 体型
        SilhouetteLineDress, SilhouetteLDress, SLineDress, SLDress 服飾
        SilhouetteLineTint, SilhouetteLTint, SLineTint, SLTint 色彩

        ■そのほかの表
        CAge 年齢(p27)
        CGender 性別(p27)
        CFailure 欠落(p30)
        CDesire 願望(p31)
        CQuestion 問い掛け(p34-35)
        CEndblessStyle, CEndStyle 復讐者のスタイル(p40)
        CEmblaceStyle, CEmbStyle 掌握者のスタイル(p41)
        ExpectExecution, EEx 望む執行の方向性(p48)

@ViVi-shark
Copy link
Contributor Author

@ysakasin

 仰有るとおり、一義的にはキャラクター作成に使う表です。

 ただ、ゲームとして、セッションの進行中にキャラクター(NPC)のディティールを突発的に決定する必要がしばしば発生する(「ボスと戦う」以外のすべての展開がプレイヤーのアドリブに任されている)性質があり、キャラクター作成関連の表をプレイ中に使いたいケースがままあるかと考えています。
 (ゲームルール上の確固たる根拠ではなく、実際のプレイにおけるユースケースへの考慮です)

 ステラナイツの表(のうち“シチュエーション表”でないもの)がアリならアリかなという考えです。

@ysakasin
Copy link
Member

@ViVi-shark

なるほど。そういう用途でしたら削除でお願いします。
わざわざ文字起こししてもらったのにすみません。

銀剣のステラナイツの表は特殊な事情により掲載しているため、BCDiceの表掲載に関するルールの外にいます。

 - 年齢
 - 性別
 - 欠落
 - 願望
 - 問い掛け
 - 復讐者のスタイル
 - 掌握者のスタイル
 - 望む執行の方向性
 - シルエットライン
@ViVi-shark
Copy link
Contributor Author

@ysakasin

 そのようにしました 7a9650c

Copy link
Member

@ysakasin ysakasin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

結果的に ParityTable も未使用になってしまったため、こちらもテスト含め関連ファイルの削除をお願いします。

@ViVi-shark
Copy link
Contributor Author

結果的に ParityTable も未使用になってしまったため、こちらもテスト含め関連ファイルの削除をお願いします。

 revert しました 96558af

@ysakasin ysakasin merged commit a9e040e into bcdice:master Jul 14, 2021
@ysakasin
Copy link
Member

@ViVi-shark ありがとうございます! マージしました!!

@ViVi-shark ViVi-shark deleted the features/Irisbane branch November 21, 2021 15:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants