bcdice 3.6.0 → 3.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +56 -0
- data/i18n/Arianrhod/ja_jp.yml +3 -0
- data/i18n/Emoklore/ja_jp.yml +7 -0
- data/i18n/FutariSousa/ja_jp.yml +431 -0
- data/i18n/LogHorizon/ja_jp.yml +1 -1
- data/i18n/SwordWorld/ja_jp.yml +1 -0
- data/i18n/SwordWorld/zh_hans.yml +7 -0
- data/i18n/SwordWorld2_0/zh_hans.yml +37 -0
- data/i18n/SwordWorld2_5/ja_jp.yml +1 -1
- data/i18n/SwordWorld2_5/zh_hans.yml +57 -0
- data/lib/bcdice/arithmetic/parser.rb +1 -1
- data/lib/bcdice/command/parser.rb +1 -1
- data/lib/bcdice/common_command/add_dice/parser.rb +106 -74
- data/lib/bcdice/common_command/add_dice.rb +1 -1
- data/lib/bcdice/common_command/barabara_dice/parser.rb +1 -1
- data/lib/bcdice/common_command/calc/parser.rb +1 -1
- data/lib/bcdice/common_command/d66_dice.rb +1 -1
- data/lib/bcdice/common_command/reroll_dice/parser.rb +1 -1
- data/lib/bcdice/common_command/tally_dice/parser.rb +1 -1
- data/lib/bcdice/common_command/upper_dice/parser.rb +1 -1
- data/lib/bcdice/game_system/AngelGear.rb +1 -1
- data/lib/bcdice/game_system/AnimaAnimus.rb +1 -1
- data/lib/bcdice/game_system/Arianrhod.rb +4 -4
- data/lib/bcdice/game_system/AssaultEngine.rb +3 -3
- data/lib/bcdice/game_system/Ayabito.rb +170 -4
- data/lib/bcdice/game_system/BeastBindTrinity.rb +1 -1
- data/lib/bcdice/game_system/BeginningIdol.rb +4 -2
- data/lib/bcdice/game_system/BeginningIdol2022.rb +184 -0
- data/lib/bcdice/game_system/BladeOfArcana.rb +3 -3
- data/lib/bcdice/game_system/Bloodorium.rb +68 -0
- data/lib/bcdice/game_system/ConvictorDrive.rb +117 -0
- data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
- data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
- data/lib/bcdice/game_system/CyberpunkRed.rb +2 -6
- data/lib/bcdice/game_system/DeadlineHeroes.rb +1 -1
- data/lib/bcdice/game_system/DungeonsAndDragons5.rb +196 -0
- data/lib/bcdice/game_system/EmbryoMachine.rb +4 -4
- data/lib/bcdice/game_system/Emoklore.rb +8 -8
- data/lib/bcdice/game_system/FutariSousa.rb +31 -5
- data/lib/bcdice/game_system/GURPS.rb +1 -1
- data/lib/bcdice/game_system/GehennaAn.rb +2 -2
- data/lib/bcdice/game_system/GhostLive.rb +144 -0
- data/lib/bcdice/game_system/GoblinSlayer.rb +30 -8
- data/lib/bcdice/game_system/HunterTheReckoning5th.rb +152 -0
- data/lib/bcdice/game_system/IfIfIf.rb +648 -0
- data/lib/bcdice/game_system/Kutulu.rb +95 -0
- data/lib/bcdice/game_system/LostRoyal.rb +1 -1
- data/lib/bcdice/game_system/NobunagasBlackCastle.rb +237 -0
- data/lib/bcdice/game_system/OracleEngine.rb +1 -1
- data/lib/bcdice/game_system/Raisondetre.rb +1 -1
- data/lib/bcdice/game_system/RokumonSekai2.rb +1 -1
- data/lib/bcdice/game_system/SajinsenkiAGuS.rb +154 -0
- data/lib/bcdice/game_system/Sengensyou.rb +59 -0
- data/lib/bcdice/game_system/ShinkuuGakuen.rb +1 -1
- data/lib/bcdice/game_system/ShinobiGami.rb +14 -1
- data/lib/bcdice/game_system/SkynautsBouken.rb +93 -2
- data/lib/bcdice/game_system/StellarLife.rb +1 -1
- data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -1
- data/lib/bcdice/game_system/SwordWorld.rb +2 -2
- data/lib/bcdice/game_system/SwordWorld2_0_SimplifiedChinese.rb +84 -0
- data/lib/bcdice/game_system/SwordWorld2_5_SimplifiedChinese.rb +95 -0
- data/lib/bcdice/game_system/SwordWorld_SimplifiedChinese.rb +29 -0
- data/lib/bcdice/game_system/TherapieSein.rb +2 -2
- data/lib/bcdice/game_system/Torg.rb +1 -1
- data/lib/bcdice/game_system/TorgEternity.rb +54 -18
- data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +26 -12
- data/lib/bcdice/game_system/VisionConnect.rb +135 -0
- data/lib/bcdice/game_system/Warhammer4.rb +4 -0
- data/lib/bcdice/game_system/WorldOfDarkness.rb +54 -50
- data/lib/bcdice/game_system/cthulhu7th/full_auto.rb +1 -1
- data/lib/bcdice/game_system/filled_with/tresure_tables.rb +1 -1
- data/lib/bcdice/game_system/satasupe/tables.rb +1 -1
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +1 -1
- data/lib/bcdice/game_system.rb +15 -0
- data/lib/bcdice/version.rb +1 -1
- 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', '
|
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
|
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([
|
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 = "
|
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+)?(([
|
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(/[
|
45
|
+
modify_list = modifyAddString.scan(/[+-]\d+/) # 修正値を分割して配列へ
|
46
46
|
modify_list.each { |i| modify += i.to_i }
|
47
47
|
|
48
48
|
checkRoll(hasCritical, modify, target)
|
@@ -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 =
|
70
|
+
m = /^1R20(([+-]\d+)*)$/i.match(string)
|
68
71
|
unless m
|
69
72
|
return nil
|
70
73
|
end
|
71
74
|
|
72
|
-
|
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
|
-
|
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 =
|
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
|
-
|
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
|
-
|
140
|
-
|
141
|
-
|
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
|
-
|
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 =
|
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[
|
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 =
|
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 =
|
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 =
|
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 =
|
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
|
-
|
22
|
+
難易度指定:成功数のカウント、判定成功と失敗、Critical処理、Critical Winのチェックを行う
|
21
23
|
(Hungerダイスがある場合)Messy CriticalとBestial Failureチェックを行う
|
22
|
-
例) (難易度)VMF(
|
23
|
-
(難易度)VMF(
|
24
|
+
例) (難易度)VMF(通常ダイス)+(Hungerダイス)
|
25
|
+
(難易度)VMF(通常ダイス)
|
24
26
|
|
25
|
-
|
27
|
+
難易度省略:成功数のカウント、判定失敗、Critical処理、(Hungerダイスがある場合)Bestial Failureチェックを行う
|
26
28
|
判定成功、Messy Criticalのチェックを行わない
|
27
|
-
|
28
|
-
|
29
|
+
Critical Win、(Hungerダイスがある場合)Bestial Failure、Messy Criticalのヒントを出力
|
30
|
+
例) VMF(通常ダイス)+(Hungerダイス)
|
31
|
+
VMF(通常ダイス)
|
29
32
|
|
30
|
-
難易度0
|
31
|
-
例) 0VMF(
|
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+))
|
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
|
-
|
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
|
|