BCDice
BCDice copied to clipboard
『キズナバレット』のダイスボットを追加
ゲームについて
『キズナバレット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」という概念が存在しないので、それに応じた形式に出力を置き換えています。(ゲームに存在しない概念をダイスボットが提示するのは避けるべきだ、という判断です)
Codecov Report
Merging #527 (b914bd5) into master (78b0ac8) will increase coverage by
0.03%
. The diff coverage is100.00%
.
@@ 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.
お疲れさまです。
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
ありがとうございます!
「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 書式に固定されているべきかとも思い、今回は手を出してません)
また、BCDiceは伝統的にnDXのような記法を取っているので、nKB (Kizuna Bullet)とか nMD (Max Dice)とかのほうが馴染みそうに思います。
これに関しては、妥当と信じられる落とし所が思いつかず、いまのところ手をつけていません。
nKB
ゲームシステム名を冠する方式は、「1ゲームシステムに1通りのダイスロールのルール」の場合ならばアリだと思いますが、そうでない場合には対称性を欠くので避けたいです。
『キズナバレット』の場合、現時点でも「nDの合計値をもとめるダイスロール」「nDの最大値をもとめるダイスロール」がそれぞれルールとして定義されており、後者のみにゲームシステム名を冠したコマンド名が与えられるのは不自然だと考えました。
nMD
現行のルールの範囲では過不足なく自然だと思うので、これはけっこう有力だと思っています。
いだいている懸念は、「“最小値をもとめるダイスロール”がもし将来的に追加されると不自然になりそう」……という杞憂じみたものなので、まぁ無視して nMD でやってしまってもよいかなとも思わなくもないです。(一般向けに公開されるインタフェースでさえなければ nMD にしたと思います)
(『キズナバレット』のダイスロールルールは、何らかの判定などと切り離して単純に乱数をもとめるルールとして定義されており、最小値抽出が追加される可能性は、ゲームデザインとしては現実的にありえる範疇だと感じています)
……と書いていて思いましたが、 nMAD
か nMAX
にすれば丸く収まるのかもしれません。
いただいているコメントとは何の関係もありませんが、ルールブックに添うようにヘルプメッセージを修正しました。 https://github.com/bcdice/BCDice/pull/527/commits/98a4c780f44cb7e32d84298dbf5dec5ab7596e52 https://github.com/bcdice/BCDice/pull/527/commits/5375b0210f72ea99ee7eefac6bc082a00367d987
nMAD
かnMAX
にすれば丸く収まるのかもしれません。
収まると思ったので、 nMAX
で実装しました。 https://github.com/bcdice/BCDice/pull/527/commits/b914bd5808cedeb41d5f203ecf9f2ca1e74c3914
いつもPRありがとうございます。
最大値をもとめるダイスロールについて
動作について
単に nD6KH1
のエイリアスとし、AddDice.#eval
に処理を委譲してください。委譲するのは、成否以外のクリティカルといった特殊な判定結果が存在しないためです。また、出力されるテキストをいじらないのが理想的です。
UnsungDuet
にエイリアスの例があるので、参考にしてください。
https://github.com/bcdice/BCDice/blob/master/lib/bcdice/game_system/UnsungDuet.rb
書式について
nKB
としてください。max:nD
やmax(nD)
といった書式はBCDiceにある従来の書式からかけ離れ過ぎているため、採用しにくいです。また、nMAX
は内容が汎用的すぎるため、個別ゲームシステムよりも共通コマンドの領域にあると思われます。nKB
に違和感があるとのことでしたら、別途 nMAX
相当の共通コマンドの提案をするか、nXX
の形式で別名の提案をお願いします。
共通コマンドを作る場合、xDyKH1
の別書式として xDyMAX
とするのが良いと思います。
@GenKuzumochi レビューありがとうございます。とても助かります。
判定関連のコマンドは共通コマンドに取り入れたので、表類のみ取り込もうと思います。