Class: BCDice::GameSystem::GardenOrder

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

Direct Known Subclasses

AceKillerGene, ScreamHighSchool

Constant Summary collapse

ID =

ゲームシステムのの識別子

'GardenOrder'
NAME =

ゲームシステム名

'ガーデンオーダー'
SORT_KEY =

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

'かあてんおおたあ'
HELP_MESSAGE =

ダイスボットの使い方

<<~INFO_MESSAGE_TEXT
  ・基本判定
   GOx/y@z x:成功率、y:連続攻撃回数(省略可)、z:クリティカル値(省略可)
   (連続攻撃では1回の判定のみが実施されます)
   例)GO55 GO100/2 GO70@10 GO155/3@44
  ・負傷表
   DCxxy
   xx:属性(切断:SL,銃弾:BL,衝撃:IM,灼熱:BR,冷却:RF,電撃:EL)
   y:ダメージ
   例)DCSL7 DCEL22
INFO_MESSAGE_TEXT
DAMAGE_TABLE =
{
  "SL" => {
    name: "切断",
    table: [
      [5,
       {name: "切り傷",
        text: "皮膚が切り裂かれる。",
        damage: "軽傷1"}],
      [10,
       {name: "脚部負傷",
        text: "足が切り裂かれ、思わずひざまずく。",
        damage: "軽傷2/マヒ"}],
      [13,
       {name: "出血",
        text: "斬り裂かれた傷から出血が続く。",
        damage: "軽傷3/DOT:軽傷1"}],
      [16,
       {name: "胴部負傷",
        text: "胴部に大きな傷を受ける。",
        damage: "軽傷4"}],
      [19,
       {name: "腕部負傷",
        text: "腕に大きな傷を受ける。",
        damage: "重傷1/DOT:軽傷1"}],
      [22,
       {name: "腹部負傷",
        text: "腹部を深く切り裂かれる。",
        damage: "重傷2"}],
      [25,
       {name: "大量出血",
        text: "傷は深く、そこから大量に出血する。",
        damage: "重傷2/DOT:軽傷2"}],
      [28,
       {name: "裂傷",
        text: "治りにくい傷をつけられる。",
        damage: "重傷3"}],
      [31,
       {name: "視界不良",
        text: "頭部に受けた傷から血が流れ、視界がふさがれる。",
        damage: "重傷3/スタン"}],
      [34,
       {name: "胸部負傷",
        text: "胸から腰にかけて大きく切り裂かれる。",
        damage: "致命傷1"}],
      [37,
       {name: "動脈切断",
        text: "動脈が切り裂かれ、噴き出るように出血する。",
        damage: "致命傷1/DOT:軽傷3"}],
      [39,
       {name: "胸部切断",
        text: "傷が肺にまで達し、喀血する。",
        damage: "致命傷2"}],
      [9999,
       {name: "脊髄損傷",
        text: "脊髄が損傷する。",
        damage: "致命傷2/放心、スタン、マヒ"}],
    ]
  },

  "BL" => {
    name: "銃弾",
    table: [
      [5,
       {name: "腕部損傷",
        text: "銃弾が腕をかすめた。",
        damage: "軽傷2"}],
      [10,
       {name: "腕部貫通",
        text: "銃弾が腕を貫く。痛みはあるが動作に支障はない。",
        damage: "軽傷3"}],
      [13,
       {name: "胴部負傷",
        text: "胴部に銃弾をくらう。痛みで動きが鈍くなる。",
        damage: "軽傷4/スロウ:-3"}],
      [16,
       {name: "肩負傷",
        text: "肩を貫かれる。骨が砕けたようだ。",
        damage: "重傷1"}],
      [19,
       {name: "腹部負傷",
        text: "腹部が貫かれる。かろうじて内臓にダメージはないようだ。",
        damage: "重傷2"}],
      [22,
       {name: "脚部貫通",
        text: "脚を銃弾に貫かれ、その場でひざまずく。",
        damage: "重傷2/マヒ"}],
      [25,
       {name: "消化器系損傷",
        text: "胃などの消化器官にダメージを受ける。",
        damage: "重傷3"}],
      [28,
       {name: "盲管銃弾",
        text: "身体に弾丸が深々と刺さる。激痛が走る。",
        damage: "重傷3/スロウ:-5"}],
      [31,
       {name: "内臓損傷",
        text: "いくつかの内臓にダメージを受ける。",
        damage: "致命傷1/スタン"}],
      [34,
       {name: "胴部貫通",
        text: "腹部への攻撃が貫通し、出血する。",
        damage: "致命傷1/DOT:軽傷1"}],
      [37,
       {name: "胸部負傷",
        text: "銃弾で肺を貫かれる。",
        damage: "致命傷2"}],
      [39,
       {name: "致命的な一撃",
        text: "銃弾が頭部に命中。ショックで意識を飛ばされる。",
        damage: "致命傷2/放心"}],
      [9999,
       {name: "必殺の一撃",
        text: "銃弾が心臓の近くを貫く。動脈にダメージを受けたようだ。",
        damage: "致命傷2/DOT:重傷1"}],
    ]
  },

  "IM" => {
    name: "衝撃",
    table: [
      [5,
       {name: "打撲",
        text: "攻撃を受けた箇所がどす黒く腫れ上がる。",
        damage: "軽傷1"}],
      [10,
       {name: "転倒",
        text: "衝撃で転倒する。",
        damage: "軽傷1/マヒ"}],
      [13,
       {name: "平衡感覚喪失",
        text: "衝撃で三半規管にダメージを受ける。",
        damage: "軽傷2、疲労2"}],
      [16,
       {name: "ボディーブロー",
        text: "腹部に直撃。痛みが継続し、体力を奪う。",
        damage: "軽傷3/DOT:疲労3"}],
      [19,
       {name: "痛打",
        text: "胴部や脚部などに打撃を受ける。",
        damage: "軽傷4/スタン"}],
      [22,
       {name: "頭部痛打",
        text: "頭部にクリーンヒット。意識がもうろうとする。",
        damage: "軽傷5/放心"}],
      [25,
       {name: "脚部骨折",
        text: "攻撃が足に命中し、骨折する。",
        damage: "重傷1/スロウ:-5"}],
      [28,
       {name: "大転倒",
        text: "激しい衝撃によって、負傷すると共に大きく体勢を崩す。",
        damage: "重傷1/マヒ、スタン"}],
      [31,
       {name: "脳震盪",
        text: "脳が大きく揺さぶられ、意識が飛びそうになる。",
        damage: "重傷2/放心"}],
      [34,
       {name: "複雑骨折",
        text: "攻撃を受けた部分が大きくひしゃげ、複雑骨折したようだ。",
        damage: "重傷3/放心、スタン"}],
      [37,
       {name: "頭部裂傷",
        text: "頭部に命中。皮膚が大きく裂ける。",
        damage: "致命傷1、疲労3"}],
      [39,
       {name: "肋骨負傷",
        text: "折れた肋骨が肺に突き刺さり、まともに呼吸を行なうことができない。",
        damage: "致命傷1/放心、スタン"}],
      [9999,
       {name: "内臓損傷",
        text: "衝撃が身体の芯まで届き、内臓がいくつか傷ついたようだ。",
        damage: "致命傷2/DOT:重傷1"}],
    ]
  },

  "BR" => {
    name: "灼熱",
    table: [
      [5,
       {name: "火傷",
        text: "皮膚に小さな火傷を負う。",
        damage: "軽傷1"}],
      [10,
       {name: "温度上昇",
        text: "熱によって、怪我だけではなく体力も奪われる。",
        damage: "軽傷2、疲労1"}],
      [13,
       {name: "恐怖",
        text: "燃え上がる炎に恐怖を感じ、身体がすくんで動きが止まる。",
        damage: "軽傷3/放心"}],
      [16,
       {name: "発火",
        text: "衣服や身体の一部に火が燃え移る。",
        damage: "軽傷3/DOT:軽傷1"}],
      [19,
       {name: "爆発",
        text: "爆発により吹き飛ばされ、転倒する。",
        damage: "重傷1/マヒ"}],
      [22,
       {name: "大火傷",
        text: "痕が残るほどの大きな火傷を負う。",
        damage: "重傷2"}],
      [25,
       {name: "熱波",
        text: "火傷と強力な熱により意識がもうろうとする。",
        damage: "重傷2/スタン"}],
      [28,
       {name: "大爆発",
        text: "激しい爆発で吹き飛ばされ、ダメージと共に転倒する。",
        damage: "重傷3/マヒ"}],
      [31,
       {name: "大発火",
        text: "広範囲に火が燃え移る。",
        damage: "重傷3/DOT:軽傷1"}],
      [34,
       {name: "炭化",
        text: "高熱のあまり、焼けた部分が炭化してしまう。",
        damage: "致命傷1"}],
      [37,
       {name: "内臓火傷",
        text: "高温の空気を吸い込む、気道にも火傷を負ってしまう。",
        damage: "致命傷1/DOT:軽傷1"}],
      [39,
       {name: "全身火傷",
        text: "身体の各所に深い火傷を負う。",
        damage: "致命傷2"}],
      [9999,
       {name: "致命的火傷",
        text: "身体の大部分に焼けどを負う。",
        damage: "致命傷2/スタン"}],
    ]
  },

  "RF" => {
    name: "冷却",
    table: [
      [5,
       {name: "冷気",
        text: "軽い凍傷を受ける。",
        damage: "軽傷1"}],
      [10,
       {name: "霜の衣",
        text: "身体が薄い氷で覆われ、動きが鈍る。",
        damage: "軽傷1/疲労1"}],
      [13,
       {name: "凍傷",
        text: "凍傷により身体が傷つけられる。",
        damage: "軽傷2"}],
      [16,
       {name: "体温低下",
        text: "冷気によって体温を奪われる。",
        damage: "軽傷3/DOT:疲労1"}],
      [19,
       {name: "氷の枷",
        text: "肘や膝などが氷で覆われ、動きが取りにくくなる。",
        damage: "重傷1/マヒ"}],
      [22,
       {name: "大凍傷",
        text: "身体の各所に凍傷を受ける。",
        damage: "重傷1/DOT:疲労2"}],
      [25,
       {name: "氷の束縛",
        text: "下半身が凍りつき、動くことができない。",
        damage: "重傷2/マヒ"}],
      [28,
       {name: "視界不良",
        text: "頭部にも氷が張り、視界がふさがれる。",
        damage: "重傷2/スタン"}],
      [31,
       {name: "腕部凍結",
        text: "腕が凍りづけになり、動かすことができない。",
        damage: "重傷3/放心"}],
      [34,
       {name: "重度凍傷",
        text: "さらに体温が低下し、深刻な凍傷を受ける。",
        damage: "致命傷1"}],
      [37,
       {name: "全身凍結",
        text: "全身が凍りづけになる。",
        damage: "致命傷1/DOT:疲労2"}],
      [39,
       {name: "致命的凍傷",
        text: "身体全身に凍傷を受ける。",
        damage: "致命傷2"}],
      [9999,
       {name: "氷の棺",
        text: "完全に氷に閉じ込められる。",
        damage: "致命傷2/スタン、マヒ"}],
    ]
  },

  "EL" => {
    name: "電撃",
    table: [
      [5,
       {name: "静電気",
        text: "全身の毛が逆立つ。",
        damage: "疲労3"}],
      [10,
       {name: "電熱傷",
        text: "電流によって傷つく。",
        damage: "疲労1、軽傷1"}],
      [13,
       {name: "感電",
        text: "電流で傷つくと共に、身体が軽くしびれる。",
        damage: "疲労2、軽傷2"}],
      [16,
       {name: "閃光",
        text: "激しい電光により、一時的に視界がふさがれる。",
        damage: "軽傷3/スタン"}],
      [19,
       {name: "脚部感電",
        text: "電流により脚がしびれ、動けなくなる。",
        damage: "重傷1/マヒ"}],
      [22,
       {name: "大電熱傷",
        text: "身体の各所が電流によって傷つく。",
        damage: "疲労2、重傷2"}],
      [25,
       {name: "腕部負傷",
        text: "電流で腕がしびれ、動けなくなる。",
        damage: "軽傷1、重傷2/放心"}],
      [28,
       {name: "大感電",
        text: "電流によって身体中がしびれ、動けなくなる。",
        damage: "重傷2/スタン、マヒ"}],
      [31,
       {name: "一時心停止",
        text: "強力な電撃のショックにより、心臓がほんの一瞬だけ止まる。",
        damage: "疲労3、重傷3"}],
      [34,
       {name: "大電流",
        text: "全身に電流が駆け巡る。",
        damage: "重傷3/放心、マヒ"}],
      [37,
       {name: "致命電熱傷",
        text: "全身が電流によって傷つく。",
        damage: "重傷1、致命傷1"}],
      [39,
       {name: "心停止",
        text: "強力な電撃のショックにより、心臓が一時的に止まる。死の淵が見える。",
        damage: "疲労3、重傷1、致命傷1"}],
      [9999,
       {name: "組織炭化",
        text: "全身が電流で焼かれ、あちこちの組織が炭化する。",
        damage: "致命傷2/スタン"}],
    ]
  }
}.freeze

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, #initialize, prefixes_pattern, register_prefix, register_prefix_from_super_class, #sort_add_dice?, #sort_barabara_dice?

Methods included from Translate

#translate

Constructor Details

This class inherits a constructor from BCDice::Base

Instance Method Details

#check_roll(success_rate, critical_border) ⇒ Object



69
70
71
72
73
74
75
76
77
78
# File 'lib/bcdice/game_system/GardenOrder.rb', line 69

def check_roll(success_rate, critical_border)
  success_rate = 0 if success_rate < 0
  fumble_border = (success_rate < 100 ? 96 : 99)

  dice_value = @randomizer.roll_once(100)
  result = get_check_result(dice_value, success_rate, critical_border, fumble_border)

  result.text = "D100<=#{success_rate}@#{critical_border}#{dice_value}#{result.text}"
  return result
end

#check_roll_repeat_attack(success_rate, repeat_count, critical_border) ⇒ Object



59
60
61
62
63
64
65
66
67
# File 'lib/bcdice/game_system/GardenOrder.rb', line 59

def check_roll_repeat_attack(success_rate, repeat_count, critical_border)
  success_rate_per_one = success_rate / repeat_count
  # 連続攻撃は最終的な成功率が50%以上であることが必要 cf. p217
  if repeat_count > 1 && success_rate_per_one < 50
    return "D100<=#{success_rate_per_one}@#{critical_border} > 連続攻撃は成功率が50%以上必要です"
  end

  check_roll(success_rate_per_one, critical_border)
end

#eval_game_system_specific_command(command) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/bcdice/game_system/GardenOrder.rb', line 33

def eval_game_system_specific_command(command)
  case command
  when %r{GO(-?\d+)(/(\d+))?(@(\d+))?}i
    success_rate = Regexp.last_match(1).to_i
    repeat_count = (Regexp.last_match(3) || 1).to_i
    critical_border_text = Regexp.last_match(5)
    critical_border = get_critical_border(critical_border_text, success_rate)

    return check_roll_repeat_attack(success_rate, repeat_count, critical_border)

  when /^DC(SL|BL|IM|BR|RF|EL)(\d+)/i
    type = Regexp.last_match(1)
    damage_value = Regexp.last_match(2).to_i
    return look_up_damage_chart(type, damage_value)
  end

  return nil
end

#get_check_result(dice_value, success_rate, critical_border, fumble_border) ⇒ Object



80
81
82
83
84
85
86
87
# File 'lib/bcdice/game_system/GardenOrder.rb', line 80

def get_check_result(dice_value, success_rate, critical_border, fumble_border)
  # クリティカルとファンブルが重なった場合は、ファンブルとなる。 cf. p175
  return Result.fumble("ファンブル") if dice_value >= fumble_border
  return Result.critical("クリティカル") if dice_value <= critical_border
  return Result.success("成功") if dice_value <= success_rate

  return Result.failure("失敗")
end

#get_critical_border(critical_border_text, success_rate) ⇒ Object



52
53
54
55
56
57
# File 'lib/bcdice/game_system/GardenOrder.rb', line 52

def get_critical_border(critical_border_text, success_rate)
  return critical_border_text.to_i unless critical_border_text.nil?

  critical_border = [success_rate / 5, 1].max
  return critical_border
end

#get_damage_table_info_by_type(type) ⇒ Object



98
99
100
101
102
103
# File 'lib/bcdice/game_system/GardenOrder.rb', line 98

def get_damage_table_info_by_type(type)
  data = DAMAGE_TABLE[type]
  return nil if data.nil?

  return data[:name], data[:table]
end

#look_up_damage_chart(type, damage_value) ⇒ Object



89
90
91
92
93
94
95
96
# File 'lib/bcdice/game_system/GardenOrder.rb', line 89

def look_up_damage_chart(type, damage_value)
  name, table = get_damage_table_info_by_type(type)

  row = get_table_by_number(damage_value, table, nil)
  return nil if row.nil?

  "負傷表:#{name}[#{damage_value}] > #{row[:damage]}#{row[:name]}#{row[:text]}"
end