bcdice 3.2.0 → 3.3.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 +27 -3
- data/README.md +1 -1
- data/i18n/MagicaLogia/zh_hans.yml +564 -0
- data/i18n/StellarKnights/ja_jp.yml +2 -0
- data/i18n/StellarKnights/ko_kr.yml +498 -0
- data/i18n/zh_hans.yml +7 -0
- data/lib/bcdice/command/parsed.rb +11 -3
- data/lib/bcdice/command/parser.rb +179 -100
- data/lib/bcdice/common_command/barabara_dice/node.rb +2 -2
- data/lib/bcdice/common_command/barabara_dice/result.rb +6 -0
- data/lib/bcdice/game_system.rb +3 -0
- data/lib/bcdice/game_system/Amadeus.rb +110 -93
- data/lib/bcdice/game_system/AnimaAnimus.rb +15 -8
- data/lib/bcdice/game_system/BattleTech.rb +109 -28
- data/lib/bcdice/game_system/BeastBindTrinity.rb +28 -12
- data/lib/bcdice/game_system/BlindMythos.rb +38 -37
- data/lib/bcdice/game_system/CodeLayerd.rb +39 -39
- data/lib/bcdice/game_system/ColossalHunter.rb +34 -47
- data/lib/bcdice/game_system/DeadlineHeroes.rb +9 -8
- data/lib/bcdice/game_system/DoubleCross.rb +2 -0
- data/lib/bcdice/game_system/Emoklore.rb +22 -17
- data/lib/bcdice/game_system/FutariSousa.rb +12 -10
- data/lib/bcdice/game_system/GardenOrder.rb +11 -6
- data/lib/bcdice/game_system/KemonoNoMori.rb +25 -38
- data/lib/bcdice/game_system/KurayamiCrying.rb +86 -0
- data/lib/bcdice/game_system/LiveraDoll.rb +254 -304
- data/lib/bcdice/game_system/LogHorizon.rb +10 -7
- data/lib/bcdice/game_system/MagicaLogia_SimplifiedChinese.rb +66 -0
- data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +2 -1
- data/lib/bcdice/game_system/Nechronica.rb +57 -91
- data/lib/bcdice/game_system/NinjaSlayer.rb +2 -3
- data/lib/bcdice/game_system/SRS.rb +17 -16
- data/lib/bcdice/game_system/SamsaraBallad.rb +38 -11
- data/lib/bcdice/game_system/Satasupe.rb +31 -31
- data/lib/bcdice/game_system/ScreamHighSchool.rb +3 -3
- data/lib/bcdice/game_system/Skynauts.rb +101 -140
- data/lib/bcdice/game_system/StarryDolls.rb +318 -0
- data/lib/bcdice/game_system/SteamPunkers.rb +11 -6
- data/lib/bcdice/game_system/StellarKnights.rb +28 -12
- data/lib/bcdice/game_system/StellarKnights_Korean.rb +79 -0
- data/lib/bcdice/game_system/TokumeiTenkousei.rb +4 -3
- data/lib/bcdice/game_system/TrinitySeven.rb +275 -276
- data/lib/bcdice/game_system/Utakaze.rb +52 -47
- data/lib/bcdice/game_system/Yggdrasill.rb +1 -1
- data/lib/bcdice/game_system/ZettaiReido.rb +20 -25
- data/lib/bcdice/version.rb +1 -1
- metadata +8 -2
@@ -0,0 +1,318 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bcdice/dice_table/chain_table"
|
4
|
+
require "bcdice/dice_table/sai_fic_skill_table"
|
5
|
+
require "bcdice/dice_table/table"
|
6
|
+
require "bcdice/format"
|
7
|
+
|
8
|
+
module BCDice
|
9
|
+
module GameSystem
|
10
|
+
class StarryDolls < Base
|
11
|
+
# ゲームシステムの識別子
|
12
|
+
ID = "StarryDolls"
|
13
|
+
|
14
|
+
# ゲームシステム名
|
15
|
+
NAME = "スタリィドール"
|
16
|
+
|
17
|
+
# ゲームシステム名の読みがな
|
18
|
+
SORT_KEY = "すたりいとおる"
|
19
|
+
|
20
|
+
# ダイスボットの使い方
|
21
|
+
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
22
|
+
・行為判定 nD6±m@s>=t
|
23
|
+
nD6の行為判定を行う。スペシャル/ファンブル/成功/失敗を判定。
|
24
|
+
n: ダイス数
|
25
|
+
m: 修正(省略可)
|
26
|
+
s: スペシャル値(省略時 12)
|
27
|
+
t: 目標値(?指定可)
|
28
|
+
・各種表
|
29
|
+
・ランダム特技決定表 RTTn (n:分野番号、省略可能)
|
30
|
+
1願望 2元素 3星使い 4動作 5召喚 6人間性
|
31
|
+
・ランダム分野表 RCT
|
32
|
+
・ランダム星座表 HOR
|
33
|
+
ランダム星座表A HORA/ランダム星座表B HORB
|
34
|
+
・主人関係表 MRT/関係属性表 RAT
|
35
|
+
・奇跡表 MIR
|
36
|
+
・戦果表 BRT
|
37
|
+
・事件表 TRO
|
38
|
+
・遭遇表 ENC
|
39
|
+
・致命傷表 FWT
|
40
|
+
・カタストロフ表 CAT
|
41
|
+
・回想表
|
42
|
+
〈魔術師の庭〉回想表 JDSRT/〈セブンス・ヘブン〉回想表 SHRT
|
43
|
+
/〈祝福の鐘〉回想表 BCRT/〈オメガ探偵社〉回想表 ODRT
|
44
|
+
・D66ダイスあり
|
45
|
+
INFO_MESSAGE_TEXT
|
46
|
+
|
47
|
+
def initialize(command)
|
48
|
+
super(command)
|
49
|
+
|
50
|
+
@d66_sort_type = D66SortType::ASC
|
51
|
+
end
|
52
|
+
|
53
|
+
def eval_game_system_specific_command(command)
|
54
|
+
action_roll(command) ||
|
55
|
+
roll_tables(command, TABLES) ||
|
56
|
+
RTT.roll_command(@randomizer, command)
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
SPECIAL = "スペシャル(【星命力】を1D6点回復)"
|
62
|
+
FUMBLE = "ファンブル(ランダムなサインが【蝕】状態へ変化)"
|
63
|
+
|
64
|
+
RTT = DiceTable::SaiFicSkillTable.new(
|
65
|
+
[
|
66
|
+
["願望", ["創造", "研究", "守護", "絆", "*かに座", "夢", "*しし座", "自由", "恋愛", "脚光", "世界"]],
|
67
|
+
["元素", ["光", "雷", "*ふたご座", "水", "火", "風", "木", "氷", "*おとめ座", "土", "闇"]],
|
68
|
+
["星使い", ["*おうし座", "幸運", "幻影", "テレパシー", "予知夢", "星読み", "治癒", "天候", "変身", "時間停止", "*てんびん座"]],
|
69
|
+
["動作", ["*おひつじ座", "精密", "高速", "怪力", "隠密", "飛行", "言霊", "模倣", "軽業", "歌舞", "*さそり座"]],
|
70
|
+
["召喚", ["リボン", "照明具", "*うお座", "料理", "獣", "花", "乗り物", "書物", "*いて座", "武器", "財宝"]],
|
71
|
+
["人間性", ["勇気", "知恵", "熱意", "調和", "*みずがめ座", "愛情", "*やぎ座", "センス", "根気", "礼節", "理性"]],
|
72
|
+
]
|
73
|
+
)
|
74
|
+
|
75
|
+
def action_roll(command)
|
76
|
+
parser = Command::Parser.new("D6", round_type: round_type)
|
77
|
+
.has_prefix_number
|
78
|
+
.restrict_cmp_op_to(:>=)
|
79
|
+
.enable_critical
|
80
|
+
.enable_question_target
|
81
|
+
cmd = parser.parse(command)
|
82
|
+
return nil unless cmd
|
83
|
+
|
84
|
+
times = cmd.prefix_number
|
85
|
+
return nil if times < 1
|
86
|
+
|
87
|
+
fumble = 2
|
88
|
+
special = cmd.critical || 12
|
89
|
+
|
90
|
+
if special <= fumble
|
91
|
+
special = fumble + 1 # p.180
|
92
|
+
cmd.critical = special
|
93
|
+
end
|
94
|
+
|
95
|
+
dice_list = @randomizer.roll_barabara(times, 6)
|
96
|
+
dice_total = dice_list.sum()
|
97
|
+
total = dice_total + cmd.modify_number
|
98
|
+
|
99
|
+
result =
|
100
|
+
if dice_total <= fumble
|
101
|
+
Result.fumble(FUMBLE)
|
102
|
+
elsif dice_total >= special
|
103
|
+
Result.critical(SPECIAL)
|
104
|
+
elsif cmd.question_target?
|
105
|
+
Result.new
|
106
|
+
elsif total >= cmd.target_number
|
107
|
+
Result.success("成功")
|
108
|
+
else
|
109
|
+
Result.failure("失敗")
|
110
|
+
end
|
111
|
+
|
112
|
+
sequence = [
|
113
|
+
"(#{cmd.to_s(:after_modify_number)})",
|
114
|
+
"#{dice_total}[#{dice_list.join(',')}]#{Format.modifier(cmd.modify_number)}",
|
115
|
+
total,
|
116
|
+
result.text
|
117
|
+
].compact
|
118
|
+
|
119
|
+
result.text = sequence.join(" > ")
|
120
|
+
result
|
121
|
+
end
|
122
|
+
|
123
|
+
HOR_TABLE_A = DiceTable::Table.new(
|
124
|
+
"ランダム星座表A", # p.177
|
125
|
+
"1D6",
|
126
|
+
[
|
127
|
+
"おひつじ座",
|
128
|
+
"おうし座",
|
129
|
+
"ふたご座",
|
130
|
+
"かに座",
|
131
|
+
"しし座",
|
132
|
+
"おとめ座",
|
133
|
+
]
|
134
|
+
)
|
135
|
+
|
136
|
+
HOR_TABLE_B = DiceTable::Table.new(
|
137
|
+
"ランダム星座表B", # p.177
|
138
|
+
"1D6",
|
139
|
+
[
|
140
|
+
"てんびん座",
|
141
|
+
"さそり座",
|
142
|
+
"いて座",
|
143
|
+
"やぎ座",
|
144
|
+
"みずがめ座",
|
145
|
+
"うお座",
|
146
|
+
]
|
147
|
+
)
|
148
|
+
|
149
|
+
TABLES = {
|
150
|
+
"HORA" => HOR_TABLE_A,
|
151
|
+
"HORB" => HOR_TABLE_B,
|
152
|
+
"HOR" => DiceTable::ChainTable.new(
|
153
|
+
"ランダム星座表", # p.177
|
154
|
+
"1D6",
|
155
|
+
[
|
156
|
+
HOR_TABLE_A,
|
157
|
+
HOR_TABLE_A,
|
158
|
+
HOR_TABLE_A,
|
159
|
+
HOR_TABLE_B,
|
160
|
+
HOR_TABLE_B,
|
161
|
+
HOR_TABLE_B,
|
162
|
+
]
|
163
|
+
),
|
164
|
+
"MRT" => DiceTable::Table.new(
|
165
|
+
"主人関係表", # p.186
|
166
|
+
"1D6",
|
167
|
+
[
|
168
|
+
"親",
|
169
|
+
"友人",
|
170
|
+
"恩師",
|
171
|
+
"相棒",
|
172
|
+
"上司",
|
173
|
+
"恋人",
|
174
|
+
]
|
175
|
+
),
|
176
|
+
"RAT" => DiceTable::Table.new(
|
177
|
+
"関係属性表", # p.186
|
178
|
+
"1D6",
|
179
|
+
[
|
180
|
+
"尊敬/優越感",
|
181
|
+
"理解/反抗",
|
182
|
+
"愉快/恐怖",
|
183
|
+
"友情/競争",
|
184
|
+
"恋心/不気味",
|
185
|
+
"庇護/劣等感",
|
186
|
+
]
|
187
|
+
),
|
188
|
+
"MIR" => DiceTable::Table.new(
|
189
|
+
"奇跡表", # p.177
|
190
|
+
"1D6",
|
191
|
+
[
|
192
|
+
"空から降る一筋の光が星人形の体を包み込み、不思議な力を与えてくれる。",
|
193
|
+
"守護星座に関連する人や動物が現れ、星人形に力を貸してくれる。",
|
194
|
+
"運命が不自然なまでに星人形の味方をし、すべてが上手く進んでいく。",
|
195
|
+
"星人形の必要とするものが空中から次々と現れる。",
|
196
|
+
"少しの間だけ〈劇場〉の住人が正気に戻り、一致団結して星人形に協力してくれる。",
|
197
|
+
"体中に星命力が溢れ出し、限界を超えた大規模な星術を扱えるようになる。",
|
198
|
+
]
|
199
|
+
),
|
200
|
+
"BRT" => DiceTable::Table.new(
|
201
|
+
"戦果表", # p.191
|
202
|
+
"1D6",
|
203
|
+
[
|
204
|
+
"所持しているアイテムから一つを選び、同じものをもう一つ獲得する。所持していない場合はもう一度戦果表を使用する。",
|
205
|
+
"時計を獲得する。",
|
206
|
+
"ロザリオを獲得する。",
|
207
|
+
"コンパスを獲得する。",
|
208
|
+
"星の欠片を獲得する。",
|
209
|
+
"自由なアイテムを一つ獲得する。",
|
210
|
+
]
|
211
|
+
),
|
212
|
+
"TRO" => DiceTable::Table.new(
|
213
|
+
"事件表", # p.193
|
214
|
+
"2D6",
|
215
|
+
[
|
216
|
+
"〈変晶体〉を手にした途端、人形兵の軍勢に見つかり追われることに……! なんとかして振り切ろう!",
|
217
|
+
"〈変晶体〉を乗せた物体が空を飛んでいる。接触する方法はないだろうか。",
|
218
|
+
"不気味な商人が現れた。価値あるものを差し出せば、〈変晶体〉と交換してくれるという。上手く交渉しよう。",
|
219
|
+
"〈変晶体〉の影響で理性を失った人々が大喧嘩をしている。これでは浄化するのも困難だ……仲間と協力して仲裁しよう。",
|
220
|
+
"〈変晶体〉は建物の中にあるようだが、警備が厳重だ。どうやって侵入しようか……。",
|
221
|
+
"罪のない人たちが〈変晶体〉を持つ敵に捕らわれているようだ。仲間と共に人々を助け出し、〈変晶体〉を浄化しよう。",
|
222
|
+
"〈変晶体〉に操られた人々がこちらへ敵意の目を向けている。危害は加えたくないが、一体どうすれば……!",
|
223
|
+
"〈変晶体〉に取り憑かれた動物が、仲間に襲いかかった! 早く助け出さなければ!",
|
224
|
+
"仲間が敵にさらわれてしまった! 敵は〈変晶体〉も持っているようだ。追跡して仲間を助けなければ!",
|
225
|
+
"入り組んだ場所に迷い込んでしまった。〈変晶体〉の気配は近いはずだが、どこにあるのだろう?",
|
226
|
+
"〈変晶体〉は深い水の底に沈んでいるようだ。浄化する方法はないだろうか……。",
|
227
|
+
]
|
228
|
+
),
|
229
|
+
"ENC" => DiceTable::Table.new(
|
230
|
+
"遭遇表", # p.193
|
231
|
+
"1D6",
|
232
|
+
[
|
233
|
+
"『弁士』コオロギのパルランテ\n指定特技: 《調和/人間性5》\n効果: プラネタリカードルール非採用時、このセッション中【運命力】を1点上昇させる。\nプラネタリカードルール採用時、ベネフィックを1枚獲得する。",
|
234
|
+
"『航空士』鳩のコロンボ\n指定特技: 《熱意/人間性4》\n効果: コンパスを1つ獲得する。",
|
235
|
+
"『医者』カラスのコルヴォ\n指定特技: 《礼節/人間性11》\n効果: 星の欠片を1つ獲得する。",
|
236
|
+
"『御者』むく犬のメドーラ\n指定特技: 《知恵/人間性3》\n効果: 時計を1つ獲得する。",
|
237
|
+
"『道化』ピエロのアルレッキーノ\n指定特技: 《センス/人間性9》\n効果: 【関係】の使用チェックをすべてはずす。使用チェックがなければ、アルレッキーノに【関係】を獲得する。",
|
238
|
+
"『少女』ヤギのカプレッティーナ\n指定特技: 《愛情/人間性7》\n効果: ロザリオを1つ獲得する。",
|
239
|
+
]
|
240
|
+
),
|
241
|
+
"FWT" => DiceTable::Table.new(
|
242
|
+
"致命傷表", # p.184
|
243
|
+
"1D6",
|
244
|
+
[
|
245
|
+
"敵の攻撃は星人形の瞳を直撃し、宝石は鮮血のごとく砕け散った。PCは形骸化する。",
|
246
|
+
"なんとか致命傷は免れたが、もう戦闘は難しそうだ……。PCは戦闘から脱落する。",
|
247
|
+
"最後の力をふり絞り、星人形は持っていたものを仲間へ投げ渡した。PCは所持しているアイテムを誰かに譲渡したのち戦闘から脱落する。",
|
248
|
+
"星人形は自分の気持ちを誰かに託しながら、地面に倒れ込んだ。仲間のうち誰か一人がPCに対する【関係】を獲得したのち、PCは戦闘から脱落する。",
|
249
|
+
"ただでやられるわけにはいかない……! 星人形は捨て身の攻撃を放つ。PCはエネミー1体に霧装の【耐久値】と同じダメージを与えたのち、戦闘から脱落する。",
|
250
|
+
"こんなところで倒れるわけにはいかない。星人形は【星命力】1点で戦闘に復帰する。再度【星命力】が0になった場合、PCは致命傷表を使用せず戦闘から脱落する。",
|
251
|
+
]
|
252
|
+
),
|
253
|
+
"CAT" => DiceTable::Table.new(
|
254
|
+
"カタストロフ表", # p.198
|
255
|
+
"1D6",
|
256
|
+
[
|
257
|
+
"〈劇場〉全体が大きく揺れ、空間に裂け目が生じる。現実は塗り替えられ……〈変容区〉と化した。最も恐れていた事態に、星人形たちは呆然と立ち尽くすほかなかった。",
|
258
|
+
"激しい地鳴りと共に人形兵たちの増援が押し寄せ、形成が逆転してしまう。星人形たちはやむを得ず〈劇場〉を後にした。",
|
259
|
+
"「時間切れです」戦場に〈悪魔派〉がやってきた。星座の加護は遮られ、星人形の体から力が抜けていく。「いずれまた」という声を最後に星人形の意識は途絶え……現実世界で目を覚ました。",
|
260
|
+
"突如〈型堕ち〉が苦しみ始め、体に残っていた〈悪夢の霧〉を爆発させた。意識を失った星人形たちが目覚めたのは現実世界だった。……まだ再挑戦する時間はあるはずだ。",
|
261
|
+
"〈型堕ち〉は自分を制御できなくなり、〈悪夢の霧〉に呑まれて姿を消してしまった。主を失った〈劇場〉は成長も衰退もしないまま、鏡の中に残り続けることになるだろう。",
|
262
|
+
"〈型堕ち〉の体は膨張する〈悪夢の霧〉の圧力に耐えきれず、宝石を内側から破壊してしまった。〈型堕ち〉に残された命はあとわずかだ。星人形は〈型堕ち〉の最期を看取ることになる。",
|
263
|
+
]
|
264
|
+
),
|
265
|
+
"JDSRT" => DiceTable::Table.new(
|
266
|
+
"〈魔術師の庭〉回想表", # p.187
|
267
|
+
"1D6",
|
268
|
+
[
|
269
|
+
"仕事に必要な道具が不足し、急遽買い出しへ。荷物が重くなりそうだからと、キーNPCも手伝ってくれることになった。",
|
270
|
+
"キーNPCはあなたの仕事に感謝し、プレゼントを贈ってくれた。箱の中身はキーNPCのお気に入りの一品らしい。",
|
271
|
+
"主人はお客さんと話し込んでいる。あなたが部屋の片隅で退屈そうにしていると、キーNPCと目が合った。",
|
272
|
+
"整備作業がひと区切りついたところで、キーNPCがお茶とお菓子を持ってきてくれた。少し休憩しよう。",
|
273
|
+
"整備中、星人形の体に傷が見つかった。どこで付けたのだろう? あなたはキーNPCに聞いてみることにした。",
|
274
|
+
"部屋を移動中、あるものが目に留まる。それはキーNPCにとって思い出深いものであるようだ。",
|
275
|
+
]
|
276
|
+
),
|
277
|
+
"SHRT" => DiceTable::Table.new(
|
278
|
+
"〈セブンス・ヘブン〉回想表", # p.187
|
279
|
+
"1D6",
|
280
|
+
[
|
281
|
+
"掃除をしていたら、お家のものを引っ掛けて壊してしまった! そこへキーNPCがやってきて……。",
|
282
|
+
"キーNPCはちょっとお疲れの様子。あなたはお茶とお菓子を持って労ってあげることにした。",
|
283
|
+
"料理の材料を取りたいのに、棚に手が届かない……。あなたはキーNPCに助けを求めた。",
|
284
|
+
"キーNPCの仕事をお手伝い。こんな体験は初めてだ! あなたはワクワクしながら挑戦する。",
|
285
|
+
"お客さんの星人形に制服を貸し出して、一緒に写真撮影をすることに。照れてるだろうか? それともノリノリ?",
|
286
|
+
"今日はセブンス・ヘブンのファン感謝イベント。会場には、差し入れを持ったキーNPCの姿もあった。",
|
287
|
+
]
|
288
|
+
),
|
289
|
+
"BCRT" => DiceTable::Table.new(
|
290
|
+
"〈祝福の鐘〉回想表", # p.187
|
291
|
+
"1D6",
|
292
|
+
[
|
293
|
+
"終演後のエントランスで挨拶をしていると、キーNPCが誰かと話し込んでいる。ちょっと様子を見に行こう。",
|
294
|
+
"次の公演に向けて衣装合わせ。どんな役をやる? 衣装のフィット具合はどう? 確認していると、キーNPCが様子を見にやってきた。",
|
295
|
+
"基礎練習。地道なルーチンワークの間、スパイスとなるのはキーNPCとのおしゃべりだ。",
|
296
|
+
"学校での公演。終わったあと、子どもたちに囲まれてもみくちゃになる。キーNPCは、子どもが好きだったっけ?",
|
297
|
+
"地方巡業。一緒に移動するキーNPCと、あれこれ話し込んでいると、意外な話題に移っていって……。",
|
298
|
+
"撤収作業も終わりに近づくステージの上。誰もいない客席に向けて、キーNPCが遠い目をしている。",
|
299
|
+
]
|
300
|
+
),
|
301
|
+
"ODRT" => DiceTable::Table.new(
|
302
|
+
"〈オメガ探偵社〉回想表", # p.187
|
303
|
+
"1D6",
|
304
|
+
[
|
305
|
+
"事件調査のため、キーNPCに聞き込み。何か有益な情報は出るだろうか。世間話になってしまうかも?",
|
306
|
+
"依頼もなく平和な探偵事務所へ、キーNPCがやってきた。これが事件の序章に……なるんだろうか?",
|
307
|
+
"みんなで、近所の家のペット探し。キーNPCの見知ったペットらしく、ちょっと心配そうな顔をしている。",
|
308
|
+
"警察の事件調査を手伝うことに。キーNPCは、事件の重要参考人として呼び出されているようだ。",
|
309
|
+
"地道な張り込み調査をしているところへ、キーNPCがやってきた。あなたに差し入れもあるようだ。",
|
310
|
+
"華麗なる事件解決! 主人の推理をたくさん手伝うことができた。キーNPCも、あなたに一目置いてくれそう。",
|
311
|
+
]
|
312
|
+
),
|
313
|
+
}.freeze
|
314
|
+
|
315
|
+
register_prefix('\d+D6', RTT.prefixes, TABLES.keys)
|
316
|
+
end
|
317
|
+
end
|
318
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'bcdice/base'
|
3
4
|
require 'bcdice/dice_table/d66_range_table'
|
4
5
|
|
5
6
|
module BCDice
|
@@ -52,19 +53,23 @@ module BCDice
|
|
52
53
|
|
53
54
|
result =
|
54
55
|
if dice_list.all? { |x| x == 1 }
|
55
|
-
"ファンブル"
|
56
|
+
Result.fumble("ファンブル")
|
56
57
|
elsif target_number
|
57
|
-
successes >= target_number ? "成功" : "失敗"
|
58
|
+
successes >= target_number ? Result.success("成功") : Result.failure("失敗")
|
59
|
+
else
|
60
|
+
Result.new
|
58
61
|
end
|
59
62
|
|
60
|
-
|
63
|
+
result.text = [
|
61
64
|
"(#{command})",
|
62
65
|
"[#{dice_list_text}]",
|
63
66
|
"成功数:#{successes}, 失敗数:#{failures}",
|
64
|
-
result
|
65
|
-
].compact
|
67
|
+
result.text
|
68
|
+
].compact.join(" > ")
|
66
69
|
|
67
|
-
|
70
|
+
result.critical = dice_list.include?(6)
|
71
|
+
|
72
|
+
return result
|
68
73
|
end
|
69
74
|
|
70
75
|
# スチームパンカーズ用のテーブル
|
@@ -17,12 +17,15 @@ module BCDice
|
|
17
17
|
|
18
18
|
# ダイスボットの使い方
|
19
19
|
HELP_MESSAGE = <<~MESSAGETEXT
|
20
|
-
|
20
|
+
・アタック判定 nSK[d][,k>l,...]
|
21
21
|
[]内は省略可能。
|
22
22
|
n: ダイス数、d: アタック判定における対象の防御力、k, l: ダイスの出目がkならばlに変更(アマランサスのスキル「始まりの部屋」用)
|
23
23
|
d省略時はダイスを振った結果のみ表示。(nSKはnB6と同じ)
|
24
24
|
|
25
25
|
4SK: ダイスを4個振って、その結果を表示
|
26
|
+
4+2SK: ダイスを4+2 (=6) 個振って、その結果を表示
|
27
|
+
5/2SK: ダイスを5個の半分 (=2) 個振って、その結果を表示
|
28
|
+
(5+3)/2SK: ダイスを(5+3)個の半分 (=4) 個振って、その結果を表示
|
26
29
|
5SK3: 【アタック判定:5ダイス】、対象の防御力を3として成功数を表示
|
27
30
|
3SK,1>6: ダイスを3個振り、出目が1のダイスを全て6に変更し、その結果を表示
|
28
31
|
6SK4,1>6,2>6: 【アタック判定:6ダイス】、出目が1と2のダイスを全て6に変更、対象の防御力を4として成功数を表示
|
@@ -73,10 +76,14 @@ module BCDice
|
|
73
76
|
def eval_game_system_specific_command(command)
|
74
77
|
command = command.upcase
|
75
78
|
|
76
|
-
if (table = TABLES[command])
|
79
|
+
if (table = self.class::TABLES[command])
|
77
80
|
table.roll(@randomizer)
|
78
|
-
elsif (m =
|
79
|
-
|
81
|
+
elsif (m = %r{([()+/\d]+)SK(\d)?((,\d>\d)+)?}.match(command))
|
82
|
+
num_dices = Arithmetic.eval(m[1], round_type: RoundType::FLOOR)
|
83
|
+
|
84
|
+
unless num_dices.nil?
|
85
|
+
resolute_action(num_dices, m[2] && m[2].to_i, m[3])
|
86
|
+
end
|
80
87
|
elsif command == 'STB2'
|
81
88
|
roll_all_situation_b2_tables
|
82
89
|
elsif command == 'ALLS'
|
@@ -94,13 +101,15 @@ module BCDice
|
|
94
101
|
# @param [Integer] num_dices
|
95
102
|
# @param [Integer | nil] defence
|
96
103
|
# @param [String] dice_change_text
|
97
|
-
# @
|
98
|
-
|
99
|
-
def resolute_action(num_dices, defence, dice_change_text, command)
|
104
|
+
# @return [Result, String]
|
105
|
+
def resolute_action(num_dices, defence, dice_change_text)
|
100
106
|
dices = @randomizer.roll_barabara(num_dices, 6).sort
|
101
107
|
dice_text = dices.join(",")
|
102
108
|
|
103
|
-
output = "(#{
|
109
|
+
output = "(#{remake_command(num_dices, defence, dice_change_text)}) > #{dice_text}"
|
110
|
+
if dices.empty?
|
111
|
+
return output + translate("StellarKnights.SK.no_dice_error")
|
112
|
+
end
|
104
113
|
|
105
114
|
# FAQによると、ダイスの置き換えは宣言された順番に適用されていく
|
106
115
|
dice_change_rules = parse_dice_change_rules(dice_change_text)
|
@@ -129,6 +138,13 @@ module BCDice
|
|
129
138
|
end
|
130
139
|
end
|
131
140
|
|
141
|
+
def remake_command(num_dices, defence, dice_change_text)
|
142
|
+
command = "#{num_dices}SK"
|
143
|
+
command += defence.to_s unless defence.nil?
|
144
|
+
command += dice_change_text unless dice_change_text.nil?
|
145
|
+
command
|
146
|
+
end
|
147
|
+
|
132
148
|
def parse_dice_change_rules(text)
|
133
149
|
return [] if text.nil?
|
134
150
|
|
@@ -144,11 +160,11 @@ module BCDice
|
|
144
160
|
end
|
145
161
|
|
146
162
|
def roll_all_situation_b2_tables
|
147
|
-
(1..6).map { |num| TABLES["STB2#{num}"].roll(@randomizer) }.join("\n")
|
163
|
+
(1..6).map { |num| self.class::TABLES["STB2#{num}"].roll(@randomizer) }.join("\n")
|
148
164
|
end
|
149
165
|
|
150
166
|
def roll_all_situation_tables
|
151
|
-
['STA', 'STB', 'STC'].map { |command| TABLES[command].roll(@randomizer) }.join("\n")
|
167
|
+
['STA', 'STB', 'STC'].map { |command| self.class::TABLES[command].roll(@randomizer) }.join("\n")
|
152
168
|
end
|
153
169
|
|
154
170
|
def roll_personality_table
|
@@ -169,7 +185,7 @@ module BCDice
|
|
169
185
|
indexes = results.map { |r| r[1] }
|
170
186
|
name = translate("StellarKnights.FT.name")
|
171
187
|
|
172
|
-
return "#{name}(#{indexes.join(',')}) > #{values.join('
|
188
|
+
return "#{name}(#{indexes.join(',')}) > #{values.join(translate('StellarKnights.FT.sep'))}"
|
173
189
|
end
|
174
190
|
|
175
191
|
class << self
|
@@ -210,7 +226,7 @@ module BCDice
|
|
210
226
|
|
211
227
|
TABLES = translate_tables(:ja_jp)
|
212
228
|
|
213
|
-
register_prefix('
|
229
|
+
register_prefix('[()+\/\d]+SK', 'STB2', 'ALLS', 'PET', 'FT', TABLES.keys)
|
214
230
|
end
|
215
231
|
end
|
216
232
|
end
|