bcdice 3.6.0 → 3.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +56 -0
  3. data/i18n/Arianrhod/ja_jp.yml +3 -0
  4. data/i18n/Emoklore/ja_jp.yml +7 -0
  5. data/i18n/FutariSousa/ja_jp.yml +431 -0
  6. data/i18n/LogHorizon/ja_jp.yml +1 -1
  7. data/i18n/SwordWorld/ja_jp.yml +1 -0
  8. data/i18n/SwordWorld/zh_hans.yml +7 -0
  9. data/i18n/SwordWorld2_0/zh_hans.yml +37 -0
  10. data/i18n/SwordWorld2_5/ja_jp.yml +1 -1
  11. data/i18n/SwordWorld2_5/zh_hans.yml +57 -0
  12. data/lib/bcdice/arithmetic/parser.rb +1 -1
  13. data/lib/bcdice/command/parser.rb +1 -1
  14. data/lib/bcdice/common_command/add_dice/parser.rb +106 -74
  15. data/lib/bcdice/common_command/add_dice.rb +1 -1
  16. data/lib/bcdice/common_command/barabara_dice/parser.rb +1 -1
  17. data/lib/bcdice/common_command/calc/parser.rb +1 -1
  18. data/lib/bcdice/common_command/d66_dice.rb +1 -1
  19. data/lib/bcdice/common_command/reroll_dice/parser.rb +1 -1
  20. data/lib/bcdice/common_command/tally_dice/parser.rb +1 -1
  21. data/lib/bcdice/common_command/upper_dice/parser.rb +1 -1
  22. data/lib/bcdice/game_system/AngelGear.rb +1 -1
  23. data/lib/bcdice/game_system/AnimaAnimus.rb +1 -1
  24. data/lib/bcdice/game_system/Arianrhod.rb +4 -4
  25. data/lib/bcdice/game_system/AssaultEngine.rb +3 -3
  26. data/lib/bcdice/game_system/Ayabito.rb +170 -4
  27. data/lib/bcdice/game_system/BeastBindTrinity.rb +1 -1
  28. data/lib/bcdice/game_system/BeginningIdol.rb +4 -2
  29. data/lib/bcdice/game_system/BeginningIdol2022.rb +184 -0
  30. data/lib/bcdice/game_system/BladeOfArcana.rb +3 -3
  31. data/lib/bcdice/game_system/Bloodorium.rb +68 -0
  32. data/lib/bcdice/game_system/ConvictorDrive.rb +117 -0
  33. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
  34. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
  35. data/lib/bcdice/game_system/CyberpunkRed.rb +2 -6
  36. data/lib/bcdice/game_system/DeadlineHeroes.rb +1 -1
  37. data/lib/bcdice/game_system/DungeonsAndDragons5.rb +196 -0
  38. data/lib/bcdice/game_system/EmbryoMachine.rb +4 -4
  39. data/lib/bcdice/game_system/Emoklore.rb +8 -8
  40. data/lib/bcdice/game_system/FutariSousa.rb +31 -5
  41. data/lib/bcdice/game_system/GURPS.rb +1 -1
  42. data/lib/bcdice/game_system/GehennaAn.rb +2 -2
  43. data/lib/bcdice/game_system/GhostLive.rb +144 -0
  44. data/lib/bcdice/game_system/GoblinSlayer.rb +30 -8
  45. data/lib/bcdice/game_system/HunterTheReckoning5th.rb +152 -0
  46. data/lib/bcdice/game_system/IfIfIf.rb +648 -0
  47. data/lib/bcdice/game_system/Kutulu.rb +95 -0
  48. data/lib/bcdice/game_system/LostRoyal.rb +1 -1
  49. data/lib/bcdice/game_system/NobunagasBlackCastle.rb +237 -0
  50. data/lib/bcdice/game_system/OracleEngine.rb +1 -1
  51. data/lib/bcdice/game_system/Raisondetre.rb +1 -1
  52. data/lib/bcdice/game_system/RokumonSekai2.rb +1 -1
  53. data/lib/bcdice/game_system/SajinsenkiAGuS.rb +154 -0
  54. data/lib/bcdice/game_system/Sengensyou.rb +59 -0
  55. data/lib/bcdice/game_system/ShinkuuGakuen.rb +1 -1
  56. data/lib/bcdice/game_system/ShinobiGami.rb +14 -1
  57. data/lib/bcdice/game_system/SkynautsBouken.rb +93 -2
  58. data/lib/bcdice/game_system/StellarLife.rb +1 -1
  59. data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -1
  60. data/lib/bcdice/game_system/SwordWorld.rb +2 -2
  61. data/lib/bcdice/game_system/SwordWorld2_0_SimplifiedChinese.rb +84 -0
  62. data/lib/bcdice/game_system/SwordWorld2_5_SimplifiedChinese.rb +95 -0
  63. data/lib/bcdice/game_system/SwordWorld_SimplifiedChinese.rb +29 -0
  64. data/lib/bcdice/game_system/TherapieSein.rb +2 -2
  65. data/lib/bcdice/game_system/Torg.rb +1 -1
  66. data/lib/bcdice/game_system/TorgEternity.rb +54 -18
  67. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +26 -12
  68. data/lib/bcdice/game_system/VisionConnect.rb +135 -0
  69. data/lib/bcdice/game_system/Warhammer4.rb +4 -0
  70. data/lib/bcdice/game_system/WorldOfDarkness.rb +54 -50
  71. data/lib/bcdice/game_system/cthulhu7th/full_auto.rb +1 -1
  72. data/lib/bcdice/game_system/filled_with/tresure_tables.rb +1 -1
  73. data/lib/bcdice/game_system/satasupe/tables.rb +1 -1
  74. data/lib/bcdice/game_system/sword_world/rating_parser.rb +1 -1
  75. data/lib/bcdice/game_system.rb +15 -0
  76. data/lib/bcdice/version.rb +1 -1
  77. metadata +26 -6
@@ -24,6 +24,12 @@ module BCDice
24
24
    例)AVO@8[1,4],[2,6],[3,8] AVO@2[6,4],[2,6]
25
25
  ・FT ファンブル表(p76)
26
26
  ・NV 航行表
27
+ ・航行イベント表
28
+  ・NEN 航行系
29
+  ・NEE 遭遇系
30
+  ・NEO 船内系
31
+  ・NEH 困難系
32
+  ・NEL 長旅系
27
33
 
28
34
  ■ 判定セット
29
35
  ・《回避運動》判定+回避(nSNt#f/AVO@ダメージ)
@@ -58,10 +64,95 @@ module BCDice
58
64
  'スポット2つ分進む',
59
65
  'スポット3つ分進む',
60
66
  ]
61
- )
67
+ ),
68
+ "NEN" => DiceTable::Table.new(
69
+ "航行イベント表 航行系",
70
+ "2D6",
71
+ [
72
+ "フナ酔い\nバッドステータス。キミは次のクエスト終了フェイズまで、【移動力】が「1点」なくなり、「ダッシュ」(p101)を行うことができない。\n 空の上で風に揺さぶられていると、まるで自分と世界が混ざったような感覚がするんだ。それを思い出すだけで……ウプッ。",
73
+ "乱流\n次のシーンでは、航行表の結果にかかわらず、航行チェックで飛空艇駒が進む距離がスポット1つ分になる。\n このあたりの風の流れはデタラメだ。これじゃ、風に乗ってフネを進めることなんてできやしない。焦らず、慎重に進むべきだ。",
74
+ "急変\nGMは、フライトエリア上の任意のスポット2つを選択する。そのスポットのイベントタイプは「困難系」に変更される。\n 空の天気はきまぐれだ。天気が変わることを止めることは出来ない。けれども、こういう変わり方はしてほしくなかったな……。",
75
+ "シケ\n次のシーンでは、シーンプレイヤーは航行チェックを行うことができず、「操舵に専念する」を宣言することもできない。\n ぽつり、ぽつりと窓に雨粒が滴り落ちる。こうなってしまえば、フネを進めることはできない。この間に紅茶を1杯、というのもいいだろう。……ティータイムには生憎の空模様だがね。",
76
+ "気流-1\n飛空艇コマを1スポット分戻す。\n 飛空艇に吹く気流は、常に探空士たちの味方をするとは限らない。誰かの追い風は、誰かの向かい風となってしまうこともあるだろう。",
77
+ "穏やかな空\nこの航行イベントには、特に効果はない。\n 見通しのいい空域。風向きも安定しており、舵を取られるようなこともないだろう。気持ちのいい青空の中、白い雲の合間を縫うようにして、フネは進んでいく。",
78
+ "気流+1\n飛空艇コマを+1スポット分進める。\n 他の空域よりも、比較的強い流れが一定の方向に吹き続けている空域。ときに探空士たちの手助けになり、ときに探空士たちに立ちはだかる。どの空域にどんな風が流れているかを見極めて進むのが、空の旅での基本だ。",
79
+ "進路良好!\n飛空艇は【手がかり】を「1つ」得る。\n このあたりはとても見晴らしがいい。雲海から上には雲ひとつ見当たらず、邪魔な浮遊生物たちもいない。",
80
+ "突風+1\n飛空艇コマを1スポット分進める。その後、飛空艇コマのいるスポットのイベントタイプを確認し、そのイベントタイプの航行表を振って、出たイベントの効果を適用する。\n 突然、フネに強風が吹き付ける。なんとか転覆することなく持ち直したけれども、予定していたコースを外れてしまったようだ。なにか起こるかもしれない。警戒を強めたほうがいいだろう。",
81
+ "貿易風\n次のシーンの航行チェックでは、ダイスを振らずに、航行表の結果の中から好きなものを選んで適用することができる。\n 気流が吹く空域の中でも、特に風向きが安定していて、飛空艇乗りたちに空路として好まれている空域。飛翔イカ等の小さな浮遊生物なんかも、よく群がっている。",
82
+ "気流+2\n飛空艇コマを2スポット分進める。\n うまい具合に気流に乗ることが出来れば、飛空艇はその性能以上の働きを見せてくれる。進路良好、この分なら、予定よりも早く目的地につくことができるだろう。"
83
+ ]
84
+ ),
85
+ "NEE" => DiceTable::Table.new(
86
+ "航行イベント表 遭遇系",
87
+ "2D6",
88
+ [
89
+ "風邪\nバッドステータス。キミは次のクエストフェイズ終了時まで、すべての[得意]な【能力】が[得意]でないもとして扱われる。\n 寒空の中見張りをしたのが悪かったのだろうか。 それとも食事? せめて風邪を引くのなら、 旅立つ前にしておいてほしかったな。",
90
+ "敵対的なソラクジラ\n飛空艇は「D46[大揺れ]/1」のダメージを受ける。\n 飛空艇乗りに人気のソラクジラにも、機嫌が悪いときがある。 こんなときに近づいてしまったのなら、運が悪かったとしか言いようがない。 ご愁傷さま。",
91
+ "トラブルメーカー\nキミの【生命点】を「3点」減少させる。\n えへへ、 じゃないよ! なんてことしてくれたんだ!",
92
+ "敵対的な浮遊生物\n飛空艇は「D/3」のダメージを受ける。\n 浮遊生物は 飛空艇に友好的とは限らない。 彼らの生態系に飛び込んでしまったフネには、 彼らなりの出迎え方があるというものだ。",
93
+ "検問\nこのシーンでは、キミはアクションを行うことができない。\n キミたちのフネの上に巨大な影が落ちる。 キミたちのフネの数倍はあろうかという、 王立空軍の巡空 艦だ。「女王陛下万歳!」 赤い服の兵士たちが、 敬礼とともにキミたちの書類仕事を増やしていく。 ……やりたいことだってあったのに。",
94
+ "風光明媚\n船内マップ上にいるすべてのキャラクターは、【生命点】を「1点」回復させる。\n 空を旅していると、 想像を絶するような絶景に恵まれることもある。夕日を受けて茜色に染まる雲海 や、雲を跳ねるソライルカの群れ。 そんな光景を目に焼き付けたとき、 探空士たちは、自分たちが空を旅する意味に気づくんだ。",
95
+ "ソラクジラ\n船内マップ上にいるすべてのキャラクターは、【生命点】を「1D6点」回復させる。\n 雲の中から、 巨大なソラクジラが浮かび上がる。きゅうんという独特の鳴き声をあげて、ゆっくりと、落ちるように雲の下へ戻っていくソラクジラの雄大な姿は、なかなか見られるものじゃない。 息を呑む圧巻の光景に、しばし目を奪われよう。",
96
+ "大漁\n船内マップ上にいるすべてのキャラクターの【生命点】の最大値を「2点」増加する。この効果は重複しない。\n 飛翔イカの群れだ! どうも、 窓から漏れる明かりにつられてやってきたらしい。網をはろう。今夜は新鮮なイカがたらふく食べられそうだ。",
97
+ "気流+1\n飛空艇コマを1スポット分進める。\n 他の空域よりも、比較的強い流れが一定の方向に吹き続けている空域。ときに探空士たちの手助けになり、ときに探空士たちに立ちはだかる。どの空域にどんな風が流れているかを見極めて進むのが、空の旅での基本だ。",
98
+ "ケセランパセラン\nキミは任意の船内マップ上に配置されてるパーツ1つを選択する。そのパーツが【快適度】のキーワード効果がある場合、このセッションの間、その数値は「1点」高いものとして扱う。\n ふわふわとした大きな綿毛のような浮遊生物。その毛のさわり心地は、上級階級のソファにも使われるほど柔らかい。捕まえて飼うことができれば、一服の癒やしをあたえてくれることだろう。",
99
+ "うさこぷたー\nキミの【生命点】を「3点」回復する。\n ふわふわとした大きな綿毛のような浮遊生物。その毛のさわり心地は、上流階級のソファにも使われるほど柔らかい。 捕まえて飼うことができれば、一服の癒やしをあたえてくれることだろう。"
100
+ ]
101
+ ),
102
+ "NEO" => DiceTable::Table.new(
103
+ "航行イベント表 船内系",
104
+ "2D6",
105
+ [
106
+ "二日酔い\nバッドステータス。キミは次のクエストフェイズ終了時まで、すべての行為判定の【ファンブル値】が「1」高いものとして扱う。\n 仲間との楽しい時間、まだ見ぬ素晴らしい景色。空での旅路は、ビールを美味しくするものにあふれている。だからこれは、 空の旅で出くわす様々な危険のひとつだともいえるんだ。嵐や空賊みたいにさ。頭の痛い存在だよ。",
107
+ "イメージダウン\n船内マップ上にいるすべてのキャラクターは、キミに対して獲得している【キズナ】の「支援チェック」にチェックを入れる。\n お前、本当に何したんだよ……。",
108
+ "白熱\nキミは、任意の船内マップ上のキャラクターを1人選ぶ。その後、キミは船内マップ上の、キャラクターが居ない底面マスが2つ以上あるパーツを選び、そのパーツのキャラクターが居ない任意の底面マスにキミと選んだキャラクターを移動させる。このシーン、キミは「交流」以外のアクションを行うことはできない。(パーツを選ぶことができなかった場合、キャラクターの移動は行われず、キミはこのシーン中、アクションを行うことができない)\n ちょっとした暇つぶしのはずだった。キミがカードを取り出したから、相手も乗っただけだ。でも、勝ったほうは嬉しいし、負けた方は悔しい。それだけのことを、キミたちは忘れてはいけなかったんだ。",
109
+ "見てしまった\nキミは、自身が獲得している任意の【キズナ】1つを選ぶ。その【キズナ】は失われる。\n 誰にだって、隠したい秘密のひとつやふたつはあるものだ。それを咎めるのはよくない。偶然それを目にしてしまったキミが悪いわけでもない。運が悪かっただけなんだ。な?",
110
+ "ケンカ\nキミは、自身が獲得している任意の【キズナ】1つを選んで、その「支援チェック」にチェックを入れる。もし、キミが獲得しているすべての【キズナ】に「支援チェック」が入っている場合、かわりにキミの【生命点】を「1D6点」減少させる。\n 些細ないさかいで、チームワークにひびが入ってしまうことはよくあることだ。人の仲は、ときに人生に影を落とす。 もっとも、ケンカする相手もいないよりは、よっぽどましな人生だと思うけどね。",
111
+ "おしゃべり\nこのシーン中、キミが「交流」のアクションを行うとき、キミのいるパーツ内のキャラクター以外のキャラクターも選ぶことができる。\n 船内に張り巡らされた伝声管を通せば、船内の誰とでも連絡をとることができる。いざというときのための設備だが、何気ないおしゃべりに花を咲かせるのもいいものだ。",
112
+ "月が綺麗ですね\nキミは、任意の船内マップ上のキャラクター1人を選ぶ。キミは、そのキャラクターに対する【キズナ】を獲得する。\n 綺麗ですね 夜空に黄色い月が、まんまるな月が輝いている。フネの中はいつだって機関室の音で騒々しいが、月を眺めるときだけはなぜか、しぃんとした静けさを感じるんだ。",
113
+ "プレゼント\nキミは、任意の船内マップ上のキャラクター1人を選ぶ。そのキャラクターは、キミに対する【キズナ】を獲得する。\n ちょっといい感じの包み紙に包まれたチョコレートや、普段は飲まない銘柄の茶葉。特段意味のあるわけでもない置物。幸福とはつまるところ、そういったものと、誰かの思いでできている。",
114
+ "気流+1\n飛空艇コマを1スポット分進める。\n 他の空域よりも、比較的強い流れが一定の方向に吹き続けている空域。ときに探空士たちの手助けになり、ときに探空士たちに立ちはだかる。どの空域にどんな風が流れているかを見極めて進むのが、空の旅での基本だ。",
115
+ "記念日\n船内マップ上にいるすべてのキャラクターは、キミに対して【キズナ】を獲得する。\n 今朝起きてから、みんながどこかよそよそしい。話しかけても要領を得ないし、自分だけのけものにして、なにかの話し合いをしているらしい。いやだな。なにかしたっけな。あれ、そういえば今日って……。",
116
+ "パーティ\n船内マップ上にいるすべてのキャラクターは、それぞれ、任意のキャラクター1人を選ぶ。それぞれのキャラクターは、選んだキャラクターへの【キズナ】を獲得する。\n この日ばっかりは仕事はよそう! 樽いっぱいのビールに、船長秘蔵のワイン。テーブルの上にはとにかく、飲むものと、つまむものでいっぱいだ。"
117
+ ]
118
+ ),
119
+ "NEH" => DiceTable::Table.new(
120
+ "航行イベント表 困難系",
121
+ "2D6",
122
+ [
123
+ "ケガ\nバッドステータス。キミは次のクエストフェイズ終了時まで、【生命点】の最大値が「5点」となる。すでに5点以上の【生命点】があった場合は、あわせて【生命点】が「5点」になる。\n ケガのひとつやふたつが、旅を終える理由になるわけがない。だが、何をするにしてもキミの身に走る激痛は、確実にキミの行く手を阻むだろう。これまで通りの穏やかな旅路とかいかなくなるはずだ。",
124
+ "大災害\n飛空艇は「D/5」のダメージを受ける。このダメージに《回避運動》のスキル効果を使用することはできない。\n 空で旅を続けていれば、どうしようもない状況に出くわすなんてしょっちゅうだ。そんなときどうするのかって? どうしようもないからただ祈る? 決まってるさ。それでもなんとかするんだよ。",
125
+ "自然の猛威\n飛空艇は「D/4」のダメージを受ける。このダメージに《回避運動》のスキル効果を使用することはできない。\n 『塔』の上の人間は、いつか自然を人間が支配するときが来ると思っている。自然の力を身を以て体感する探空士に、そんな考えをもっているヤツはいない。",
126
+ "シケ\n次のシーンでは、シーンプレイヤーは航行チェックを行うことができず、「操舵に専念する」を宣言することもできない。\n ぽつり、ぽつりと窓に雨粒が滴り落ちる。こうなってしまえば、フネを進めることはできない。この間に紅茶を1杯、というのもいいだろう。……ティータイムには生憎の空模様だがね。",
127
+ "落雷\n飛空艇は「D/3」のダメージを受ける。このダメージに《回避運動》のスキル効果を使用することはできない。\n 突如、飛空艇を轟音と、閃光が包む。何事か、とキミが周囲を確認するより先に、フネに稲妻がほとばしり、どこかが焼ける焦げ臭い匂いが、キミの鼻腔をつく。これはまずいぞ。はやくこの空域を抜けるんだ!",
128
+ "ゲリラ豪雨\n飛空艇は「D/3」のダメージを受ける。\n 暴風に呑まれまいと、出力最大で風雨を振り切る。エンジンは赤熱し、吐き出す蒸気が機関室を白く染める。……もってくれよ。こんなところで空に頬りだされるのはゴメンだ。",
129
+ "嵐の前触れ\n次のシーンでは、スポットのイベントタイプや、「その場に留まる」を宣言したかどうかにかかわらず、航行イベントを「航行イベント表:困難系」を使用して決定する。\n 突然目の前に現れたどす黒い雲。気圧計の針がみるみるうちに下がっていき、キミたちに不穏な前触れを告げる。これは、覚悟を決めなければならないかもしれない……。",
130
+ "シケ\n次のシーンでは、シーンプレイヤーは航行チェックを行うことができず、「操舵に専念する」を宣言することもできない。\n ぽつり、ぽつりと窓に雨粒が滴り落ちる。こうなってしまえば、フネを進めることはできない。この間に紅茶を1杯、というのもいいだろう。……ティータイムには生憎の空模様だがね。",
131
+ "気流+2\n飛空艇コマを2スポット分進める。\n このあたりは危険な空域らしいが、このくらいの風を則こなせなければ、プロとは言えない。事実、キミはそれをやってのけた。これが、探空士の仕事ぶりというものさ。",
132
+ "荒れ狂う空\nキミは「身体・感覚:7」の行為判定を3回行う。失敗した回数だけ、飛空艇は「D/3」のダメージを受ける。\n うっかりしてるにしても、これはひどすぎだ! 気づけばフネは暴風域のど真ん中。これを抜けるのは、ただの乱気流と避けるのとはワケが違うんだぞ!",
133
+ "低気圧の中心\nキミは「身体・感覚:9」の行為判定を行う。この判定に成功しない限り、飛空艇コマはフライトエリア上を移動することできず、次のシーンの航行イベントも、自動的に「低気圧の中心」となる。行為判定に成功したかどうかにかかわらず、その後の飛空艇は「D/4」のダメージを受ける。このダメージに《回避運動》のスキル効果を使用することはできない。\n 巨大な渦巻きのような雲。近づくだけでフネは引き寄せられ、一瞬でも舵をはなせば呑み込まれてしまう。その圧倒的な力はさながら、巨大な竜に襲われているかのようだ。"
134
+ ]
135
+ ),
136
+ "NEL" => DiceTable::Table.new(
137
+ "航行イベント表 長旅系",
138
+ "2D6",
139
+ [
140
+ "フィーバー\nバッドステータス。キミは次のクエストフェイズ終了時まで、何らかの行為判定を行うたびに、【生命点】を「1点」減少させる。\n 一周回って、というやつさ。なんだか楽しくなってきてしまった。今なら何をやってもうまくいく気がするし、うまくいかなくても気にならない気がするんだ。",
141
+ "ギスギスした雰囲気\n船内マップ上のキャラクター全員は、自身が獲得している【キズナ】すべての「支援チェック」にチェックを入れなければならない。\n 誰のせいでもない。いうなれば全員のせいなんだ。でも、誰かのせいにせずにはいられなかったのさ。",
142
+ "エンジントラブル\nキミは船内マップ上の、任意の「機関室」カテゴリのパーツ1つを選び、さらにそのパーツ内の任意の、[破損]していないマス1つを選ぶ。そのマスは[破損]する。\n ……ボンッ!",
143
+ "食糧難\n船内マップ上のキャラクター全員の【生命点】が「2点」減少する。\n キミたちの前には、缶詰がひとつだけ。キミたちは顔を突き合わせ、お互いをにらみつける。どのみち、こんなものを奪いあっても、何にもならないというのに。",
144
+ "老朽化\nキミのいるマスが[破損]する。この[破損]によって、キミの【生命点】は減少しない。\n 最近ミシミシというようになってきたな。とは思ったんだ。いつか修理しなきゃ、と思っていたさ。でも、こう、パキッといきなりいっちゃうとは思わなかったんだ。本当だよ。",
145
+ "まだ大丈夫……\nこの航行イベントには、特に効果はない。\n 今の所、このフネにはまだ安全な空の旅を続けるだけの余裕はある。だが、キミたちの脳裏には不安がよぎる。安全はあっても、安心はできないのだ。",
146
+ "先を急ぐ\nこのシーン中、キミはアクションを行うことができない。その代わりに、飛空艇コマを1スポット分移動させる。\n 先を急ごう。焦燥に苛まれる中、キミたち全員がそう思っていた。のんびりと旅を楽しんでいる時間はない。そんな時間は、とっくの昔に過ぎ去っている。",
147
+ "パンデミック\nキミは「フナ酔い」(p91)、「二日酔い」(p93)、「ケガ」(p94)から1つを選ぶ。船内マップ上にいるキャラクター全員は、選ばれた航行イベントに記載されているバッドステータスを受ける。\n 悪いことに、病気というものはときとして人から人へと伝染する。地上の流行り病も大変だというのに、空の上でこうなってしまったらとんでもない。ああ、天はキミたちを見放したのだろうか。",
148
+ "気流+1\n飛空艇コマを1スポット分移動させる。\n しめた!追い風となっている気流を見つける。一刻も早く目的地までたどり着かなければならないキミたちにとって、まさに願ってもないことだ。",
149
+ "こんなときに\nシーンプレイヤーは、「航行イベント表:困難系」(p94)を振ること。振って出た航行イベント表の効果が適用される。\n いくらキミたちが困っていても、自然はそんなことかまいやしない。困難は見境なく訪れ、キミたちをさらに困らせる。",
150
+ "遭難\nこの航行イベント表が発生した時点で、セッションは終了となる。お疲れ様。\n その後、キミたちが再び「塔」へと戻ってくることはなかった。嵐にのまれたのだろうか、空賊や、浮遊生物に襲われたのだろうか。それを知る者は、もうどこにもいない。"
151
+ ]
152
+ ),
62
153
  }.freeze
63
154
 
64
- register_prefix('D', '\d?SN', 'NV', 'FT', 'AVO')
155
+ register_prefix('D', '\d?SN', 'AVO', TABLES.keys)
65
156
 
66
157
  def initialize(command)
67
158
  super(command)
@@ -52,7 +52,7 @@ module BCDice
52
52
 
53
53
  def getJudgeResult(command)
54
54
  case command
55
- when /(\d+)?DA([\d+*\-]*\d)?\[(\d+),(\d+)(,(\d+))?\]/i
55
+ when /(\d+)?DA([\d+*-]*\d)?\[(\d+),(\d+)(,(\d+))?\]/i
56
56
  number = (Regexp.last_match(1) || 1).to_i
57
57
  correction = (Regexp.last_match(2) || 0).to_i
58
58
  single = (Regexp.last_match(3) || 4).to_i
@@ -49,7 +49,7 @@ module BCDice
49
49
 
50
50
  result = Result.new
51
51
  result.text = ''
52
- return result unless command =~ /^(\d+)SR([+\-]?\d+)?(>=(\d+))?$/i
52
+ return result unless command =~ /^(\d+)SR([+-]?\d+)?(>=(\d+))?$/i
53
53
 
54
54
  diceCount = Regexp.last_match(1).to_i
55
55
  modify = Regexp.last_match(2).to_i
@@ -322,7 +322,7 @@ module BCDice
322
322
 
323
323
  if dice_total <= 2
324
324
  sequence.push(rateResults.join(','))
325
- sequence.push("自動的失敗")
325
+ sequence.push(translate("SwordWorld.fumble"))
326
326
  return sequence.join(" > "), false, true
327
327
  end
328
328
 
@@ -345,7 +345,7 @@ module BCDice
345
345
  end
346
346
 
347
347
  if round > 1
348
- round_text = "#{round - 1}回転"
348
+ round_text = translate("SwordWorld.round_text", reroll_count: round - 1)
349
349
  sequence.push(round_text)
350
350
  end
351
351
 
@@ -0,0 +1,84 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bcdice/game_system/SwordWorld2_0'
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class SwordWorld2_0_SimplifiedChinese < SwordWorld2_0
8
+ # ゲームシステムの識別子
9
+ ID = 'SwordWorld2.0:SimplifiedChinese'
10
+
11
+ # ゲームシステム名
12
+ NAME = '剑世界2.0'
13
+
14
+ # ゲームシステム名の読みがな
15
+ SORT_KEY = '国際化:Simplified Chinese:剑世界2.0'
16
+
17
+ # ダイスボットの使い方
18
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
19
+ 自动成功、成功、失败、自动失败会自动判定。
20
+
21
+ ・威力表 (Kx)
22
+  指令为“K威力值+加值”的格式。
23
+  加值的部分不能是像“K20+K30”这样的威力的写法。
24
+  另外,加值可以有多个。
25
+  威力表和骰点一样,可以对其他玩家隐藏。
26
+  例)K20   K10+5   k30   k10+10   Sk10-1   k10+5+2
27
+
28
+ ・暴击值的设定
29
+  暴击值通过“[暴击值]”指定。
30
+  没有指定暴击值时默认为10。
31
+  如果不需要发生暴击,请设定为13。(例如防御时)
32
+  另外也可写成结尾的“@暴击值”的形式。
33
+  例)K20[10]   K10+5[9]   k30[10]   k10[9]+10   k10-5@9
34
+
35
+ ・威力表的减半 (HKx, KxH+N)
36
+  在威力表开头或末尾加上“H”,骰威力表的最终结果就会减半。
37
+  H写在威力表末尾的情况下可以在后面直接跟着修正,会在减半后进行加减运算。
38
+  这种情况下,多个修正需要用括号括起来(否则会解析失败)
39
+  没有指定暴击值的情况下,则视为没有暴击值。
40
+  例)HK20  K20h  HK10-5@9  K10-5@9H  K20gfH  K20+8H+2  K20+8H+(1+1)
41
+
42
+ ・骰子出目修正(命运变转或重击光辉用)
43
+  在指令末尾添加“$修正值”来改变骰子出目。
44
+  可以使用$+1的格式在骰子出目上+修正,或使用$9的格式把骰子出目替换为固定值。
45
+  暴击时只有第一次出目应用这个修正。
46
+  例)K20$+1   K10+5$9   k10-5@9$+2   k10[9]+10$9
47
+
48
+ ・威力上升(斩首刀用) r10
49
+  r后跟上升值,暴击后威力上升r后所填写的上升值点
50
+  例)K20r10 K30+24@8R10 K40+24@8$12r10
51
+
52
+ ・极限命运在末尾加上 gf
53
+  例)K20gf K30+24@8GF K40+24@8$12r5gf
54
+
55
+ ・威力表使用1d+固定值对应 暴击后仍继续 sf4
56
+  例)k10sf4 k0+5sf4@13 k70+26sf3@9
57
+
58
+ ・威力表使用1d+固定值对应 暴击后变回使用2d对应 tf3
59
+  例)k10tf3 k0+5tf4@13 k70+26tf3@9
60
+
61
+ ・超越判定用2d6可写成 2d6@10 的格式加上暴击值。
62
+  例)2D6@10 2D6@10+11>=30
63
+
64
+ ・成长 (Gr)
65
+  在Gr后面加上数字可以进行多次成长。
66
+  例)Gr3
67
+
68
+ ・防御大失败表 (FT)
69
+  抽取防御大失败表。
70
+
71
+ ・缠绕效果表 (TT)
72
+  抽取缠绕效果表。
73
+ INFO_MESSAGE_TEXT
74
+
75
+ register_prefix_from_super_class()
76
+
77
+ def initialize(command)
78
+ super(command)
79
+
80
+ @locale = :zh_hans
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bcdice/game_system/SwordWorld2_5'
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class SwordWorld2_5_SimplifiedChinese < SwordWorld2_5
8
+ # ゲームシステムの識別子
9
+ ID = 'SwordWorld2.5:SimplifiedChinese'
10
+
11
+ # ゲームシステム名
12
+ NAME = '剑世界2.5'
13
+
14
+ # ゲームシステム名の読みがな
15
+ SORT_KEY = '国際化:Simplified Chinese:剑世界2.5'
16
+
17
+ # ダイスボットの使い方
18
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
19
+ 自动成功、成功、失败、自动失败会自动判定。
20
+
21
+ ・威力表 (Kx)
22
+  指令为“K威力值+加值”的格式。
23
+  加值的部分不能是像“K20+K30”这样的威力的写法。
24
+  另外,加值可以有多个。
25
+  威力表和骰点一样,可以对其他玩家隐藏。
26
+  例)K20   K10+5   k30   k10+10   Sk10-1   k10+5+2
27
+
28
+ ・暴击值的设定
29
+  暴击值通过“[暴击值]”指定。
30
+  没有指定暴击值时默认为10。
31
+  如果不需要发生暴击,请设定为13。(例如防御时)
32
+  另外也可写成结尾的“@暴击值”的形式。
33
+  例)K20[10]   K10+5[9]   k30[10]   k10[9]+10   k10-5@9
34
+
35
+ ・威力表的减半 (HKx, KxH+N)
36
+  在威力表开头或末尾加上“H”,骰威力表的最终结果就会减半。
37
+  H写在威力表末尾的情况下可以在后面直接跟着修正,会在减半后进行加减运算。
38
+  这种情况下,多个修正需要用括号括起来(否则会解析失败)
39
+  没有指定暴击值的情况下,则视为没有暴击值。
40
+  例)HK20  K20h  HK10-5@9  K10-5@9H  K20gfH  K20+8H+2  K20+8H+(1+1)
41
+
42
+ ・骰子出目修正(命运变转或重击光辉用)
43
+  在指令末尾添加“$修正值”来改变骰子出目。
44
+  可以使用$+1的格式在骰子出目上+修正,或使用$9的格式把骰子出目替换为固定值。
45
+  暴击时只有第一次出目应用这个修正。
46
+  例)K20$+1   K10+5$9   k10-5@9$+2   k10[9]+10$9
47
+
48
+ ・骰子出目修正(必杀攻击用)
49
+  写成“#修正值“的格式来增加骰子出目。
50
+  暴击时后续骰子也会继续应用修正值。
51
+  例)K20#1   k10-5@9#2
52
+
53
+ ・威力上升(斩首刀用) r5
54
+  r后跟上升值,暴击后威力上升r后所填写的上升值点
55
+  例)K20r5 K30+24@8R5 K40+24@8$12r5
56
+
57
+ ・极限命运在末尾加上 gf
58
+  例)K20gf K30+24@8GF K40+24@8$12r5gf
59
+
60
+ ・威力表使用1d+固定值对应 暴击后仍继续 sf4
61
+  例)k10sf4 k0+5sf4@13 k70+26sf3@9
62
+
63
+ ・威力表使用1d+固定值对应 暴击后变回使用2d对应 tf3
64
+  例)k10tf3 k0+5tf4@13 k70+26tf3@9
65
+
66
+ ・超越判定用2d6可写成 2d6@10 的格式加上暴击值。
67
+  例)2D6@10 2D6@10+11>=30
68
+
69
+ ・成长 (Gr)
70
+  在Gr后面加上数字可以进行多次成长。
71
+  例)Gr3
72
+
73
+ ・防御大失败表 (FT)
74
+  抽取防御大失败表。
75
+
76
+ ・缠绕效果表 (TT)
77
+  抽取缠绕效果表。
78
+
79
+ ・德鲁伊用物理魔法表 (Dru[2~6的结果,7~9的结果,10~12的结果])
80
+  例)Dru[0,3,6]+10-3
81
+
82
+ ・奈落诅咒表 (ABT)
83
+  抽取奈落诅咒表。
84
+ INFO_MESSAGE_TEXT
85
+
86
+ register_prefix_from_super_class()
87
+
88
+ def initialize(command)
89
+ super(command)
90
+
91
+ @locale = :zh_hans
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bcdice/game_system/SwordWorld'
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class SwordWorld_SimplifiedChinese < SwordWorld
8
+ # ゲームシステムの識別子
9
+ ID = 'SwordWorld:SimplifiedChinese'
10
+
11
+ # ゲームシステム名
12
+ NAME = '剑世界'
13
+
14
+ # ゲームシステム名の読みがな
15
+ SORT_KEY = '国際化:Simplified Chinese:剑世界'
16
+
17
+ # ダイスボットの使い方
18
+ HELP_MESSAGE = "・SW 威力表 (Kx[c]+m$f) (x:威力值, c:暴击值, m:加值, f:骰子出目修正)\n"
19
+
20
+ register_prefix_from_super_class()
21
+
22
+ def initialize(command)
23
+ super(command)
24
+
25
+ @locale = :zh_hans
26
+ end
27
+ end
28
+ end
29
+ end
@@ -36,13 +36,13 @@ module BCDice
36
36
  output =
37
37
  case command.upcase
38
38
 
39
- when /(TS|OP)(\d+)?(([+\-]\d+)*)(@(\d+))?$/i
39
+ when /(TS|OP)(\d+)?(([+-]\d+)*)(@(\d+))?$/i
40
40
  hasCritical = (Regexp.last_match(1) == "OP")
41
41
  target = (Regexp.last_match(6) || 0).to_i
42
42
  modify = (Regexp.last_match(2) || 0).to_i
43
43
  modifyAddString = Regexp.last_match(3)
44
44
 
45
- modify_list = modifyAddString.scan(/[+\-]\d+/) # 修正値を分割して配列へ
45
+ modify_list = modifyAddString.scan(/[+-]\d+/) # 修正値を分割して配列へ
46
46
  modify_list.each { |i| modify += i.to_i }
47
47
 
48
48
  checkRoll(hasCritical, modify, target)
@@ -120,7 +120,7 @@ module BCDice
120
120
  ttype = ""
121
121
  value = 0
122
122
 
123
- return nil unless /([RITMDB]T)(\d+([+\-]\d+)*)/i =~ string
123
+ return nil unless /([RITMDB]T)(\d+([+-]\d+)*)/i =~ string
124
124
 
125
125
  type = Regexp.last_match(1)
126
126
  num = Regexp.last_match(2)
@@ -22,7 +22,8 @@ module BCDice
22
22
    振り足しを自動で行い、20の出目が出たときには技能無し値も並記します。
23
23
    出目1の時には「Mishap! 自動失敗!」と出力されます。
24
24
   ・UP
25
-   "UP"で高揚状態のロール(通常の1d20に加え、1d20を追加で振り足し)を行います。
25
+   "UP[m]"で高揚状態のロール(通常の1d20に加え、1d20を追加で振り足し)を行います。
26
+   []内は省略可能。mは技能基本値を入れて下さい。
26
27
    各ロールでの振り足しを自動で行い、20の出目が出たときには技能無し値も並記します。
27
28
    一投目で出目1の時には「Mishap! 自動失敗!」と出力され、二投目は行われません。
28
29
   ・POS
@@ -54,6 +55,8 @@ module BCDice
54
55
  getRollBonusDiceCommandResult(command)
55
56
  end
56
57
 
58
+ private
59
+
57
60
  #################### TORG 1.x ########################
58
61
  def replace_text(string)
59
62
  string = string.gsub(/TG(\d+)/i) { "1R20+#{Regexp.last_match(1)}" }
@@ -64,13 +67,12 @@ module BCDice
64
67
  def torg_check(string)
65
68
  string = replace_text(string)
66
69
 
67
- m = /(^|\s)S?(1R20(([+-]\d+)*))(\s|$)/i.match(string)
70
+ m = /^1R20(([+-]\d+)*)$/i.match(string)
68
71
  unless m
69
72
  return nil
70
73
  end
71
74
 
72
- string = m[2]
73
- mod = m[3]
75
+ mod = m[1]
74
76
 
75
77
  debug(mod)
76
78
  mod = ArithmeticEvaluator.eval(mod) if mod
@@ -99,8 +101,7 @@ module BCDice
99
101
  # ロールコマンド (通常ロール)
100
102
  def getRolld20DiceCommandResult(command)
101
103
  debug("Torg Eternity Dice Roll Command ? ", command)
102
- m = /(^|\s)(S)?(TE)$/i.match(command)
103
- unless m
104
+ unless command == "TE"
104
105
  return nil
105
106
  end
106
107
 
@@ -123,39 +124,74 @@ module BCDice
123
124
  # ロールコマンド (高揚ロール)
124
125
  def getUpRollDiceCommandResult(command)
125
126
  debug("Torg Eternity Dice Roll ( UP ) Command ? ", command)
126
- m = /(^|\s)(S)?(UP)$/i.match(command)
127
+ m = /^UP(\d*)$/i.match(command)
127
128
  unless m
128
129
  return nil
129
130
  end
130
131
 
132
+ sequence = []
133
+ mod = m[1].to_i
131
134
  skilled1, unskilled1, dice_str1, mishap = torg_eternity_dice(false, true)
132
135
  if mishap == 1
133
- output = "d20ロール(高揚) > 1d20[#{dice_str1}] > Mishap! 絶対失敗!"
136
+ sequence = [
137
+ "d20ロール(高揚)",
138
+ "1d20[#{dice_str1}]",
139
+ "Mishap! 絶対失敗!",
140
+ ].compact
134
141
  else
135
142
  skilled2, unskilled2, dice_str2, = torg_eternity_dice(false, false)
136
143
  subtotal_skilled = skilled1 + skilled2
137
144
  subtotal_unskilled = unskilled1 + unskilled2
138
145
  value_skilled = format("%+d", get_torg_eternity_bonus(subtotal_skilled))
139
- if subtotal_skilled != subtotal_unskilled
140
- value_unskilled = format("%+d", get_torg_eternity_bonus(subtotal_unskilled))
141
- output = "d20ロール(高揚) > 1d20[#{dice_str1}] + 1d20[#{dice_str2}] > #{value_skilled}[#{subtotal_skilled}](技能有) / #{value_unskilled}[#{subtotal_unskilled}](技能無)"
146
+ value_unskilled = format("%+d", get_torg_eternity_bonus(subtotal_unskilled))
147
+
148
+ if mod <= 0
149
+ if subtotal_skilled != subtotal_unskilled
150
+ sequence = [
151
+ "d20ロール(高揚)",
152
+ "1d20[#{dice_str1}] + 1d20[#{dice_str2}]",
153
+ "#{value_skilled}[#{subtotal_skilled}](技能有) / #{value_unskilled}[#{subtotal_unskilled}](技能無)",
154
+ ].compact
155
+ else
156
+ sequence = [
157
+ "d20ロール(高揚)",
158
+ "1d20[#{dice_str1}] + 1d20[#{dice_str2}]",
159
+ "#{value_skilled}[#{subtotal_skilled}]",
160
+ ].compact
161
+ end
142
162
  else
143
- output = "d20ロール(高揚) > 1d20[#{dice_str1}] + 1d20[#{dice_str2}] > #{value_skilled}[#{subtotal_skilled}]"
163
+ if subtotal_skilled != subtotal_unskilled
164
+ sequence = [
165
+ "d20ロール(高揚)",
166
+ "1d20[#{dice_str1}] + 1d20[#{dice_str2}] + #{mod}",
167
+ "#{value_skilled}[#{subtotal_skilled}]+#{mod}(技能有) / #{value_unskilled}[#{subtotal_unskilled}]+#{mod}(技能無)",
168
+ format("%+d", (value_skilled.to_i + mod)) + "(技能有) / " + format("%+d", (value_unskilled.to_i + mod)) + "(技能無)",
169
+ ].compact
170
+ else
171
+ sequence = [
172
+ "d20ロール(高揚)",
173
+ "1d20[#{dice_str1}] + 1d20[#{dice_str2}] + #{mod}",
174
+ "#{value_skilled}[#{subtotal_skilled}]+#{mod}",
175
+ format("%+d", (value_skilled.to_i + mod)),
176
+ ].compact
177
+ end
144
178
  end
145
179
  end
146
180
 
181
+ output = sequence.join(" > ")
182
+
147
183
  return output
148
184
  end
149
185
 
150
186
  # ロールコマンド (ポシビリティロール)
151
187
  def getPossibilityRollDiceCommandResult(command)
152
188
  debug("Torg Eternity Possibility Roll Command ? ", command)
153
- m = /(^|\s)(S)?(POS)((\d+)(\+\d+)?)/i.match(command)
189
+ m = /^POS((\d+)(\+\d+)?)$/i.match(command)
154
190
  unless m
155
191
  return nil
156
192
  end
157
193
 
158
- output_modifier = ArithmeticEvaluator.eval(m[4])
194
+ output_modifier = ArithmeticEvaluator.eval(m[1])
159
195
  skilled, unskilled, dice_str, = torg_eternity_dice(true, false)
160
196
  subtotal_skilled = skilled + output_modifier
161
197
  subtotal_unskilled = unskilled + output_modifier
@@ -173,7 +209,7 @@ module BCDice
173
209
  # ダメージボーナスコマンド
174
210
  def getBonusDamageDiceCommandResult(command)
175
211
  debug("TorgEternity Bonus Damage Roll Command ? ", command)
176
- m = /(\d+)(BD)(([+\-]\d+)*)/i.match(command)
212
+ m = /^(\d+)(BD)(([+-]\d+)*)$/i.match(command)
177
213
  unless m
178
214
  return nil
179
215
  end
@@ -193,7 +229,7 @@ module BCDice
193
229
  # 成功レベル表コマンド
194
230
  def getSuccessLevelDiceCommandResult(command)
195
231
  debug("TorgEternity Success Level Table Command ? ", command)
196
- m = /(RT|Result)(-*\d+([+\-]\d+)*)/i.match(command)
232
+ m = /^(RT|Result)(-*\d+([+-]\d+)*)$/i.match(command)
197
233
  unless m
198
234
  return nil
199
235
  end
@@ -213,7 +249,7 @@ module BCDice
213
249
  # ダメージ結果表コマンド
214
250
  def getDamageResultDiceCommandResult(command)
215
251
  debug("TorgEternity Damage Result Table Command ? ", command)
216
- m = /(DT|Damage)(-*\d+([+\-]\d+)*)/i.match(command)
252
+ m = /^(DT|Damage)(-*\d+([+-]\d+)*)$/i.match(command)
217
253
  unless m
218
254
  return nil
219
255
  end
@@ -229,7 +265,7 @@ module BCDice
229
265
  # ロールボーナス表コマンド
230
266
  def getRollBonusDiceCommandResult(command)
231
267
  debug("TorgEternity Roll Bonus Table Command ? ", command)
232
- m = /(BT|Bonus|Total)(\d+)(([+\-]\d+)*)/i.match(command)
268
+ m = /^(BT|Bonus|Total)(\d+)(([+-]\d+)*)$/i.match(command)
233
269
  unless m
234
270
  return nil
235
271
  end
@@ -15,21 +15,24 @@ module BCDice
15
15
  # ダイスボットの使い方
16
16
  HELP_MESSAGE = <<~MESSAGETEXT
17
17
  ・判定コマンド(nVMFx+x)
18
- 注意:難易度は必要成功数を表す
18
+ 注意:Hungerダイスは内数として処理する。
19
+ 例:9ダイスプールでHungerダイス3個ならば、通常ダイス6個、Hungerダイス3個となる。
20
+ また、難易度は必要成功数を表す。
19
21
 
20
- 難易度指定:判定成功と失敗、Critical判定、
22
+ 難易度指定:成功数のカウント、判定成功と失敗、Critical処理、Critical Winのチェックを行う
21
23
  (Hungerダイスがある場合)Messy CriticalとBestial Failureチェックを行う
22
- 例) (難易度)VMF(ダイスプール)+(Hungerダイス)
23
- (難易度)VMF(ダイスプール)
24
+ 例) (難易度)VMF(通常ダイス)+(Hungerダイス)
25
+ (難易度)VMF(通常ダイス)
24
26
 
25
- 難易度省略:判定失敗、Critical、(Hungerダイスがある場合)Bestial Failureチェックを行う
27
+ 難易度省略:成功数のカウント、判定失敗、Critical処理、(Hungerダイスがある場合)Bestial Failureチェックを行う
26
28
  判定成功、Messy Criticalのチェックを行わない
27
- 例) VMF(ダイスプール)+(Hungerダイス)
28
- VMF(ダイスプール)
29
+ Critical Win、(Hungerダイスがある場合)Bestial Failure、Messy Criticalのヒントを出力
30
+ 例) VMF(通常ダイス)+(Hungerダイス)
31
+ VMF(通常ダイス)
29
32
 
30
- 難易度0指定:全てのチェックを行わない
31
- 例) 0VMF(ダイスプール)+(Hungerダイス)
32
- 0VMF(ダイスプール)
33
+ 難易度0指定:Critical処理と成功数のカウントを行い、全てのチェックを行わない
34
+ 例) 0VMF(通常ダイス)+(Hungerダイス)
35
+ 0VMF(通常ダイス)
33
36
 
34
37
  MESSAGETEXT
35
38
 
@@ -44,7 +47,7 @@ module BCDice
44
47
  register_prefix('\d*VMF')
45
48
 
46
49
  def eval_game_system_specific_command(command)
47
- m = /\A(\d+)?(VMF)(\d+)(\+(\d+))?/.match(command)
50
+ m = /\A(\d+)?(VMF)(\d+)(\+(\d+))?$/.match(command)
48
51
  unless m
49
52
  return ''
50
53
  end
@@ -78,12 +81,13 @@ module BCDice
78
81
 
79
82
  def get_roll_result(result_text, success_dice, ten_dice, hunger_ten_dice, hunger_botch_dice, difficulty)
80
83
  result_text = "#{result_text} 成功数=#{success_dice}"
84
+ is_critical = ten_dice >= 2
81
85
 
82
86
  if difficulty > 0
83
87
  result_text = "#{result_text} 難易度=#{difficulty}"
84
88
 
85
89
  if success_dice >= difficulty
86
- is_critical = ten_dice >= 2
90
+ result_text = "#{result_text} 差分=#{success_dice - difficulty}"
87
91
 
88
92
  if hunger_ten_dice > 0 && is_critical
89
93
  return Result.critical("#{result_text}:判定成功! [Messy Critical]")
@@ -106,6 +110,16 @@ module BCDice
106
110
  end
107
111
 
108
112
  return Result.failure("#{result_text}:判定失敗!")
113
+ else
114
+ if hunger_botch_dice > 0
115
+ result_text = "#{result_text}\n 判定失敗なら [Bestial Failure]"
116
+ end
117
+ if hunger_ten_dice > 0 && is_critical
118
+ result_text = "#{result_text}\n 判定成功なら [Messy Critical]"
119
+ elsif is_critical
120
+ result_text = "#{result_text}\n 判定成功なら [Critical Win]"
121
+ end
122
+ return result_text.to_s
109
123
  end
110
124
  end
111
125