class BCDice::GameSystem::ColossalHunter

Constants

HELP_MESSAGE

ダイスボットの使い方

ID

ゲームシステムの識別子

NAME

ゲームシステム名

SORT_KEY

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

TABLES

Public Class Methods

new(command) click to toggle source
Calls superclass method BCDice::Base::new
# File lib/bcdice/game_system/ColossalHunter.rb, line 37
def initialize(command)
  super(command)
  @d66_sort_type = D66SortType::NO_SORT
end

Public Instance Methods

eval_game_system_specific_command(command) click to toggle source
# File lib/bcdice/game_system/ColossalHunter.rb, line 42
def eval_game_system_specific_command(command)
  getCheckRollDiceCommandResult(command) ||
    getSourceSceneDiceCommandResult(command) ||
    getCreateNpcDiceCommandResult(command) ||
    getTableDiceCommandResult(command)
end
getBig6Table() click to toggle source
# File lib/bcdice/game_system/ColossalHunter.rb, line 154
def getBig6Table
  table =
    [
      ["この世の地獄", "あれはまさに地獄。屍の山。嘆く者。呆然とする者。目の前で潰される者。あの日、人類は霊長ではなく……弱き獣の一種となった。", "15+2D6"],
      ["悪の時代", "全ての崩壊、呆然の時。救援が望めぬとわかったなら、少なからぬ者が悪に走った。あの頃は、あなたもまた下劣なる略奪者だった。", "18+2D6"],
      ["消えざる罪", "混乱の中、あなたは……私怨を晴らした。許せない人間を、その手で始末した。罪に問う者はいない……他ならぬあなた自身以外は。", "18+2D6"],
      ["言葉にできない", "ただ呆然と。廃人のようにあの期間を過ごした。目の前で何が起きていたかは覚えているけれど。思い出したくは……ない。", "任意(最低14)"],
      ["望む時代", "あの平和で膿んだ世界が嫌いだった。全てが壊れて、訪れた無法の時代。あなたは、あの日常が壊れた今を歓迎している。", "18+2D6"],
      ["あなたの呪い", "世界を怨み、自殺しようとした時、世界は変わった。あなたの呪詛が形になったように……コロッサルが全てを破壊し始めたのだ。", "任意(最低20)"],
      ["肉親の命日", "家族は、あなたの全てだった。だからあの日は、全てが失われた日だ。注ぐ愛も注がれる愛も、きっとあの日に枯れたのだ。", "任意(最低14)"],
      ["戦友の命日", "あなたとその仲間は無抵抗をよしとせず、コロッサルに立ち向かった。そして……あなた以外は全員が死んだ。彼らの分も生きなければ。", "30+3D6"],
      ["トラウマ", "あの日を思い出すだけで、震えが止まらず汗と涙が溢れ出す。忘れるためには、コロッサルと戦い続けるしかないだろう、きっと。", "任意(最低14)"],
      ["死を逃した時", "意識を失い、目覚めれば全ては壊れた後。生き延びたのは幸運なのか。不幸なのか。あるいはそれとも、呪いなのか。", "10+3D6"],
      ["呪縛", "あの時、無数の死を見た。その中で、ある一人が言った言葉が忘れられない。それは今も、あなたを縛る呪いとなっている。", "18+2D6"],
      ["ひっかかり", "あの日、配偶者あるいは恋人と別れた。恋の終わりと、世界の終わり。あれ以来、相手が生きているかもわからない……。", "25+3D6"],
      ["重症", "昏睡BIG-6で重い疵を負ったあなたは、長く昏睡状態だった。幸いにも人工冬眠装置によって、あなたは年を経ずに目を覚ましたが……。", "任意"],
      ["些末事", "あなたにはコロッサルの出現などよりも重要な目的がある。BIG-6など、どうでもよい。あなたは決して揺らぎはしないのだ。", "任意"],
      ["財産の消滅", "築き上げていた全てが失われた日。あなたにとって全てだった財貨も、権力も、消滅したあの日を、どうして忘れられようか。", "35+3D6"],
      ["告白未遂", "告白しようとしていたその日、コロッサルが現れた。崩れる日常。あの人が生きているのか、どうなったのか、何もわからない。", "18+2D6"],
      ["記憶喪失", "あの時、何があったのか、どうしても思い出せない。何か重大なことがあったはずなのに……思い出そうとすると頭痛が襲うのだ。", "任意(最低14)"],
      ["誕生の時", "BIG-6と同年、コロッサル襲撃の最中に生まれ、赤ん坊の状態で生存者らに保護された。親はわからない。あなたの生存は奇跡である。", "10"],
      ["ルーツ", "コロッサルによって破壊された瓦礫の合間に残されていた子……それがあなただ。親という概念すらなく、あなたは育ってきた。", "8+1D6"],
      ["伝え聞くのみ", "物心ついた時には周囲はコロッサルの脅威にさらされていた。BIG-6以前については何も知らない。遥か過去のようにすら思えている。", "8+1D6"],
      ["語られざること", "ZOSで育ったあなたには誰もBIG-6について教えてくれなかった。大人の会話の合間から、なんとなく想像するだけだ。", "8+1D6"],
      ["絵物語", "瓦礫でない建物。人が街にあふれかえる。なんという子供だましのおとぎ話だろう。あなたはBIG-6以前の存在を信じていない。", "8+1D6"],
      ["何それ", "隊商に見つけられるまで、獣同然に生きていた。BIG-6などあったことも知らない。物心ついた時には、餌を求め走っていたのだ。", "9+1D6"],
      ["嫉妬", "BIG-6時をあなたは覚えていない。そして、BIG-6以前の豊かさと平和に激しい嫉妬を抱き、守れなかった大人たちを恨む。", "9+1D6"],
      ["忘れたい記憶", "あなたはあの日を忘れようと努めた。今ではほとんど忘れたと言っていい。けれど、ふとした時にあの地獄の光景は現れて……。", "任意(最低14)"],
      ["始まりの時", "あなたにとってあれは終わりではなく、始まり。停滞して行き詰まった世界が動き出し、どうでもよかった己の命を感じさせてくれた瞬間。", "15+3D6"],
      ["かすかな記憶", "当時のあなたは幼かった。それでもうっすらと、あの平和で豊かだった時代を覚えている。いっそ知らなければ……と思うのだけれど。", "10+1D6"],
      ["崩壊と再生", "あなたの人生は、BIG-6による社会崩壊と……その後の再生をなぞるものだ。あなたはBIG-6以後を何より間近で見て来た。", "10+1D6"],
      ["他人事", "とても辺鄙な地方にいたせいか、コロッサルは出現しなかった。無論、影響はあったが……ゆっくりとしたもので。大災害の印象は薄い。", "6+3D6"],
      ["新たな時代", "まだマテリアルの価値が定かでなかった頃から、あなたはその価値に目を付けていた。応用法も含め……社会崩壊後に備えたのだ。", "任意(最低17)"],
      ["動乱", "当時は現役かつ、責任ある立場だった。守るために、あなたは全力で戦い、逃げ……そして時には同じ人間からも奪った。", "40+4D6"],
      ["自信の元", "あなたは一家の長として家族を守り、導いた。全てが破壊される中、家族は確かに生き延びて、あなた自身も未だ生き残れたのだ。", "35+3D6"],
      ["本能的記憶", "気が付けばゾーンに“いた”。コロッサルはさまざまな生物をクラフトする。中には小型のコロッサルとして独立して活動を開始するものもいるという。あなたもまた、気づいてほどなくハンターとして目覚めた。そう……あなたはクラフトされた存在。人よりもコロッサルに近い存在。記憶も感情も、どこまでが己のものなのか……。これは、およそ知られていい秘密ではない。(注意:外見年齢は任意)", "2D6-2"],
      ["体験無き事象", "あなたは母から生まれた人間ではなく、人工的なハンター作成の副産物たるクローニング技術の結晶だ。親は知らないが“作者”は知っている。肌にはバーコードが刻まれ、その体が通常の人間ではないと思い知らされるだろう。丁寧に記憶まで、一定量が流し込まれており、日常生活には支障がない。この出生は隠さねばならない。(注意:外見年齢は任意。覚醒表の内容は作られた記憶である)", "2D6-2"],
      ["特異点", "あのBIG-6の中では奇妙な時空のねじれが発生した。そして、あなたのようにありえざる時代や世界から、迷い込む者も現れたのだ。この事実は隠さねばならない……が、教えても誰も本気にはしないだろう。なお、あなたがどれほど特殊な能力や知識を持っていたとしても、データ上において他のPCと何ら変わらない。演出において、他の時代や異世界の知識や技術をいくらか使える程度である。", "任意(最低10)"],
      ["覚醒の時", "BIG-6時に絶望の中でコロッサルに抗い、生まれた第一世代のハンター。平和の時代を知る存在。そして平和を壊され、平和を取り戻さんと渇望する存在だ。ハンターの中でも、最初期であり最も経験豊富であり、同じハンターらからは敬意を捧げられる。もちろん、相応の振る舞いも求められるだろうが……。(注意:覚醒表における「ZOS」は、「故郷」か「組織」に変わる)", "任意(最低17)"],
    ]
  return table
end
getCheckRollDiceCommandResult(command) click to toggle source
# File lib/bcdice/game_system/ColossalHunter.rb, line 49
def getCheckRollDiceCommandResult(command)
  debug("getCheckRollDiceCommandResult command", command)

  parser = Command::Parser.new(/\d*CH/, round_type: round_type)
                          .restrict_cmp_op_to(nil, :>=)

  parsed = parser.parse(command)
  unless parsed
    return nil
  end

  parsed.command = "3CH" unless parsed.command.start_with?(/\d/)

  dice_count = parsed.command.to_i
  modify = parsed.modify_number

  # ダイスロール
  dice_list = @randomizer.roll_barabara(dice_count, 6)
  dice = dice_list.sum()
  dice_str = dice_list.join(",")

  total = dice + modify

  # 出力文の生成
  text = "(#{parsed}) > #{dice}[#{dice_str}]#{Format.modifier(modify)} > #{total}"

  result = get_judge_result(dice, total, parsed)

  result.text = text + result.text
  return result
end
getCreateNpcDiceCommandResult(command) click to toggle source
# File lib/bcdice/game_system/ColossalHunter.rb, line 197
def getCreateNpcDiceCommandResult(command)
  return nil unless command =~ /^CNP$/

  name = "NPC作成表"
  table = [
    ['ハンター嫌いの', 'ごろつき', '全てへの絶望'],
    ['心に傷を負った', '罪人', 'あなたへの殺意'],
    ['精神不安定な', '浮浪者', 'ハンターへの殺意'],
    ['病に伏した', '盗人', '己自身への殺意'],
    ['重傷を負った', '終末論者', 'ハンターへの憎悪'],
    ['悪名高い', '旅人', 'コロッサルへの崇拝'],
    ['横暴な', '難民', '人間への嫌悪'],
    ['あなたに依存している', '子供', 'あなたへの恐怖'],
    ['無謀な', '老人', '左隣PCへの殺意'],
    ['乱暴な', '少年', '窃盗への依存'],
    ['信用できない', '少女', '快楽への依存'],
    ['臆病な', '若者', '愛情への依存'],
    ['だらしない', '芸人', '未来への絶望'],
    ['短絡的な', '娼婦/男娼', '弱者への蔑視'],
    ['怠け者の', '元軍人', '己自身への嫌悪'],
    ['享楽的な', 'ハンター志願者', 'あなたへの疑念'],
    ['エキセントリックな', '元ハンター', 'ギャンブルへの依存'],
    ['ずる賢い', '労働者', 'アルコールへの依存'],
    ['恋人のいる', 'スカベンジャー', '孤独への恐怖'],
    ['残念な', '仕立て屋', 'ハンターへの恐怖'],
    ['空回りしている', '職人', 'コロッサルへの憎悪'],
    ['酒びたりの', '教師', 'ハンターへの不安'],
    ['妄想癖のある', '建築家', 'ハンターへの嫉妬'],
    ['努力家の', '商人', 'コロッサルへの恐怖'],
    ['やさしい', '料理人', '己の命への執着'],
    ['神秘的な', '漁師/猟師', 'あなたへの打算'],
    ['世馴れた', '農家', '過去への執着'],
    ['信用できる', '自警団員', 'マテリアルへの執着'],
    ['達観した', '看護師', 'ハンターへの憧憬'],
    ['血気盛んな', '研究者', 'あなたへの嫉妬'],
    ['美貌の', '技師', '異性への執着'],
    ['気高い', '医師', '力への渇望'],
    ['優秀な', '神父/シスター', 'ZOSへの依存'],
    ['天才肌の', '事務屋', '左隣PCへの執着'],
    ['誰からも愛される', '指導者', 'あなたへの羨望'],
    ['あなたに恋をしている', 'ハンター', 'あなたへの執着'],
  ]

  nature, nature_number = getD66Item(table, 0)
  type, type_number = getD66Item(table, 1)
  secret, secret_number = getD66Item(table, 2)

  result = "#{name}(#{nature_number}, #{type_number}, #{secret_number}) > 性質:#{nature}/タイプ:#{type}/心の秘密:#{secret}"
  return result
end
getD66Item(table, index) click to toggle source
# File lib/bcdice/game_system/ColossalHunter.rb, line 248
def getD66Item(table, index)
  item, number = get_table_by_d66(table)
  return item[index], number
end
getD6xResult(count, dice6Count) click to toggle source
# File lib/bcdice/game_system/ColossalHunter.rb, line 136
def getD6xResult(count, dice6Count)
  total = 0

  count.times do |_i|
    number = 0

    dice6Count.times do |_i|
      number *= 10
      dice = @randomizer.roll_once(6)
      number += dice
    end

    total += number
  end

  return total.to_s
end
getSourceSceneDiceCommandResult(command) click to toggle source
# File lib/bcdice/game_system/ColossalHunter.rb, line 96
def getSourceSceneDiceCommandResult(command)
  return nil unless command =~ /^B6T$/

  name = "BIG-6表"
  table = getBig6Table
  yearTitle = "年齢"

  return getYearTableResult(name, table, yearTitle)
end
getTableDiceCommandResult(command) click to toggle source
# File lib/bcdice/game_system/ColossalHunter.rb, line 253
def getTableDiceCommandResult(command)
  info = TABLES[command]
  return nil if info.nil?

  name = info[:name]
  type = info[:type]
  table = info[:table]

  text, number =
    case type
    when '2D6'
      get_table_by_2d6(table)
    when '1D6'
      get_table_by_1d6(table)
    when 'D66'
      get_table_by_d66(table)
    end

  return nil if text.nil?

  return "#{name}(#{number}) > #{text}"
end
getYear(yearText) click to toggle source
# File lib/bcdice/game_system/ColossalHunter.rb, line 121
def getYear(yearText)
  text = yearText.gsub(/(\d+)D(6+)/) { getD6xResult(Regexp.last_match(1).to_i, Regexp.last_match(2).length) }

  unless text.match?(%r{^[+\-*/\d]+$})
    return nil
  end

  if text.match?(/^\d+$/)
    return nil
  end

  year = ArithmeticEvaluator.eval(text)
  return year, "(#{text})"
end
getYearTableResult(name, table, yearTitle) click to toggle source
# File lib/bcdice/game_system/ColossalHunter.rb, line 106
def getYearTableResult(name, table, yearTitle)
  item, index = get_table_by_d66(table)
  return nil if item.nil?

  title, text, yearText, = item
  debug('yearText', yearText)
  year, calculateText = getYear(yearText)

  result = "#{name}(#{index}) > #{title}:#{text} > #{yearTitle}:#{yearText}"
  result += " > #{calculateText} > #{yearTitle}:#{year}" unless year.nil?
  result += "歳"

  return result
end
get_judge_result(dice, total, parsed) click to toggle source

成否判定

# File lib/bcdice/game_system/ColossalHunter.rb, line 82
def get_judge_result(dice, total, parsed)
  if dice <= 5
    Result.fumble(" > ファンブル")
  elsif total >= 16
    Result.critical(" > クリティカル")
  elsif parsed.cmp_op.nil?
    Result.new("")
  elsif total >= parsed.target_number
    Result.success(" > 成功")
  else
    Result.failure(" > 失敗")
  end
end