class BCDice::GameSystem::GundogRevised

Constants

HELP_MESSAGE

ダイスボットの使い方

ID

ゲームシステムの識別子

NAME

ゲームシステム名

SORT_KEY

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

Public Class Methods

new(command) click to toggle source
Calls superclass method BCDice::Base::new
# File lib/bcdice/game_system/GundogRevised.rb, line 31
def initialize(command)
  super(command)
  @enabled_d9 = true
end

Public Instance Methods

eval_game_system_specific_command(command) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source

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

# 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