BCDice icon indicating copy to clipboard operation
BCDice copied to clipboard

『キズナバレット』のダイスボットを追加

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

ゲームについて

『キズナバレット1 猟犬たちのネガイ』(2021/12/28,著:からすば晴,刊:新紀元社)

参照先

ダイスボットの開発にあたっては、 Kindle 版にもとづいています。

ゲーム名のアルファベット表記

表紙にある「 KIZUNA BULLET 」という表記にもとづいています。

コマンドの補足

最大値をもとめるダイスロール

ルールブックでの表記は「最大値:nD」です。これに合わせて、 max:nD という書式にしました。 ただし、数学や表計算ソフトやプログラミング言語などから、関数の適用を括弧 () で表現する習慣がそれなりに一般的であることを考慮し、 max(nD) 書式もサポートしています。

2022/01/19 21:34 追記

いただいたコメント https://github.com/bcdice/BCDice/pull/527#issuecomment-1016339346 をふまえ、 nMAX 書式でも実行できるようにしました。

ダイスを2回振って12通りの結果を得るテーブル

本質的にはいわゆる“D66”と同様の処理であり、既存の d66 系の実装を流用しています。 しかし、このゲームでは「D66」という概念が存在しないので、それに応じた形式に出力を置き換えています。(ゲームに存在しない概念をダイスボットが提示するのは避けるべきだ、という判断です)

ViVi-shark avatar Jan 13 '22 19:01 ViVi-shark

Codecov Report

Merging #527 (b914bd5) into master (78b0ac8) will increase coverage by 0.03%. The diff coverage is 100.00%.

Impacted file tree graph

@@            Coverage Diff             @@
##           master     #527      +/-   ##
==========================================
+ Coverage   95.51%   95.55%   +0.03%     
==========================================
  Files         318      321       +3     
  Lines       18637    18769     +132     
==========================================
+ Hits        17801    17934     +133     
+ Misses        836      835       -1     
Impacted Files Coverage Δ
lib/bcdice/game_system.rb 100.00% <100.00%> (ø)
lib/bcdice/game_system/KizunaBullet.rb 100.00% <100.00%> (ø)
lib/bcdice/game_system/SwordWorld2_5.rb 97.43% <0.00%> (-0.19%) :arrow_down:
lib/bcdice/game_system/Avandner.rb 100.00% <0.00%> (ø)
lib/bcdice/dice_table/d66_parity_table.rb 100.00% <0.00%> (ø)
...ib/bcdice/game_system/sword_world/rating_parsed.rb 100.00% <0.00%> (ø)
...cdice/game_system/sword_world/transcendent_test.rb 100.00% <0.00%> (ø)
...b/bcdice/game_system/sword_world/rating_options.rb 100.00% <0.00%> (ø)
lib/bcdice/game_system/Bakenokawa.rb 100.00% <0.00%> (ø)
... and 4 more

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 78b0ac8...b914bd5. Read the comment docs.

codecov[bot] avatar Jan 13 '22 19:01 codecov[bot]

お疲れさまです。

max:nD

「nD6から最大値1つを選ぶ」は3D6KH1 で振ることができます。 複雑なのでシステム固有で作成するのはありだと思いますが、できればBCDiceの共通処理を呼び出すほうが良さそうですね。 (現状そういう方法があるのかはわかってませんが…)

また、BCDiceは伝統的にnDXのような記法を取っているので、nKB (Kizuna Bullet)とか nMD (Max Dice)とかのほうが馴染みそうに思います。

ダイスを2回振って12通りの結果を得るテーブル

こちらの表がそのまま使えたりしませんか? https://github.com/bcdice/BCDice/blob/master/lib/bcdice/dice_table/d66_half_grid_table.rb

参考用に公式のPDF https://1706f27e-e6e8-4a4c-890e-926f462395a2.filesusr.com/ugd/500c33_32896aaff73444bea14a8639d2f3d96b.pdf

GenKuzumochi avatar Jan 19 '22 11:01 GenKuzumochi

@GenKuzumochi

ありがとうございます!


「nD6から最大値1つを選ぶ」は3D6KH1 で振ることができます。 複雑なのでシステム固有で作成するのはありだと思いますが、できればBCDiceの共通処理を呼び出すほうが良さそうですね。

そのとおりなので、汎用コマンドのラッパー的な実装に変更しました。 https://github.com/bcdice/BCDice/pull/527/commits/75c754da0fae3b452ad2930377f1cc925079bf68


ダイスを2回振って12通りの結果を得るテーブル

こちらの表がそのまま使えたりしませんか? https://github.com/bcdice/BCDice/blob/master/lib/bcdice/dice_table/d66_half_grid_table.rb

抽出のロジックがそのまま使えたので、そのように置き換えました。 https://github.com/bcdice/BCDice/pull/527/commits/06b9bf5abd9ed44dc03cb37f62fd2b096962d1da

結果を d66 ライクな表記から置き換える必要は依然としてあったので、そのための実装は残っています。

(これはそこそこ一般的に発生しそうな要求だと感じるので、 D66HalfGridTable や D66GridTable 側に出力フォーマットを操作する機能を足そうかとも思いましたが、クラス名に D66 と入っている以上は d66 書式に固定されているべきかとも思い、今回は手を出してません)

ViVi-shark avatar Jan 19 '22 12:01 ViVi-shark

また、BCDiceは伝統的にnDXのような記法を取っているので、nKB (Kizuna Bullet)とか nMD (Max Dice)とかのほうが馴染みそうに思います。

これに関しては、妥当と信じられる落とし所が思いつかず、いまのところ手をつけていません。

nKB

ゲームシステム名を冠する方式は、「1ゲームシステムに1通りのダイスロールのルール」の場合ならばアリだと思いますが、そうでない場合には対称性を欠くので避けたいです。

『キズナバレット』の場合、現時点でも「nDの合計値をもとめるダイスロール」「nDの最大値をもとめるダイスロール」がそれぞれルールとして定義されており、後者のみにゲームシステム名を冠したコマンド名が与えられるのは不自然だと考えました。

nMD

現行のルールの範囲では過不足なく自然だと思うので、これはけっこう有力だと思っています。

いだいている懸念は、「“最小値をもとめるダイスロール”がもし将来的に追加されると不自然になりそう」……という杞憂じみたものなので、まぁ無視して nMD でやってしまってもよいかなとも思わなくもないです。(一般向けに公開されるインタフェースでさえなければ nMD にしたと思います)

(『キズナバレット』のダイスロールルールは、何らかの判定などと切り離して単純に乱数をもとめるルールとして定義されており、最小値抽出が追加される可能性は、ゲームデザインとしては現実的にありえる範疇だと感じています)

……と書いていて思いましたが、 nMADnMAX にすれば丸く収まるのかもしれません。

ViVi-shark avatar Jan 19 '22 12:01 ViVi-shark

いただいているコメントとは何の関係もありませんが、ルールブックに添うようにヘルプメッセージを修正しました。 https://github.com/bcdice/BCDice/pull/527/commits/98a4c780f44cb7e32d84298dbf5dec5ab7596e52 https://github.com/bcdice/BCDice/pull/527/commits/5375b0210f72ea99ee7eefac6bc082a00367d987

ViVi-shark avatar Jan 19 '22 12:01 ViVi-shark

nMADnMAX にすれば丸く収まるのかもしれません。

収まると思ったので、 nMAX で実装しました。 https://github.com/bcdice/BCDice/pull/527/commits/b914bd5808cedeb41d5f203ecf9f2ca1e74c3914

ViVi-shark avatar Jan 19 '22 12:01 ViVi-shark

いつもPRありがとうございます。

最大値をもとめるダイスロールについて

動作について

単に nD6KH1 のエイリアスとし、AddDice.#evalに処理を委譲してください。委譲するのは、成否以外のクリティカルといった特殊な判定結果が存在しないためです。また、出力されるテキストをいじらないのが理想的です。

UnsungDuetにエイリアスの例があるので、参考にしてください。 https://github.com/bcdice/BCDice/blob/master/lib/bcdice/game_system/UnsungDuet.rb

書式について

nKB としてください。max:nDmax(nD)といった書式はBCDiceにある従来の書式からかけ離れ過ぎているため、採用しにくいです。また、nMAX は内容が汎用的すぎるため、個別ゲームシステムよりも共通コマンドの領域にあると思われます。nKBに違和感があるとのことでしたら、別途 nMAX 相当の共通コマンドの提案をするか、nXXの形式で別名の提案をお願いします。

共通コマンドを作る場合、xDyKH1 の別書式として xDyMAX とするのが良いと思います。

ysakasin avatar Jan 20 '22 14:01 ysakasin

@GenKuzumochi レビューありがとうございます。とても助かります。

ysakasin avatar Jan 20 '22 14:01 ysakasin

判定関連のコマンドは共通コマンドに取り入れたので、表類のみ取り込もうと思います。

ysakasin avatar Oct 28 '22 01:10 ysakasin