bcdice 3.14.0 → 3.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +59 -0
- data/i18n/Cthulhu/zh_hant.yml +1 -1
- data/i18n/CyberpunkRed/ko_kr.yml +389 -0
- data/i18n/DoubleCross/ja_jp.yml +53 -0
- data/i18n/DoubleCross/ko_kr.yml +52 -0
- data/i18n/FutariSousa/ja_jp.yml +138 -138
- data/i18n/KillDeathBusiness/ja_jp.yml +198 -0
- data/i18n/MagicaLogia/ko_kr.yml +2 -2
- data/i18n/MonotoneMuseum/ko_kr.yml +227 -0
- data/i18n/SkynautsBouken/ko_kr.yml +114 -0
- data/i18n/StratoShout/ko_kr.yml +102 -102
- data/i18n/zh_hant.yml +5 -0
- data/lib/bcdice/game_system/Aionia.rb +131 -0
- data/lib/bcdice/game_system/Arianrhod_Korean.rb +2 -0
- data/lib/bcdice/game_system/ArknightsFan.rb +245 -87
- data/lib/bcdice/game_system/BlackJacket_Korean.rb +244 -0
- data/lib/bcdice/game_system/CharonSanctions.rb +112 -0
- data/lib/bcdice/game_system/Cthulhu7th.rb +1 -1
- data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional/full_auto.rb +293 -0
- data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional/rollable.rb +43 -0
- data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +470 -306
- data/lib/bcdice/game_system/CyberpunkRed.rb +1 -2
- data/lib/bcdice/game_system/CyberpunkRed_Korean.rb +66 -0
- data/lib/bcdice/game_system/DoubleCross.rb +18 -1
- data/lib/bcdice/game_system/DoubleCross_Korean.rb +5 -1
- data/lib/bcdice/game_system/FullFace.rb +25 -3
- data/lib/bcdice/game_system/FutariSousa.rb +17 -5
- data/lib/bcdice/game_system/Garactier.rb +479 -0
- data/lib/bcdice/game_system/GardenOrder.rb +390 -9
- data/lib/bcdice/game_system/GundogRevised.rb +8 -8
- data/lib/bcdice/game_system/KillDeathBusiness.rb +155 -3
- data/lib/bcdice/game_system/KimitoYell.rb +568 -0
- data/lib/bcdice/game_system/Magius.rb +125 -0
- data/lib/bcdice/game_system/Magius_3rdNewTokyoCity.rb +62 -0
- data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +4 -4
- data/lib/bcdice/game_system/NSSQ.rb +17 -9
- data/lib/bcdice/game_system/NervWhitePaper.rb +129 -0
- data/lib/bcdice/game_system/RogueLikeHalf.rb +198 -0
- data/lib/bcdice/game_system/RuneQuestRoleplayingInGlorantha.rb +16 -13
- data/lib/bcdice/game_system/ShinobiGami.rb +73 -43
- data/lib/bcdice/game_system/SkynautsBouken.rb +4 -4
- data/lib/bcdice/game_system/SkynautsBouken_Korean.rb +57 -0
- data/lib/bcdice/game_system/StratoShout_Korean.rb +1 -1
- data/lib/bcdice/game_system/SwordWorld.rb +4 -0
- data/lib/bcdice/game_system/SwordWorld2_5.rb +3 -2
- data/lib/bcdice/game_system/TensaiGunshiNiNaro.rb +51 -17
- data/lib/bcdice/game_system/TheIndieHack.rb +82 -0
- data/lib/bcdice/game_system/TorgEternity.rb +35 -6
- data/lib/bcdice/game_system/WoW.rb +161 -0
- data/lib/bcdice/game_system/YankeeMustDie.rb +192 -0
- data/lib/bcdice/game_system/YearZeroEngine.rb +225 -28
- data/lib/bcdice/game_system/YuMyoKishi.rb +141 -0
- data/lib/bcdice/game_system/sword_world/rating_lexer.rb +1 -0
- data/lib/bcdice/game_system/sword_world/rating_options.rb +4 -1
- data/lib/bcdice/game_system/sword_world/rating_parsed.rb +5 -0
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +129 -115
- data/lib/bcdice/game_system.rb +15 -0
- data/lib/bcdice/version.rb +1 -1
- metadata +22 -6
@@ -0,0 +1,479 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class Garactier < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = "Garactier"
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = "ガラクティア"
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = "からくていあ"
|
14
|
+
|
15
|
+
HELP_MESSAGE = <<~TEXT
|
16
|
+
ガラクティアVer1.04
|
17
|
+
x:基準値
|
18
|
+
y:目標値
|
19
|
+
x, yについては四則演算の入力が可能
|
20
|
+
|
21
|
+
■達成値の算出(GRx)
|
22
|
+
クリティカル・ファンブルの判定、達成値の表示を行う。
|
23
|
+
■通常判定(GRx>=y)
|
24
|
+
通常の判定を行う。
|
25
|
+
■命中判定(GRHx>=y)
|
26
|
+
命中判定を行う。
|
27
|
+
■回避判定(GRDx>=y)
|
28
|
+
回避判定を行う。
|
29
|
+
■抵抗判定(GRMx>=y)
|
30
|
+
抵抗判定を行う。
|
31
|
+
■探索成功マスレベル算出(GRSx)
|
32
|
+
探索・索敵判定時の最大成功マスレベル(ML)を算出する
|
33
|
+
■ 表
|
34
|
+
アイテム決定表(ITMn)
|
35
|
+
ランクnのアイテム表を振る。例)ITM2 ランク2アイテム表
|
36
|
+
上級アイテムの判定も行います。
|
37
|
+
命中部位決定表(BUI)
|
38
|
+
命中時の部位を決定します。
|
39
|
+
増強可能施設決定表(SST)
|
40
|
+
報告フェイズの増強可能施設を決定します。
|
41
|
+
TEXT
|
42
|
+
|
43
|
+
# アイテム用テーブル
|
44
|
+
ITEM_TABLES = {
|
45
|
+
'ITM2' => DiceTable::D66Table.new(
|
46
|
+
'ランク2アイテム決定表',
|
47
|
+
D66SortType::NO_SORT,
|
48
|
+
{
|
49
|
+
11 => 'リペアスプレー',
|
50
|
+
12 => '防壁シャボン',
|
51
|
+
13 => '応援ボットちゃん',
|
52
|
+
14 => '偵察ボットちゃん',
|
53
|
+
15 => '回収ボットちゃん',
|
54
|
+
16 => 'ブラストチャージャー',
|
55
|
+
21 => '仕掛け爆弾',
|
56
|
+
22 => 'おなじみドリル',
|
57
|
+
23 => '清掃ボットちゃん',
|
58
|
+
24 => '突撃ボットちゃん',
|
59
|
+
25 => '修繕ボットちゃん',
|
60
|
+
26 => 'アンプリファイア',
|
61
|
+
31 => 'コバルトエール',
|
62
|
+
32 => 'カステラ',
|
63
|
+
33 => 'エアガン',
|
64
|
+
34 => '安全靴',
|
65
|
+
35 => 'ヘルメット',
|
66
|
+
36 => 'フラッシュバルブ',
|
67
|
+
41 => 'クリアワックス',
|
68
|
+
42 => '目薬',
|
69
|
+
43 => 'ラプチャーヒール',
|
70
|
+
44 => '防弾盾',
|
71
|
+
45 => 'プレートアーマー',
|
72
|
+
46 => 'ホーリーチャーム',
|
73
|
+
51 => 'カーネルシガー',
|
74
|
+
52 => 'ニトロギャンディー',
|
75
|
+
53 => '鉱樹の花飾り',
|
76
|
+
54 => 'アンプルシューター',
|
77
|
+
55 => 'メタル包帯',
|
78
|
+
56 => '炸裂発煙筒',
|
79
|
+
61 => 'シグナルドラッグ',
|
80
|
+
62 => '毒手',
|
81
|
+
63 => 'グルーガン',
|
82
|
+
64 => '縫い針',
|
83
|
+
65 => 'パイロン',
|
84
|
+
66 => '☆上級品☆',
|
85
|
+
}
|
86
|
+
),
|
87
|
+
'ITM3' => DiceTable::D66Table.new(
|
88
|
+
'ランク3アイテム決定表',
|
89
|
+
D66SortType::NO_SORT,
|
90
|
+
{
|
91
|
+
11 => 'バナナ',
|
92
|
+
12 => 'イージーバズーカ',
|
93
|
+
13 => 'マルチバーニア',
|
94
|
+
14 => '赤い鉢巻き',
|
95
|
+
15 => 'カクテルポイズン',
|
96
|
+
16 => 'リペアジェル',
|
97
|
+
21 => '金砕棒',
|
98
|
+
22 => 'オシャレステッキ',
|
99
|
+
23 => '掃除機',
|
100
|
+
24 => 'ソーラーキャップ',
|
101
|
+
25 => 'タクティカルベスト',
|
102
|
+
26 => 'ホイッスル',
|
103
|
+
31 => 'パノラマバイザー',
|
104
|
+
32 => 'フリーズランチャー',
|
105
|
+
33 => 'オシャレスーツ',
|
106
|
+
34 => '暗器',
|
107
|
+
35 => '無限軌道',
|
108
|
+
36 => 'イルミネーション',
|
109
|
+
41 => '光線銃',
|
110
|
+
42 => '十手',
|
111
|
+
43 => '銅鑼',
|
112
|
+
44 => 'オシャレハット',
|
113
|
+
45 => '忍び足',
|
114
|
+
46 => '釣り竿',
|
115
|
+
51 => 'ブラックパウダー',
|
116
|
+
52 => 'ダーティーマント',
|
117
|
+
53 => 'バッテリーケイン',
|
118
|
+
54 => 'バンデッドショルダー',
|
119
|
+
55 => 'オシャレシューズ',
|
120
|
+
56 => 'サテライト',
|
121
|
+
61 => 'キーパーゴーレム',
|
122
|
+
62 => '混迷香',
|
123
|
+
63 => '応援旗',
|
124
|
+
64 => '黒子頭巾',
|
125
|
+
65 => 'バーナーランス',
|
126
|
+
66 => '☆上級品☆',
|
127
|
+
}
|
128
|
+
),
|
129
|
+
'ITM4' => DiceTable::D66Table.new(
|
130
|
+
'ランク4アイテム決定表',
|
131
|
+
D66SortType::NO_SORT,
|
132
|
+
{
|
133
|
+
11 => '金塊',
|
134
|
+
12 => 'パラボラアンテナ',
|
135
|
+
13 => 'くらましの敷布',
|
136
|
+
14 => '無影灯',
|
137
|
+
15 => '油圧ショベル',
|
138
|
+
16 => 'マシンテール',
|
139
|
+
21 => '黒曜石の像',
|
140
|
+
22 => '黄金のクローバー',
|
141
|
+
23 => '朝霧の箒',
|
142
|
+
24 => 'ヘッドキャノン',
|
143
|
+
25 => 'レッグバルカン',
|
144
|
+
26 => 'ダイナモブロック',
|
145
|
+
31 => 'ジョウロ',
|
146
|
+
32 => 'スナイパーライフル',
|
147
|
+
33 => 'おてがるスコープ',
|
148
|
+
34 => 'ドーザーブレード',
|
149
|
+
35 => 'テツゲタ',
|
150
|
+
36 => 'ジェットスラスター',
|
151
|
+
41 => '宝剣',
|
152
|
+
42 => '指揮棒',
|
153
|
+
43 => '大兜',
|
154
|
+
44 => '妖精さん',
|
155
|
+
45 => 'ロングホーン',
|
156
|
+
46 => '鎖がま',
|
157
|
+
51 => '鳥籠',
|
158
|
+
52 => 'カタパルトアーム',
|
159
|
+
53 => 'スタンドマイク',
|
160
|
+
54 => '臆病なカカシ',
|
161
|
+
55 => 'ローラーダッシュ',
|
162
|
+
56 => 'モミジ',
|
163
|
+
61 => 'マスターキー',
|
164
|
+
62 => '隠れ蓑',
|
165
|
+
63 => '番傘',
|
166
|
+
64 => '駆動甲冑',
|
167
|
+
65 => '波紋の杖',
|
168
|
+
66 => '☆上級品☆',
|
169
|
+
}
|
170
|
+
),
|
171
|
+
'ITM5' => DiceTable::D66Table.new(
|
172
|
+
'ランク5アイテム決定表',
|
173
|
+
D66SortType::NO_SORT,
|
174
|
+
{
|
175
|
+
11 => '因果の卵',
|
176
|
+
12 => 'ランプ',
|
177
|
+
13 => '常盤の琥珀',
|
178
|
+
14 => '新緑の冠',
|
179
|
+
15 => '萌芽の靴',
|
180
|
+
16 => '星の骸',
|
181
|
+
21 => '夜の帳',
|
182
|
+
22 => 'スリップブローチ',
|
183
|
+
23 => '拳法着',
|
184
|
+
24 => 'めがね',
|
185
|
+
25 => '白旗',
|
186
|
+
26 => 'ディラックナイフ',
|
187
|
+
31 => 'エレキドレッサー',
|
188
|
+
32 => 'ネイルガン',
|
189
|
+
33 => '木漏れ日のポプリ',
|
190
|
+
34 => 'ミスリルピッケル',
|
191
|
+
35 => 'デスマッチカフス',
|
192
|
+
36 => 'アダムスキースカート',
|
193
|
+
41 => '主砲',
|
194
|
+
42 => 'マイクロポッド',
|
195
|
+
43 => '樹皮の円盤',
|
196
|
+
44 => 'リンゴと蛇の紋章',
|
197
|
+
45 => 'セントリーガンナー',
|
198
|
+
46 => '化生の仮面',
|
199
|
+
51 => 'ガトリング',
|
200
|
+
52 => 'オカモチ',
|
201
|
+
53 => '芭蕉扇',
|
202
|
+
54 => 'ハッピートリガー',
|
203
|
+
55 => '蠢く湿布',
|
204
|
+
56 => 'メガホン',
|
205
|
+
61 => 'トランシーバー',
|
206
|
+
62 => '好奇の鋲',
|
207
|
+
63 => 'スレッジハンマー',
|
208
|
+
64 => 'セントール',
|
209
|
+
65 => 'ケーブルナイト',
|
210
|
+
66 => '☆上級品☆',
|
211
|
+
}
|
212
|
+
),
|
213
|
+
'ITM6' => DiceTable::D66Table.new(
|
214
|
+
'ランク6アイテム決定表',
|
215
|
+
D66SortType::NO_SORT,
|
216
|
+
{
|
217
|
+
11 => '禍福の勾玉',
|
218
|
+
12 => '祭壇',
|
219
|
+
13 => 'ネジまき心臓',
|
220
|
+
14 => 'まどろみの頭蓋',
|
221
|
+
15 => '猛進拍車',
|
222
|
+
16 => '炉心結晶',
|
223
|
+
21 => '狂奔の鞭',
|
224
|
+
22 => '暁のベル',
|
225
|
+
23 => 'ネコシッポ',
|
226
|
+
24 => '鬼蜘蛛',
|
227
|
+
25 => '戦上手の脚',
|
228
|
+
26 => '薄絹の外套',
|
229
|
+
31 => 'ネコクロー',
|
230
|
+
32 => 'クライムチャンバー',
|
231
|
+
33 => '古の灯火',
|
232
|
+
34 => 'かしこい触手',
|
233
|
+
35 => 'オペラグラス',
|
234
|
+
36 => '大鉄拳',
|
235
|
+
41 => '妖刀',
|
236
|
+
42 => 'ヘビーライター',
|
237
|
+
43 => '緋緋色の針',
|
238
|
+
44 => 'バーサクシール',
|
239
|
+
45 => '光芒のアンクレット',
|
240
|
+
46 => 'ネコブーツ',
|
241
|
+
51 => '旅するコイン',
|
242
|
+
52 => '光子鏡壁',
|
243
|
+
53 => 'フェザージャケット',
|
244
|
+
54 => 'レーザーミニオン',
|
245
|
+
55 => 'マニピュレーター',
|
246
|
+
56 => 'ランパートシールド',
|
247
|
+
61 => '選定者の瞳',
|
248
|
+
62 => '打ち上げ花火',
|
249
|
+
63 => '魔笛',
|
250
|
+
64 => '指輪',
|
251
|
+
65 => 'ネコミミ',
|
252
|
+
66 => '☆上級品☆',
|
253
|
+
}
|
254
|
+
),
|
255
|
+
}.freeze()
|
256
|
+
|
257
|
+
# 施設表
|
258
|
+
SISETSU_TABLES = {
|
259
|
+
"SST" => DiceTable::Table.new(
|
260
|
+
"増強可能施設決定表",
|
261
|
+
"1D6",
|
262
|
+
[
|
263
|
+
'広場 マーケット 楽団',
|
264
|
+
'広場 ガレージ 鉄工所',
|
265
|
+
'広場 訓練場 農園 保健所',
|
266
|
+
'広場 学舎 骨董屋',
|
267
|
+
'広場 塗装工 菓子屋 貯蔵庫',
|
268
|
+
'広場 診療所 礼拝堂',
|
269
|
+
]
|
270
|
+
),
|
271
|
+
}.freeze
|
272
|
+
|
273
|
+
# 部位表
|
274
|
+
BUI_TABLES = {
|
275
|
+
"BUI" => DiceTable::Table.new(
|
276
|
+
"命中部位決定表",
|
277
|
+
"1D6",
|
278
|
+
[
|
279
|
+
'頭部',
|
280
|
+
'胴体',
|
281
|
+
'右腕',
|
282
|
+
'左腕',
|
283
|
+
'脚部',
|
284
|
+
'任意部位',
|
285
|
+
]
|
286
|
+
),
|
287
|
+
}.freeze
|
288
|
+
|
289
|
+
register_prefix('^GR[HDMS]?', 'ITM[2-6]', 'BUI', 'SST')
|
290
|
+
|
291
|
+
def eval_game_system_specific_command(command)
|
292
|
+
cmd_gr(command) ||
|
293
|
+
roll_item(command) ||
|
294
|
+
roll_tables(command, BUI_TABLES) ||
|
295
|
+
roll_tables(command, SISETSU_TABLES)
|
296
|
+
end
|
297
|
+
|
298
|
+
# GR系コマンドの分割
|
299
|
+
def cmd_gr(command)
|
300
|
+
case command
|
301
|
+
when /^GRS/
|
302
|
+
roll_search(command)
|
303
|
+
when /^GR[HDM]/
|
304
|
+
roll_target(command)
|
305
|
+
when /^GR/
|
306
|
+
roll_gr(command)
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
# 探索・索敵判定
|
311
|
+
def roll_search(command)
|
312
|
+
m = %r{^GRS([+-/*\d]+)?$}.match(command)
|
313
|
+
unless m
|
314
|
+
return nil
|
315
|
+
end
|
316
|
+
|
317
|
+
modifier = Arithmetic.eval(m[1] || "", RoundType::FLOOR) || 0
|
318
|
+
|
319
|
+
dice_result = roll_dice_with_modifier(modifier)
|
320
|
+
r = determine_no_target_result("S", dice_result[:total], dice_result[:critical], dice_result[:fumble])
|
321
|
+
|
322
|
+
r.text = "(#{m[0]}) > #{dice_result[:dice_sum]}[#{dice_result[:dice_list].join(',')}]#{m[1]} > #{dice_result[:total]} > #{r.text}"
|
323
|
+
return r
|
324
|
+
end
|
325
|
+
|
326
|
+
# 目標値を持つ判定ロール
|
327
|
+
def roll_target(command)
|
328
|
+
m = %r{^GR([HDM])([+-/*\d]+)?(?:>=?([+-/*\d]+)+)$}.match(command)
|
329
|
+
unless m
|
330
|
+
return nil
|
331
|
+
end
|
332
|
+
|
333
|
+
roll_type = m[1].to_str
|
334
|
+
modifier = Arithmetic.eval(m[2] || "", RoundType::FLOOR) || 0
|
335
|
+
target = Arithmetic.eval(m[3] || "", RoundType::FLOOR) || 0
|
336
|
+
|
337
|
+
dice_result = roll_dice_with_modifier(modifier)
|
338
|
+
r = determine_target_result(roll_type, dice_result[:total], target, dice_result[:critical], dice_result[:fumble])
|
339
|
+
|
340
|
+
r.text = "(#{m[0]}) > #{dice_result[:dice_sum]}[#{dice_result[:dice_list].join(',')}]#{m[2]} > #{dice_result[:total]} > #{r.text}"
|
341
|
+
return r
|
342
|
+
end
|
343
|
+
|
344
|
+
# GRのみの基本判定
|
345
|
+
def roll_gr(command)
|
346
|
+
m = %r{^GR([+-/*\d]+)?(>=)?\(?([+-/*\d]+)?\)?$}.match(command)
|
347
|
+
unless m
|
348
|
+
return nil
|
349
|
+
end
|
350
|
+
|
351
|
+
modifier = Arithmetic.eval(m[1] || "", RoundType::FLOOR) || 0
|
352
|
+
|
353
|
+
target_flag = !m[2].nil?
|
354
|
+
dice_result = roll_dice_with_modifier(modifier)
|
355
|
+
|
356
|
+
if target_flag
|
357
|
+
target = Arithmetic.eval(m[3] || "", RoundType::FLOOR) || 0
|
358
|
+
r = determine_target_result("", dice_result[:total], target, dice_result[:critical], dice_result[:fumble])
|
359
|
+
else
|
360
|
+
r = determine_no_target_result("", dice_result[:total], dice_result[:critical], dice_result[:fumble])
|
361
|
+
end
|
362
|
+
r.text = "(#{m[0]}) > #{dice_result[:dice_sum]}[#{dice_result[:dice_list].join(',')}]#{m[1]} > #{dice_result[:total]} > #{r.text}"
|
363
|
+
return r
|
364
|
+
end
|
365
|
+
|
366
|
+
# 基準値(modifier)をもとに2d6+基準値の判定を行う
|
367
|
+
def roll_dice_with_modifier(modifier)
|
368
|
+
dice_list = randomizer.roll_barabara(2, 6)
|
369
|
+
dice_sum = dice_list.sum
|
370
|
+
total = dice_sum + modifier
|
371
|
+
critical_flag = dice_list.count(6) == 2
|
372
|
+
fumble_flag = dice_list.count(1) == 2
|
373
|
+
return {dice_list: dice_list, dice_sum: dice_sum, total: total, critical: critical_flag, fumble: fumble_flag}
|
374
|
+
end
|
375
|
+
|
376
|
+
# roll_typeごとにResultを作成(目標値あり)
|
377
|
+
def determine_target_result(roll_type, total, target, critical, fumble)
|
378
|
+
case roll_type
|
379
|
+
when "H"
|
380
|
+
if critical
|
381
|
+
Result.critical("クリティカル命中")
|
382
|
+
elsif fumble
|
383
|
+
Result.fumble("ファンブル")
|
384
|
+
elsif total >= target + 4
|
385
|
+
Result.success("急所命中")
|
386
|
+
elsif total >= target
|
387
|
+
Result.success("命中")
|
388
|
+
else
|
389
|
+
Result.failure("失敗")
|
390
|
+
end
|
391
|
+
when "D"
|
392
|
+
if critical
|
393
|
+
Result.critical("クリティカル")
|
394
|
+
elsif fumble
|
395
|
+
Result.fumble("ファンブル")
|
396
|
+
elsif total >= target
|
397
|
+
Result.success("回避成功")
|
398
|
+
elsif total >= target - 4
|
399
|
+
Result.failure("半減命中")
|
400
|
+
else
|
401
|
+
Result.failure("失敗")
|
402
|
+
end
|
403
|
+
when "M"
|
404
|
+
# 抵抗判定は基準値以上(激情)のほうが悪い効果のことが多いためResultを反転[6,6]の場合にファンブル
|
405
|
+
if critical
|
406
|
+
Result.fumble("必ず激情")
|
407
|
+
elsif fumble
|
408
|
+
Result.critical("必ず平静")
|
409
|
+
elsif total >= target
|
410
|
+
Result.failure("激情")
|
411
|
+
else
|
412
|
+
Result.success("平静")
|
413
|
+
end
|
414
|
+
else
|
415
|
+
if critical
|
416
|
+
Result.critical("クリティカル")
|
417
|
+
elsif fumble
|
418
|
+
Result.fumble("ファンブル")
|
419
|
+
elsif total >= target
|
420
|
+
Result.success("成功")
|
421
|
+
else
|
422
|
+
Result.failure("失敗")
|
423
|
+
end
|
424
|
+
end
|
425
|
+
end
|
426
|
+
|
427
|
+
# roll_typeごとにResultを作成(目標値なし)
|
428
|
+
def determine_no_target_result(roll_type, total, critical, fumble)
|
429
|
+
case roll_type
|
430
|
+
when "S"
|
431
|
+
if critical
|
432
|
+
Result.critical("クリティカル")
|
433
|
+
elsif fumble
|
434
|
+
Result.fumble("ファンブル")
|
435
|
+
else
|
436
|
+
success_level = (total - 4) / 2
|
437
|
+
if success_level >= 11
|
438
|
+
success_level = 11
|
439
|
+
elsif success_level <= 0
|
440
|
+
success_level = 1
|
441
|
+
end
|
442
|
+
r = Result.new
|
443
|
+
r.text = "成功ML #{success_level}"
|
444
|
+
return r
|
445
|
+
end
|
446
|
+
else
|
447
|
+
if critical
|
448
|
+
Result.critical("クリティカル")
|
449
|
+
elsif fumble
|
450
|
+
Result.fumble("ファンブル")
|
451
|
+
else
|
452
|
+
r = Result.new
|
453
|
+
r.text = "達成値 #{total}"
|
454
|
+
return r
|
455
|
+
end
|
456
|
+
end
|
457
|
+
end
|
458
|
+
|
459
|
+
## アイテム表ロール ランク
|
460
|
+
def roll_item(command)
|
461
|
+
unless command.include?("ITM")
|
462
|
+
return nil
|
463
|
+
end
|
464
|
+
|
465
|
+
# 1回目のアイテムロール
|
466
|
+
result = roll_tables(command, ITEM_TABLES)
|
467
|
+
# 上級判定
|
468
|
+
if result.include?("(66)")
|
469
|
+
result = roll_tables(command, ITEM_TABLES) + "*上級アイテム*"
|
470
|
+
end
|
471
|
+
# 選択判定
|
472
|
+
if result.include?("(66)")
|
473
|
+
result = "上級アイテムを自由選択!!"
|
474
|
+
end
|
475
|
+
return result
|
476
|
+
end
|
477
|
+
end
|
478
|
+
end
|
479
|
+
end
|