bcdice 3.9.0 → 3.11.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 42944751b9e1101ab29df8042cb267f762ec4626c02d1301130716f5117ae5a1
4
- data.tar.gz: b273615ac178eb8f8f243961604dcdd9e6eb54a3ac90d41a3adc04005dae5d45
3
+ metadata.gz: 5804af6296cb509b73b2489953c75a3ebc2c88a6be93f398cfa6b46d69eabe26
4
+ data.tar.gz: a1b868d3706fd20040ed1720f572cbbc60479b7b43f500361cd49af5d8dce5b2
5
5
  SHA512:
6
- metadata.gz: 8e1e55ae455c5b0b36bd8dd5e3f4351f0ee06b195795ca44e8384c85b0fd907c682049a9d37f6b55b57a729612e0f64a1ec75a0cf437ce694a55ec6b19c46f97
7
- data.tar.gz: ca3a7a2f2c0fd78ecc60c4b99b3d692de1deb7aa9266ac1734ad4ae96bc9399488ced485590f0b29b69ca3807c947ad371756528a22a073493f9b98977ecd2c1
6
+ metadata.gz: c84ded2153b972ef840a345142fa2d599f6e023eb309ee3e5761bd8f74b9a8e2f6c2437b0c8cbbbf40b8dffe273910179e0baac2db10c9194b65dab5ea630c35
7
+ data.tar.gz: 744050243951df6df9b0816f3d7c6f71ff82796278b42438a828c1e9797224d18cf830ad6818ee8715fe4c6f799ef5d2cf4a7fad18655d09a086bde44d133ce4
data/CHANGELOG.md CHANGED
@@ -1,5 +1,38 @@
1
1
  # Change Log
2
2
 
3
+ ## 3.11.0 2023/08/23
4
+
5
+ ### 対応ゲームシステムの追加
6
+ - ガンダム・センチネルRPG (GundamSentinel): Facelessさんありがとうっ! ([#633](https://github.com/bcdice/BCDice/pull/633), [#634](https://github.com/bcdice/BCDice/pull/634))
7
+ - マモノスクランブル (MamonoScramble): ([#635](https://github.com/bcdice/BCDice/pull/635))
8
+ - デモンスパイク (DemonSpike): ([#636](https://github.com/bcdice/BCDice/pull/636))
9
+ - RuneQuest:Roleplaying in Glorantha (RuneQuestRoleplayingInGlorantha): フレッド緑野さんありがとうっ! ([#637](https://github.com/bcdice/BCDice/pull/637))
10
+ - ゾンビライン (ZombiLine): 蜂紫さんありがとうっ! ([#638](https://github.com/bcdice/BCDice/pull/638/files))
11
+
12
+ ## 3.10.0 2023/07/15
13
+
14
+ ### 対応ゲームシステムの追加
15
+ - 英雄の尺度 (HeroScale): モグさんありがとうっ! ([#613](https://github.com/bcdice/BCDice/pull/613))
16
+ - Ventangle (Ventangle): 三木里 秀予さんありがとうっ! ([#626](https://github.com/bcdice/BCDice/pull/626))
17
+
18
+ ### 追加機能
19
+ - Vampire:The Masquerade5th: Hungerダイスを内数指定できるコマンドを追加。フレッド緑野さんありがとうっ! ([#615](https://github.com/bcdice/BCDice/pull/615))
20
+ - モノトーンミュージアムRPG: 目標値 `?` に対応。えいむさんありがとうっ! ([#617](https://github.com/bcdice/BCDice/pull/617))
21
+ - シノビガミ: ヘルプメッセージを修正 ([#618](https://github.com/bcdice/BCDice/pull/618))
22
+ - シノビガミ: 表を多数追加。NiSLaさんありがとうっ! ([#625](https://github.com/bcdice/BCDice/pull/625))
23
+ - 獸ノ森: 「嚙神ノ宴」の表を追加。ゆいこさんありがとうっ! ([#629](https://github.com/bcdice/BCDice/pull/629))
24
+ - SRSじゃない世界樹の迷宮TRPG: 判定の成否を表示するよう変更。ゆいこさんありがとうっ! ([#630](https://github.com/bcdice/BCDice/pull/630))
25
+
26
+ ### 変更
27
+ - SRSじゃない世界樹の迷宮TRPG: 各種表記を公式ルールの用語に合わせて変更。ゆいこさんありがとうっ! ([#630](https://github.com/bcdice/BCDice/pull/630))
28
+
29
+ ### 誤植修正
30
+ - シノビガミ: ヘルプメッセージを修正 ([#618](https://github.com/bcdice/BCDice/pull/618))
31
+ - エモクロアTRPG: ヘルプメッセージを修正。電気魚さんありがとうっ! ([#622](https://github.com/bcdice/BCDice/pull/622))
32
+
33
+ ### バグ修正
34
+ - シノビガミ: 異形表を修正。クキソージさんありがとうっ! ([#621](https://github.com/bcdice/BCDice/pull/621))
35
+
3
36
  ## 3.9.0 2023/03/25
4
37
 
5
38
  ### 対応ゲームシステムの追加
@@ -9,11 +42,12 @@
9
42
  ### 追加機能
10
43
  - 初音ミクTRPG: 表をいくつか追加。カルメヤキさんありがとうっ! ([#602](https://github.com/bcdice/BCDice/pull/602))
11
44
  - スタンダードRPGシステム系: クリティカルを `@` で、ファンブルを `#` で指定できるように。三木里 秀予さんありがとうっ! ([#605](https://github.com/bcdice/BCDice/pull/605))
45
+ - シノビガミ: 表を多数追加。NiSLaさん、hetaregirl1802さん、三木里 秀予さんありがとうっ! ([#608](https://github.com/bcdice/BCDice/pull/608))
12
46
  - ダンジョンズ&ドラゴンズ第5版: 両手持ちのダメージ算出コマンドを追加。Facelessさんありがとうっ! ([#612](https://github.com/bcdice/BCDice/pull/612))
13
47
  - ダンジョンズ&ドラゴンズ第5版: 攻撃ロールでクリティカル値を指定できるように。Facelessさんありがとうっ! ([#612](https://github.com/bcdice/BCDice/pull/612))
14
48
 
15
49
  ### 変更
16
- - シノビガミ: 変調表と戦場表の内容を改訂版に変更。 ([#588](https://github.com/bcdice/BCDice/pull/588))
50
+ - シノビガミ: 変調表と戦場表の内容を改訂版に変更。NiSLaさんありがとうっ! ([#608](https://github.com/bcdice/BCDice/pull/608))
17
51
 
18
52
  ### 誤植修正
19
53
  - 歯車の塔の探空士(冒険企画局): 航行イベント表 困難系の誤植を修正。おさむさんありがとうっ! ([#607](https://github.com/bcdice/BCDice/pull/607))
data/README.md CHANGED
@@ -4,7 +4,6 @@
4
4
  [![Gem Version](https://badge.fury.io/rb/bcdice.svg)](https://badge.fury.io/rb/bcdice)
5
5
  [![YARD](https://img.shields.io/badge/yard-docs-blue.svg)](https://yard.bcdice.org/)
6
6
  [![codecov](https://codecov.io/gh/bcdice/BCDice/branch/master/graph/badge.svg)](https://codecov.io/gh/bcdice/BCDice)
7
- [![Maintainability](https://api.codeclimate.com/v1/badges/15261694a7d758c4309f/maintainability)](https://codeclimate.com/github/bcdice/BCDice/maintainability)
8
7
  [![Discord](https://img.shields.io/discord/597133335243784192.svg?color=7289DA&logo=discord&logoColor=fff)][invite discord]
9
8
 
10
9
  様々なTRPGシステムの判定に対応したオンセツール用ダイスコマンドエンジン
@@ -1,16 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BCDice
2
4
  module GameSystem
3
5
  class CastleInGray < Base
4
6
  # ゲームシステムの識別子
5
- ID = "CastleInGray".freeze
7
+ ID = "CastleInGray"
6
8
 
7
9
  # ゲームシステム名
8
- NAME = "灰色城綺譚".freeze
10
+ NAME = "灰色城綺譚"
9
11
 
10
12
  # ゲームシステム名の読みがな
11
- SORT_KEY = "はいいろしようきたん".freeze
13
+ SORT_KEY = "はいいろしようきたん"
12
14
 
13
- HELP_MESSAGE = <<~TEXT.freeze
15
+ HELP_MESSAGE = <<~TEXT
14
16
  ■ 色占い (BnWm)
15
17
  n: 黒
16
18
  m: 白
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class DemonSpike < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'DemonSpike'
8
+
9
+ # ゲームシステム名
10
+ NAME = 'デモンスパイク'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'てもんすはいく'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
17
+ ・行為判定 xDS+y
18
+  行為判定を行い、達成値、成否、成功度を出力する。
19
+  x: ダイス数(省略:2)
20
+  y: 能力値やスパイク能力による達成値の修正(省略可)
21
+ INFO_MESSAGE_TEXT
22
+
23
+ register_prefix('\d*DS')
24
+
25
+ def eval_game_system_specific_command(command)
26
+ roll_action(command)
27
+ end
28
+
29
+ private
30
+
31
+ def roll_action(command)
32
+ parser = Command::Parser.new("DS", round_type: @round_type)
33
+ .enable_prefix_number
34
+ .restrict_cmp_op_to(nil)
35
+ parsed = parser.parse(command)
36
+ unless parsed
37
+ return nil
38
+ end
39
+
40
+ parsed.prefix_number ||= 2
41
+ if parsed.prefix_number < 2
42
+ return nil
43
+ end
44
+
45
+ step = roll_step(parsed.prefix_number)
46
+ step_list = [step]
47
+ while step[:dice_sum] == 10
48
+ step = roll_step(parsed.prefix_number)
49
+ step_list.push(step)
50
+ end
51
+
52
+ is_fumble = step_list[0][:dice_sum] == 2
53
+ total = is_fumble ? 0 : step_list.sum { |s| s[:dice_sum] } + parsed.modify_number
54
+ success_level = total / 10
55
+ is_success = total >= 10
56
+
57
+ res =
58
+ if is_success
59
+ "成功, 成功度#{success_level}"
60
+ elsif is_fumble
61
+ "自動的失敗"
62
+ else
63
+ "失敗"
64
+ end
65
+
66
+ sequence = [
67
+ "(#{parsed})",
68
+ step_list.map { |s| "#{s[:dice_sum]}[#{s[:dice_list].join(',')}]" },
69
+ total,
70
+ res,
71
+ ].flatten
72
+
73
+ return Result.new.tap do |r|
74
+ r.condition = is_success
75
+ r.critical = step_list.length > 1
76
+ r.fumble = is_fumble
77
+ r.text = sequence.join(" > ")
78
+ end
79
+ end
80
+
81
+ def roll_step(times)
82
+ dice_list = @randomizer.roll_barabara(times, 6).sort.reverse
83
+ dice_sum = (dice_list[0] + dice_list[1]).clamp(2, 10)
84
+
85
+ return {dice_list: dice_list, dice_sum: dice_sum}
86
+ end
87
+ end
88
+ end
89
+ end
@@ -22,10 +22,10 @@ module BCDice
22
22
  ダイスの個数は省略可能で、省略した場合1個になります。
23
23
  例)2DM<=5 DM<=8
24
24
  ・技能値判定(sDAa+z)
25
- "(技能レベル)DA(能力値)+(ボーナスダイス)"で指定します。
26
- ボーナスダイスの個数は省略可能で、省略した場合0になります。
25
+ "(技能レベル)DA(能力値)+(ダイスボーナス)"で指定します。
26
+ ダイスボーナスの個数は省略可能で、省略した場合0になります。
27
27
  技能レベルは1~3の数値、またはベース技能の場合"b"が入ります。
28
- ダイスの個数は技能レベルとボーナスダイスの個数により決定し、s+z個のダイスを振ります。(s="b"の場合はs=1)
28
+ ダイスの個数は技能レベルとダイスボーナスの個数により決定し、s+z個のダイスを振ります。(s="b"の場合はs=1)
29
29
  判定値はs+aとなります。(s="b"の場合はs=0)
30
30
  MESSAGETEXT
31
31
 
@@ -0,0 +1,377 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class GundamSentinel < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'GundamSentinel'
8
+
9
+ # ゲームシステム名
10
+ NAME = 'ガンダム・センチネルRPG'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'かんたむせんちねる'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
17
+ ・基本戦闘(BB, BBM)
18
+  BB[+修正][>回避値]で基本戦闘を判定します。回避値を指定すると、命中・回避も表示します。
19
+  BBM[+修正][>回避値]でモブ用の基本戦闘を判定します。クリティカルを判定します。回避値を指定すると、命中・回避も表示します。
20
+
21
+  例)BB BBM BB+5>14 BBM+5>15
22
+
23
+ ・一般技能(GS)
24
+  GS[+修正][>目標値]で一般技能を判定します。目標値を指定しない場合は、目標値10で判定します。
25
+
26
+  例)GS GS+5 GS+5>10
27
+
28
+
29
+ ・各種表
30
+  敵MSクリティカルヒットチャート (ECHC)
31
+  PC用脱出判定チャート      (PEJC[+m] m:修正)
32
+  艦船追加ダメージ決定チャート  (ASDC)
33
+  対空砲結果チャート       (AARC[+m]=t m:修正, t:対空防御力)
34
+  リハビリ判定チャート      (RTJC[+m] m:修正)
35
+  二次被害判定チャート      (SDDC)
36
+ INFO_MESSAGE_TEXT
37
+
38
+ def initialize(command)
39
+ super(command)
40
+
41
+ @round_type = RoundType::CEIL
42
+ @d66_sort_type = D66SortType::NO_SORT
43
+ end
44
+
45
+ def eval_game_system_specific_command(command)
46
+ roll_basic_battle(command) ||
47
+ roll_general_skill(command) ||
48
+ roll_anti_aircraft_gun_result_chart(command) ||
49
+ roll_escape_chart(command) ||
50
+ roll_rehabilitation_chart(command) ||
51
+ roll_tables(command, TABLES)
52
+ end
53
+
54
+ private
55
+
56
+ # 基本戦闘ロール
57
+ def roll_basic_battle(command)
58
+ m = /^BB(M)?([-+][-+\d]+)?(>([-+\d]+))?/.match(command)
59
+ return nil unless m
60
+
61
+ mob = m[1]
62
+ modify = ArithmeticEvaluator.eval(m[2])
63
+ have_modify = false
64
+ have_modify = true if m[2]
65
+ avoid = ArithmeticEvaluator.eval(m[4])
66
+ have_avoid = false
67
+ have_avoid = true if m[4]
68
+
69
+ d60 = @randomizer.roll_once(6)
70
+ d06 = @randomizer.roll_once(6)
71
+ total_d = d60 * 10 + d06
72
+ d60 += (d06 + modify - 1).div(6)
73
+ d06 = (d06 + modify - 1).modulo(6) + 1
74
+ total = d60 * 10 + d06
75
+ total = 11 if total < 11
76
+
77
+ success = false
78
+ failure = false
79
+ critical = false
80
+
81
+ modify_label = nil
82
+ if have_modify
83
+ if modify >= 0
84
+ modify_label = "#{total_d}+#{modify}"
85
+ else
86
+ modify_label = "#{total_d}#{modify}"
87
+ end
88
+ end
89
+
90
+ critical_label = nil
91
+ if mob && (total >= 66)
92
+ critical_label = "クリティカル"
93
+ critical = true
94
+ end
95
+
96
+ result = nil
97
+ if have_avoid
98
+ if total > avoid
99
+ result = "命中(+" + count_success(total, avoid).to_s + ")"
100
+ success = true
101
+ else
102
+ result = "回避"
103
+ failure = true
104
+ end
105
+ end
106
+
107
+ sequence = [
108
+ "(#{command})",
109
+ modify_label,
110
+ total,
111
+ result,
112
+ critical_label,
113
+ ].compact
114
+
115
+ Result.new(sequence.join(" > ")).tap do |r|
116
+ r.success = success
117
+ r.failure = failure
118
+ r.critical = critical
119
+ end
120
+ end
121
+
122
+ def count_success(dice, avoid)
123
+ d60 = dice.div(10)
124
+ d06 = dice.modulo(10)
125
+ a60 = avoid.div(10)
126
+ a06 = avoid.modulo(10)
127
+
128
+ return ((d60 * 6 + d06) - (a60 * 6 + a06))
129
+ end
130
+
131
+ # 一般技能ロール
132
+ def roll_general_skill(command)
133
+ m = /^GS([-+][-+\d]+)?(>([-+\d]+))?/.match(command)
134
+ return nil unless m
135
+
136
+ modify = ArithmeticEvaluator.eval(m[1])
137
+ have_modify = false
138
+ have_modify = true if m[1]
139
+ target = ArithmeticEvaluator.eval(m[3])
140
+ target = 10 unless m[3]
141
+
142
+ success = false
143
+ failure = false
144
+
145
+ dice = @randomizer.roll_sum(2, 6)
146
+
147
+ modify_label = nil
148
+ if have_modify
149
+ if modify >= 0
150
+ modify_label = "#{dice}+#{modify}"
151
+ else
152
+ modify_label = "#{dice}#{modify}"
153
+ end
154
+ end
155
+ total = dice + modify
156
+ if total > target
157
+ result = "成功"
158
+ success = true
159
+ else
160
+ result = "失敗"
161
+ failure = true
162
+ end
163
+
164
+ sequence = [
165
+ "(#{command})",
166
+ modify_label,
167
+ total,
168
+ result,
169
+ ].compact
170
+
171
+ Result.new(sequence.join(" > ")).tap do |r|
172
+ r.success = success
173
+ r.failure = failure
174
+ end
175
+ end
176
+
177
+ # 各種表
178
+
179
+ # 対空砲結果チャート
180
+ GUN_RESULT_CHART = [
181
+ ["D", "H", "H", "H", 10, 8, 6, 5, 4, 2, 1, "-", "-"],
182
+ ["D", "H", "H", "H", 12, 10, 9, 8, 6, 5, 3, 2, "-"],
183
+ ["D", "D", "H", "H", "H", 12, 10, 9, 7, 6, 4, 3, 1],
184
+ ["D", "D", "H", "H", "H", 14, 13, 12, 10, 8, 6, 5, 3],
185
+ ["D", "D", "D", "H", "H", "H", 14, 13, 11, 9, 7, 6, 4],
186
+ ["D", "D", "D", "H", "H", "H", "H", 16, 14, 12, 11, 8, 6],
187
+ ].freeze
188
+
189
+ def roll_anti_aircraft_gun_result_chart(command)
190
+ parser = Command::Parser.new("AARC", round_type: @round_type).restrict_cmp_op_to(:==)
191
+ parsed = parser.parse(command)
192
+
193
+ return nil unless parsed
194
+
195
+ target = parsed.target_number.clamp(1, 6)
196
+ dice = @randomizer.roll_sum(2, 6)
197
+ total = (dice + parsed.modify_number).clamp(1, 13)
198
+
199
+ cmd =
200
+ if parsed.modify_number != 0
201
+ "(#{dice}#{Format.modifier(parsed.modify_number)}=#{total})"
202
+ else
203
+ total.to_s
204
+ end
205
+ result = GUN_RESULT_CHART[target - 1][total - 1]
206
+
207
+ Result.new().tap do |r|
208
+ r.text = "対空砲結果チャート(#{cmd}vs#{target}) > 結果「#{result}」"
209
+ r.condition = result.is_a?(Integer)
210
+ end
211
+ end
212
+
213
+ # PC用脱出判定チャート
214
+ ESCAPE_CHART = [
215
+ '*',
216
+ '*',
217
+ '無傷で脱出',
218
+ '無傷で脱出',
219
+ '無傷で脱出',
220
+ '軽傷で脱出「1D6ダメージ。」',
221
+ '中傷で脱出「2D6ダメージ。」',
222
+ '重傷で脱出「3D6ダメージ。」',
223
+ '重体で脱出「1D3の耐久力が残る。」',
224
+ '戦死「二階級特進。」',
225
+ '戦死「二階級特進。」',
226
+ '戦死「二階級特進。」',
227
+ '戦死「二階級特進。」',
228
+ ].freeze
229
+
230
+ def roll_escape_chart(command)
231
+ parser = Command::Parser.new("PEJC", round_type: @round_type).restrict_cmp_op_to(nil)
232
+ parsed = parser.parse(command)
233
+ return nil unless parsed
234
+
235
+ dice = @randomizer.roll_sum(2, 6)
236
+ total = (dice + parsed.modify_number).clamp(2, 12)
237
+
238
+ cmd =
239
+ if parsed.modify_number != 0
240
+ "#{dice}#{Format.modifier(parsed.modify_number)}=#{total}"
241
+ else
242
+ total.to_s
243
+ end
244
+ result = ESCAPE_CHART[total]
245
+
246
+ Result.new("PC用脱出判定チャート(#{cmd}) > #{result}")
247
+ end
248
+
249
+ REHABILITATION_CHART = [
250
+ '*',
251
+ '*',
252
+ 'なし',
253
+ '1ヶ月',
254
+ '2ヶ月',
255
+ '3ヶ月',
256
+ '4ヶ月',
257
+ '5ヶ月',
258
+ '6ヶ月',
259
+ '10ヶ月',
260
+ '1年',
261
+ '1年6ヶ月',
262
+ '1年と、もう一度このチャートで振った結果分を足した期間',
263
+ ].freeze
264
+
265
+ def roll_rehabilitation_chart(command)
266
+ parser = Command::Parser.new("RTJC", round_type: @round_type).restrict_cmp_op_to(nil)
267
+ parsed = parser.parse(command)
268
+ return nil unless parsed
269
+
270
+ dice = @randomizer.roll_sum(2, 6)
271
+ total = (dice + parsed.modify_number).clamp(2, 12)
272
+
273
+ cmd =
274
+ if parsed.modify_number != 0
275
+ "#{dice}#{Format.modifier(parsed.modify_number)}=#{total}"
276
+ else
277
+ total.to_s
278
+ end
279
+ result = REHABILITATION_CHART[total]
280
+
281
+ Result.new("リハビリ判定チャート(#{cmd}) > #{result}")
282
+ end
283
+
284
+ TABLES = {
285
+ 'ECHC' => DiceTable::Table.new(
286
+ '敵MSクリティカルヒットチャート',
287
+ '2D6',
288
+ [
289
+ 'コックピット直撃:目標MSは残骸となる。',
290
+ '腕破損:同時に携帯武器も失う。携帯武装の交換も行えない。直ちにモラル判定を-4で行う。',
291
+ '射撃武装破損:目標MSはその時点で使用しているナンバーの若い武装を1つ失う。全ての武装を失った場合、モラル判定を行う。',
292
+ '頭部直撃:目標MSはメインカメラを失い、以後射撃、格闘の命中判定に-6の修正を受ける。頭部に装備されている武装も失われる。',
293
+ 'パイロット気絶:目標MSは回復するまで行動不能。',
294
+ '目標MSへのダメージ2倍。',
295
+ '目標MSへのダメージ2倍。',
296
+ '目標MSへのダメージ3倍。',
297
+ '脚破損:目標MSは、以後の回避値に-6の修正を受ける。',
298
+ 'コントロール不能:目標MSは1D6ラウンドの間、行動不能。',
299
+ '熱核ジェネレーター直撃:目標MSは直ちに爆発(耐久力0)する。',
300
+ ]
301
+ ),
302
+ 'ASDC' => DiceTable::Table.new(
303
+ '艦船追加ダメージ決定チャート',
304
+ '2D6',
305
+ [
306
+ 'ブリッジ損傷「複数ある艦は、総てのブリッジが損傷すると以後の対空防御は修正を+5する。」',
307
+ 'カタパルト損傷「複数ある艦は、総てのカタパルトが損傷すると、MSの発着艦ができなくなる。」',
308
+ '追加ダメージ「追加2D6×2ダメージ。」',
309
+ '主砲大破「主砲1門を失う。」',
310
+ '副砲大破「副砲1門を失う。」',
311
+ '追加ダメージ「追加2D6ダメージ。」',
312
+ '追加ダメージ「追加2D6ダメージ。」',
313
+ '追加ダメージ「追加2D6ダメージ。」',
314
+ '1ターン行動不能「1ターンはその艦は何も行動ができない。」',
315
+ '航行不能「その艦はそのヘックスから動けなくなる。」',
316
+ 'エンジン誘爆「1D6×10%の耐久力を失う。」',
317
+ ]
318
+ ),
319
+ 'SDDC' => DiceTable::D66GridTable.new(
320
+ '二次被害判定チャート',
321
+ [
322
+ [
323
+ '奇蹟的に無傷「不発!?今回のダメージは0。」',
324
+ 'メインカメラ破損「以後、射撃、格闘の命中判定に-3の修正を受ける。」',
325
+ 'コクピット破損「以後の追加ダメージ判定に-1の修正を受ける。」',
326
+ '右腕損傷「携帯していた武装も失う。また右腕での武器の使用はできなくなる。」',
327
+ '左腕損傷「携帯していた武装も失う。また左腕での武器の使用はできなくなる。」',
328
+ '気絶「気絶判定の余地無く、必ず気絶する。」',
329
+ ],
330
+ [
331
+ '気絶「気絶判定を-6の修正で行う。」',
332
+ '気絶「気絶判定を-4の修正で行う。」',
333
+ '気絶「気絶判定を-2の修正で行う。」',
334
+ '気絶「気絶判定を行う。」',
335
+ '予備弾倉破損「携帯している予備弾倉かEパックを1つ失う。」',
336
+ 'サブカメラ破損「以後、射撃、格闘の命中判定に-1の修正を受ける。」',
337
+ ],
338
+ [
339
+ '固定武装破損「固定されている武装を1つ失う。」',
340
+ '予備武装破損「携帯している以外の武装を1つ失う。」',
341
+ '頭部破損「メインカメラも失い、以後、射撃、格闘の命中判定に-3の修正を受ける。」',
342
+ '右脚破損「以後、回避値が1D3低下する。」',
343
+ '左脚破損「以後、回避値が1D3低下する。」',
344
+ '操縦機構破損「以後、すべての行動は消費行動ポイントを1ポイント余分に消費する。」',
345
+ ],
346
+ [
347
+ '軽傷「パイロットは1D6のダメージを受ける。また気絶判定を行う。」',
348
+ '中傷「パイロットは2D6のダメージを受ける。また気絶判定を-6修正で行う。」',
349
+ '重傷「パイロットは3D6のダメージを受ける。また気絶判定を-9修正で行う。」',
350
+ '操縦伝達部破損「以後すべての射撃、格闘の命中判定と回避値に-1の修正を受ける。」',
351
+ 'センサー破損「イニシアティブ決定に-1の修正を受ける。」',
352
+ '脱出機構破損「脱出判定に+3の修正を受ける。」',
353
+ ],
354
+ [
355
+ '熱核ジェネレーター損傷「行動の「追加移動」が行えなくなる。」',
356
+ '右腕の携帯武装破損「右腕に持っていた武装を1つ失う。」',
357
+ '左腕の携帯武装破損「左腕に持っていた武装を1つ失う。」',
358
+ 'サブスラスター破損「回避値が1低下する。」',
359
+ 'プロペラントタンク破損「プロペラントタンクを1つ失う。」',
360
+ 'バックパック破損「推進剤3D6ポイント失う。」',
361
+ ],
362
+ [
363
+ 'メインスラスター破損「回避値が1D6低下する。」',
364
+ '動力パイプ破損「以後、行動ポイント決定のダイスに-1の修正を受ける。」',
365
+ '動力伝達機構破損「以後、行動ポイント決定のサイコロに-1D3の修正を受ける。」',
366
+ 'サブスラスター破損「旋回が120度までしかできなくなる。」',
367
+ 'メインスラスター破損「旋回が60度までしかできなくなる。」',
368
+ '熱核ジェネレーター直撃「そのMSは爆発する。PCは直ちに脱出判定を行う。」',
369
+ ]
370
+ ]
371
+ ),
372
+ }.freeze
373
+
374
+ register_prefix('BBM?', 'GS', 'AARC', 'PEJC', 'RTJC', TABLES.keys)
375
+ end
376
+ end
377
+ end