Class: BCDice::GameSystem::GundogRevised

Inherits:
Base
  • Object
show all
Defined in:
lib/bcdice/game_system/GundogRevised.rb

Constant Summary collapse

ID =

ゲームシステムの識別子

'GundogRevised'
NAME =

ゲームシステム名

'ガンドッグ・リヴァイズド'
SORT_KEY =

ゲームシステム名の読みがな

'かんとつくりうあいすと'
HELP_MESSAGE =

ダイスボットの使い方

<<~INFO_MESSAGE_TEXT
  失敗、成功、クリティカル、ファンブルとロールの達成値の自動判定を行います。
  nD9ロールも対応。
  ・ダメージペナルティ表  (~DPTx) (x:修正)
   射撃(SDPT)、格闘(MDPT)、車両(VDPT)、汎用(GDPT)の各表を引くことが出来ます。
   修正を後ろに書くことも出来ます。
  ・ファンブル表      (~FTx)  (x:修正)
   射撃(SFT)、格闘(MFT)、投擲(TFT)の各表を引くことが出来ます。
   修正を後ろに書くことも出来ます。
INFO_MESSAGE_TEXT

Instance Attribute Summary

Attributes inherited from Base

#d66_sort_type, #default_cmp_op, #default_target_number, #randomizer, #reroll_dice_reroll_threshold, #round_type, #sides_implicit_d, #upper_dice_reroll_threshold

Instance Method Summary collapse

Methods inherited from Base

#change_text, #check_result, command_pattern, #enable_debug, #enabled_d9?, eval, #eval, #grich_text, prefixes_pattern, register_prefix, register_prefix_from_super_class, #sort_add_dice?, #sort_barabara_dice?

Methods included from Translate

#translate

Constructor Details

#initialize(command) ⇒ GundogRevised

Returns a new instance of GundogRevised.



31
32
33
34
# File 'lib/bcdice/game_system/GundogRevised.rb', line 31

def initialize(command)
  super(command)
  @enabled_d9 = true
end

Instance Method Details

#eval_game_system_specific_command(command) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/bcdice/game_system/GundogRevised.rb', line 63

def eval_game_system_specific_command(command)
  string = command.upcase

  table = []
  ttype = ""
  type = ""
  mod = 0

  # ダメージペナルティ表
  if /(\w)DPT([+\-\d]*)/i =~ string
    ttype = 'ダメージペナルティー'
    head = Regexp.last_match(1)
    mod = ArithmeticEvaluator.eval(Regexp.last_match(2)) if Regexp.last_match(2)

    type, table = getDamageTypeAndTable(head)
  end

  # ファンブル表
  if /(\w)FT([+\-\d]*)/i =~ string
    ttype = 'ファンブル'
    head = Regexp.last_match(1)
    mod = ArithmeticEvaluator.eval(Regexp.last_match(2)) if Regexp.last_match(2)

    type, table = getFumbleTypeAndTable(head)
  end

  return '1' if type.empty?

  diceArray = @randomizer.roll_barabara(2, 10)
  dice = mod + diceArray.select { |x| x < 10 }.sum()

  diceOriginalText = dice
  dice = 0 if dice < 0
  dice = 18 if dice > 18

  output = "#{type}#{ttype}表[#{diceOriginalText}] > #{table[dice]}"

  return output
end

#getDamageTypeAndTable(head) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
# File 'lib/bcdice/game_system/GundogRevised.rb', line 103

def getDamageTypeAndTable(head)
  case head
  when "S"
    type = '射撃'
    # 射撃ダメージペナルティー表
    table = [
      '対象は[死亡]', # 0
      '[追加D]4D6/[出血]2D6/[重傷]-40%/[朦朧判定]15',    # 1
      '[追加D]3D6/[出血]2D6/[重傷]-30%/[朦朧判定]14',    # 2
      '[追加D]3D6/[出血]2D6/[重傷]-30%/[朦朧判定]13',    # 3
      '[追加D]3D6/[出血]1D6/[重傷]-20%/[朦朧判定]12',    # 4
      '[追加D]2D6/[出血]1D6/[重傷]-20%/[朦朧判定]11',    # 5
      '[追加D]2D6/[軽傷]-20%/[朦朧判定]11',              # 6
      '[追加D]2D6/[軽傷]-20%/[朦朧判定]10',              # 7
      '[追加D]2D6/[軽傷]-20%/[朦朧判定]8',               # 8
      '[追加D]2D6/[軽傷]-20%/[朦朧判定]6',               # 9
      '[追加D]2D6/[軽傷]-10%/[朦朧判定]4',               # 10
      '[追加D]2D6/[軽傷]-20%',                           # 11
      '[追加D]1D6/[軽傷]-20%',                           # 12
      '[追加D]1D6/[軽傷]-10%',                           # 13
      '[ショック]-20%',                                  # 14
      '[ショック]-10%',                                  # 15
      '[不安定]', # 16
      '手に持った武器を落とす。複数ある場合はランダム', # 17
      'ペナルティー無し', # 18
    ]

  when "M"
    type = '格闘'
    # 格闘ダメージペナルティー表
    table = [
      '対象は[死亡]', # 0
      '[追加D]4D6/[出血]2D6/[重傷]-40%/[朦朧判定]15',    # 1
      '[追加D]3D6/[出血]2D6/[重傷]-30%/[朦朧判定]14',    # 2
      '[追加D]3D6/[出血]1D6/[重傷]-20%/[朦朧判定]14/[不安定]', # 3
      '[追加D]2D6/[出血]1D6/[重傷]-20%/[朦朧判定]14', # 4
      '[追加D]2D6/[重傷]-20%/[朦朧判定]12/[不安定]', # 5
      '[追加D]2D6/[軽傷]-20%/[朦朧判定]11',              # 6
      '[追加D]2D6/[軽傷]-20%/[朦朧判定]10',              # 7
      '[追加D]2D6/[軽傷]-20%/[朦朧判定]8',               # 8
      '[追加D]2D6/[軽傷]-20%/[朦朧判定]6',               # 9
      '[追加D]1D6/[軽傷]-20%/[朦朧判定]6',               # 10
      '[追加D]1D6/[軽傷]-10%/[朦朧判定]6',               # 11
      '[追加D]1D6/[軽傷]-10%/[不安定]', # 12
      '[追加D]1D6/[軽傷]-10%',                           # 13
      '[ショック]-20%',                                  # 14
      '[ショック]-10%',                                  # 15
      '[不安定]', # 16
      '手に持った武器を落とす。複数ある場合はランダム', # 17
      'ペナルティー無し', # 18
    ]

  when "V"
    type = '車両'
    # 車両ダメージペナルティー表
    table = [
      '[クラッシュ]する。[チェイス]から除外', # 0
      '[車両D]4D6/[乗員D]3D6/[操作性]-40%/[スピン判定]',  # 1
      '[車両D]3D6/[乗員D]3D6/[操作性]-30%/[スピン判定]',  # 2
      '[乗員D]3D6/[操作性]-20%/[スピン判定]',             # 3
      '[乗員D]3D6/[操作性]-20%/[スピン判定]',             # 4
      '[乗員D]3D6/[操作性]-10%/[スピン判定]',             # 5
      '[乗員D]3D6/[操作性]-10%/[スピン判定]',             # 6
      '[乗員D]2D6/[スピード]-2/[スピン判定]',             # 7
      '[乗員D]2D6/[スピード]-2/[スピン判定]',             # 8
      '[乗員D]2D6/[操縦判定]-20%/[スピン判定]',           # 9
      '[乗員D]2D6/[操縦判定]-20%/[スピン判定]',           # 10
      '[乗員D]2D6/[操縦判定]-20%',                        # 11
      '[乗員D]2D6/[操縦判定]-20%',                        # 12
      '[乗員D]1D6/[操縦判定]-20%',                        # 13
      '[乗員D]1D6/[操縦判定]-10%',                        # 14
      '攻撃が乗員をかすめる。ランダムな乗員1人に[ショック]-20%', # 15
      '攻撃が乗員に当たりかける。ランダムな乗員1人に[ショック]-10%', # 16
      '車両が蛇行。乗員全員は〈運動〉判定。失敗で[不安定]', # 17
      'ペナルティー無し', # 18
    ]

  when "G"
    type = '汎用'
    # 汎用ダメージペナルティー表
    table = [
      '対象は[死亡]', # 0
      '[追加D]4D6/[出血]2D6/[重傷]-40%/[朦朧判定]15',    # 1
      '[追加D]3D6/[出血]2D6/[重傷]-30%/[朦朧判定]14',    # 2
      '[追加D]2D6/[出血]1D6/[重傷]-30%/[朦朧判定]13/[不安定]', # 3
      '[追加D]2D6/[出血]1D6/[重傷]-30%/[朦朧判定]12', # 4
      '[追加D]2D6/[重傷]-20%/[朦朧判定]12/[不安定]', # 5
      '[追加D]1D6/[重傷]-20%/[朦朧判定]11',              # 6
      '[追加D]1D6/[軽傷]-30%/[朦朧判定]10',              # 7
      '[追加D]1D6/[軽傷]-30%/[朦朧判定]8',               # 8
      '[追加D]1D6/[軽傷]-30%/[朦朧判定]6',               # 9
      '[追加D]1D6/[軽傷]-20%/[朦朧判定]6',               # 10
      '[軽傷]-20%/[朦朧判定]6', # 11
      '[軽傷]-20%/[不安定]', # 12
      '[軽傷]-20%',                                      # 13
      '[軽傷]-10%',                                      # 14
      '[ショック]-20%', # 15
      '[ショック]-10%', # 16
      '[不安定]', # 17
      'ペナルティー無し', # 18
    ]
  else
    head = "S" # 間違ったら射撃扱い
    type, table = getDamageTypeAndTable(head)
  end

  return type, table
end

#getFumbleTypeAndTable(head) ⇒ Object



212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
# File 'lib/bcdice/game_system/GundogRevised.rb', line 212

def getFumbleTypeAndTable(head)
  case head
  when "S"
    type = '射撃'
    # 射撃ファンブル表
    table = [
      '銃器が暴発、自分に命中。[貫通D]。武装喪失', # 0
      '銃器が暴発、自分に命中。[非貫通D]。武装喪失', # 1
      '誤射。射線に最も近い味方に命中。[貫通D]', # 2
      '誤射。射線に最も近い味方に命中。[非貫通D]', # 3
      '銃器が完全に故障。直せない', # 4
      '故障。30分かけて〈メカニック〉判定に成功するまで使用不可。', # 5
      '故障。〈メカニック〉-20%の判定に成功するまで使用不可。', # 6
      '故障。〈メカニック〉判定に成功するまで射撃不可', # 7
      '作動不良。[アイテム使用]を2回行って修理するまで射撃不可', # 8
      '作動不良。[アイテム使用]を行って修理するまで射撃不可', # 9
      '足がもつれて倒れる。[転倒]', # 10
      '無理な射撃姿勢で腕を痛める。[軽傷]-20%', # 11
      '無理な射撃姿勢でどこかの筋を痛める。[軽傷]-10%', # 12
      '武装を落とす。スリング(肩ひも)も切れる', # 13
      '武装を落とす。スリング(肩ひも)があれば落とさない', # 14
      '排莢された薬莢が服の中に。[ショック]-20%', # 15
      '排莢された薬莢が顔に当たる。[ショック]-10%', # 16
      '薬莢を踏んで態勢を崩す。[不安定]', # 17
      'ペナルティー無し', # 18
    ]
  when "M"
    type = '格闘'
    # 格闘ファンブル表
    table = [
      '自分に命中。[貫通D]', # 0
      '自分に命中。[非貫通D]', # 1
      '最も近い味方(射程内にいなければ自分)に[貫通D]', # 2
      '最も近い味方(射程内にいなければ自分)に[非貫通D]', # 3
      '頭を強く打ちつける。[朦朧]', # 4
      '武装が壊れる。直せない。[格闘タイプ]なら[重傷]-20%', # 5
      '武装がすっぽ抜ける。グレネードの誤差で落下先を決定', # 6
      '武装が損傷。30分かけて〈手先〉判定に成功するまで使用不可。[格闘タイプ]なら[重傷]-10%', # 7
      '武装がガタつく。〈手先〉判定([格闘タイプ]なら〈強靭〉)に成功するまで使用不可。', # 8
      '武装に違和感。[アイテム使用]を行って調整するまで、命中率-20%', # 9
      '足がもつれる。[転倒]', # 10
      '足がつる。2[ラウンド]の間、移動距離1/2', # 11
      '無理な体勢で腕(あるいは脚)を痛める。[軽傷]-20%',   # 12
      '無理な体勢でどこかの筋を痛める。[軽傷]-10%',      # 13
      '武装を落とす', # 14
      '武装で自分が負傷。[ショック]-20%', # 15
      '武装の扱いを間違える。[ショック]-10%', # 16
      '攻撃を避けられて体勢を崩す。[不安定]', # 17
      'ペナルティー無し', # 18
    ]
  when "T"
    type = '投擲'
    # 投擲ファンブル表
    table = [
      '勢いをつけすぎて転倒し、頭を打つ。[気絶]',         # 0
      '自分に命中。(手榴弾なら自分の足元に落ちる)[貫通D]',   # 1
      '自分に命中。(手榴弾なら自分の足元に落ちる)[非貫通D]', # 2
      '暴投。射線に最も近い味方に命中。[貫通D]。手榴弾なら新たな中心点からさらに誤差が生じる', # 3
      '暴投。射線に最も近い味方に命中。[非貫通D]。手榴弾なら新たな中心点からさらに誤差が生じる', # 4
      '頭を強く打ちつける。[朦朧]', # 5
      '肩の筋肉断裂。この腕を使う判定に、[重傷]-20%', # 6
      'ヒジの筋肉断裂。この腕を使う判定に、[重傷]-10%', # 7
      '肩の筋をひどく痛める。〈医療〉判定に成功するまで、この腕を使う判定に-20%', # 8
      '肩の筋を痛める。[行動]を使って休めるまで、この腕を使う判定に-20%', # 9
      '腰を痛める。[軽傷]-30%', # 10
      '足がもつれて倒れる。[転倒]', # 11
      '足がつる。2[ラウンド]の間、移動距離1/2', # 12
      '無理な投擲体勢で腕(あるいは脚)を痛める。[軽傷]-20%', # 13
      '無理な投擲体勢でどこかの筋を痛める。[軽傷]-10%', # 14
      '肩に違和感。[ショック]-20%', # 15
      'ヒジに違和感。[ショック]-10%', # 16
      'つまずいて姿勢を崩す。[不安定]', # 17
      'ペナルティー無し', # 18
    ]
  else
    head = "S" # 間違ったら射撃扱い
    type, table = getFumbleTypeAndTable(head)
  end

  return type, table
end

#result_1d100(total, _dice_total, cmp_op, target) ⇒ Object

—- 以降、Gundog.rbよりほぼコピペ(絶対成功→ベアリーに用語変更対応の為、継承だと不都合) ゲーム別成功度判定(1d100)



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/bcdice/game_system/GundogRevised.rb', line 38

def result_1d100(total, _dice_total, cmp_op, target)
  return nil unless cmp_op == :<=

  if total >= 100
    Result.fumble("ファンブル")
  elsif total <= 1
    Result.critical("ベアリー(達成値1+SL)")
  elsif target == "?"
    Result.nothing
  elsif total <= target
    dig10 = total / 10
    dig1 = total - dig10 * 10
    dig10 = 0 if dig10 >= 10
    dig1 = 0 if dig1 >= 10 # 条件的にはあり得ない(笑

    if dig1 <= 0
      Result.critical("クリティカル(達成値20+SL)")
    else
      Result.success("成功(達成値#{dig10 + dig1}+SL)")
    end
  else
    Result.failure("失敗")
  end
end