# frozen_string_literal: true

module BCDice
  module GameSystem
    class KurayamiCrying < Base
      # ゲームシステムの識別子
      ID = 'KurayamiCrying'

      # ゲームシステム名
      NAME = 'クラヤミクライン'

      # ゲームシステム名の読みがな
      SORT_KEY = 'くらやみくらいん'

      # ダイスボットの使い方
      HELP_MESSAGE = <<~TEXT
        ・アクシデント表（ACT）
        ・感情表（EMO）
        ・幕間シーン表（情景）（SST）
        ・幕間シーン表（関係）（SRT）
        ■ ヨイヤミメビウス
        ・大事故イベント表1　日常と正気の破壊（SAE1）
        ・大事故イベント表2　アメリカンB級ホラー（SAE2）
        ・大事故イベント表3　牙をむく異世界（SAE3）
        ・大事故イベント表4　悪意のおとぎ話（SAE4）
        ・大事故イベント表5　悲劇の運命（SAE5）
      TEXT

      def eval_game_system_specific_command(command)
        if (m = /^ACT(\d+)$/i.match(command))
          number = m[1].to_i
          return TABLES["ACT"].choice(number).to_s
        else
          roll_tables(command, TABLES)
        end
      end

      TABLES = {
        "ACT" => DiceTable::Table.new(
          "アクシデント表",
          "1D10",
          [
            "頭の中が黒く染まってゆく、怖い、苦しい。気持ち悪い！でも…なんだか少しだけ、すがすがしい。あなたは「発狂」する。すでに「発狂」している場合、「理性」を2点失う。",
            "待って、今のはナシ！調子が愚かったっていうか、ちょっと違うことしちゃったからさ…もう1回やらせてよ、ね？失敗した「判定」を再度やり直す。ただし、前回と同じ「能力値」を使うことはできす、進行役と「交渉」を行った扱いとなる（代替判定により「浸食」が2点増加する）。",
            "こっちは必死にやってるってのに、まったく、アイツめ……！ あなたが「ツナガリ」を結んでいる主人公を任意に1人選び、「感情」を変更する。この際、必す「負の惑情」を選ばなければならない。「ツナガリ」を結んでいる主人公がいない場合、ダイスを振り直し、再度「アクシデント表」に当てはめる。",
            "不意を突かれたあなたは、とっさに化物を攻撃する！……確かに化物に見えたのだ。しかし、あなたが手にかけたのは見知った顔だった。あなたが正の「ツナガリ」を結んでいる主人公をランダムに1人選び、2点のダメージを与える。正の「ツナガリ」を結んでいる主人公がいない場合、ダイスを振り直し、再度「アクシデント表」に当てはめる。",
            "さっきからずっと、不気味な視線を感じる……どうやら、良くない存在に目をつけられてしまったようだ。「怪異」があなたに一方的な「ツナガリ」を獲得する。すでに「怪異」から「ツナガリ」を獲得されている場合、ダイスを振り直し、再度「アクシデント表」に当てはめる。",
            "ぶつんと頭の中で音がする。あれっ？誰かのことを考えていたような……なんだか記憶が霞んで、思い出せない。あなたが獲得している「ツナガリ」をランダムに1つ失う（「継続的なツナガリ」である場合、セッション終了後に再度獲得する）。「ツナガリ」が1つもない場合、ダイスを振り直し、再度「アクシデント表」に当てはめる。",
            "ぞわりと背中に懇寒が走る。自分を取り巻く「流れ」──運命に似た何かが歪んでしまったような、おぞましい予感が胸を走る。「確保」しているダイスの目が「10」になる。ダイスを「確保」していない場合、新たに「10」を「確保」する。すでに「10」の目を「確保」している場合、ダイスを振り直し、再度「アクシデント表」に当てはめる。",
            "違う……違う、違う。これは自分のせいじゃない。いや、きっと何かの間違いだ。そう、あいつのせいに決まってる！進行役があなた以外の主人公をランダムに1人選ぶ（誰を選んだか参加者に教えてはならない） 。選ばれた主人公が次に判定を行った際、進行役は、最も低い数字を示しているダイスの目を「10」に変更する。",
            "あぁ……見つからない。アレがないとダメなのに。一体どうしたら──！「アイテム」をランダムに1つ失う（「継続品」である場合、センョン終了後に再度獲得する）。「アイテム」を1つも所持していない場合、「アイテム」を所持する主人公をランダムに1人選び、2点のダメージを与え、「アイテム」を1つ奪い取る。主人公が誰も「アイテム」を所持していない場合、「理性」を2点失う。",
            "まるで自分を支える何かが失われたように、あなたはその場に立ち尽くす。諦めと絶望が心を支配する。ああ、そうか。これが、「心が折れる」ということか……。あなたは「理性」を4点失う。"
          ]
        ),
        "EMO" => DiceTable::Table.new(
          "感情表",
          "1D10",
          [
            "(正)信頼／(負)依存",
            "(正)安心／(負)不安",
            "(正)友情／(負)憤怒",
            "(正)尊敬／(負)恐怖",
            "(正)愛情／(負)嫉妬",
            "(正)共感／(負)否定",
            "(正)忠誠／(負)侮蔑",
            "(正)憧憬／(負)劣等感",
            "(正)性愛／(負)拒絶",
            "(正)狂信／(負)殺意",
          ]
        ),
        "SST" => DiceTable::Table.new(
          "幕間シーン表（情景）",
          "1D10",
          [
            "先が見えない闇の中を、あなたは手探りに進んでいる。暗がりに入り込んでしまったのか、それとも辺りの光が消えたのか———その時、あなたの眼前に、闇から溶け出すように何者かの姿が現れた。",
            "夢を見ていた。かつてあった出来事が、目の前で繰り返される……ハッと気が付き、現実に戻る。心配そうにあなたを覗き込む顔を見て、再び夢の光景がフラッシュバックする。この人、あの時の……！",
            "気が付くと見知らぬ場所を１人歩いている。迷ってしまったのだろうか。辺りを見回していた、その時———あなたは背後に気配を感じた。いつの間にか誰か立っている……！",
            "「危ない！」突然上がった声と同時に、あなたは突き飛ばされ、床を転がった。次の瞬間、不気味で巨大な何かがあなたの頭をかすめてゆく……。あなたは身を起こし、あなたと一緒に倒れ込んだ人物に声をかけた。",
            "不気味な声を上げながら、何かがゆっくりと近づいてくる。あなたが咄嗟に身を隠した場所には、すでに誰かいた。このまま息を殺し、一緒に危険が過ぎ去るのを待つしかない。",
            "むせかえるような臭いが辺りに満ちている。これは血の臭いだろうか。いや、それにしては……。すると、あなたの近くで、誰かが小さく咳き込んだ……",
            "一息つけそうな場所を見つけ、あなたは座りこんだ。不気味なことに巻き込まれているとは思えない、穏やかな時間が流れる。ふと、あなたは隣りに座っている人物に話しかけた。",
            "静寂の中、あなたを呼ぶ声が響く。声の主に対し、あなたは思う。望むところだ。自分の方こそ、確認しなければならないことがある———！あなたは足早に、声のする方へと進んだ。",
            "高い場所に立ち、あなたは異常な世界を見下ろしている。その時、後ろで誰かが地面を踏む音がした。来たか……予想通り、ここでなら会うことができた。あなたは振り返り、相手を見た。",
            "周囲を確認し、あなたは相手に合図を送る。足音静かに、相手があなたの元へと駆け寄る。———他の気配はない。慎重に、密やかに、あなたは相手と話し始めた。",
          ]
        ),
        "SRT" => DiceTable::Table.new(
          "幕間シーン表（関係）",
          "1D10",
          [
            "微かな香り。ちょっとした仕事。横顔。あの人のすべてが、あなたの胸を高鳴らせる———こんな気持ちは、初めてだ。",
            "頭の中にノイズが走る。あなたは、たしかに、あの人とあったことがある。けれど、詳しく思い出そうとするたびに頭痛が走る……この記憶、確かめなければ。",
            "異常な事態だというのに……いや、異常な事態だからこそ、あの人はあなたに安心感を与えてくれる、とにかく話がしたい。今はまず、あの人を探そう。",
            "今あなたに必要なのは「捨て駒」だ。そう、ピッタリの奴がいるじゃないか！誰を犠牲にしても生き残ってやる。そのためには……。あなたは、あの人の方へと歩み寄った。",
            "こんな時でも、どこか気の合う相手というのは見つかるものだ———安堵するような、弾むような気持ちで、あなたはその人に声をかけた。さぁ、共闘といこうじゃないか。",
            "なんでよりによってこんなヤツと……！？図らずも二人きりになってしまった相手に、あなたは眉をひそめた。会話はない。そもそもこいつが安全かわからない……誰か助けて！",
            "特に理由はない。けれど、一緒に行動すること自体は大事でしょう？仕方ないじゃないか、怖いんだから……！あなたは、いそいそと手近な人間へと寄って行った。",
            "不意に昔のこと———二度と取り戻せない過ちが頭をよぎる。そんなことを思い出したのも、あの人の面影を、あの顔に感じてしまうせいだ。別人とはわかっている。けれど、今度こそ———。",
            "あなたは影に隠れ、その人物を見張っている。怪しい……この人こそが、事件の元凶じゃないか？とはいえ、このままではじり貧だ。あなたは意を決し、影から飛び出して話をかけた。",
            "間違いない……！あなたはその人物をにらみつけた。何という幸運だろう。追い求めた相手が、すぐそこにいるなんて！あなたは荒れ狂う胸の内を気取られぬよう、ゆっくりと近づいた。",
          ]
        ),
        "SAE1" => DiceTable::Table.new(
          "大事故イベント表1　日常と正気の破壊",
          "1D10",
          [
            "非日常に慣れてしまう自分が恐ろしい。心が恐怖を感じなくなってきたみたいだ……。セッション終了まで【精神】が２点減少する。",
            "最悪の展開を予測する。死よりも恐ろしいことになるのは明白だ。あなたは理性を２点失う。",
            "被害者の成れの果てを目撃し、絶望する。いやだ、こんな風になりたくない……！あなたは次に判定をする際、目標値が２点増加する。",
            "日常の記憶が恐怖に支配されてゆく。友人も、家族も、家も街も、きっと呑み込まれてしまうんだ……。セッション終了まで「継続的なツナガリ」を１つ失う。「継続的なツナガリ」がない場合は理性を２点失う。",
            "異世界の謎を解き明かす手掛かりを見つける。読み解くのはあまりに難解だが……人であることをやめれば、あるいは。理性を２点失い『真相』を１枚確認する。『真相』がない、あるいは確認できない状況である場合はダイスを振りなおす。",
            "体の色が変わり、力が入らなくなってゆく……元に戻れないのでは、と思いゾッとする。セッション終了まで【肉体】が２点減少する。",
            "異世界に染まる──なぜ、これほど簡単な逃げ道に気付かなかったのだろう。あなたは即座に発狂する。既に発狂していた場合は理性を２点失う。",
            "この世界の背後にある物語、あるいは、破滅者に同情してしまう。戦わねばならない時、こぶしをふるうことはできるだろうか……。戦闘時、あなたの最初のラウンドでの行動のみ進行役が決定する。",
            "侵蝕は思った以上に深刻だ。自分とは、何だったか。自分は本当に自分なのか……。セッション終了まで【頭脳】が２点減少する。",
            "勘違いしていた。あいつも、こいつも、みんな敵だ。自分を陥れようとしているんだ……！セッション終了まで「援護」をすることができなくなる(この状態は「失調」として扱う)。",
          ]
        ),
        "SAE2" => DiceTable::Table.new(
          "大事故イベント表2　アメリカンB級ホラー",
          "1D10",
          [
            "諦めかけたその時、過去に戦ったあいつらが俺の拳に乗り移る。お前ら……力を貸してくれ！以降、一度だけ自分の攻撃に〔ダイス２つ分〕点の追加ダメージを得る。「過去に戦ったあいつら」は好きに捏造してよい。",
            "運命の人に出会う。こんなところでなければ、もっと幸せだったのに。あなたはツナガリを獲得する。対象は他の主人公や登場人物でも、今回のセッションに登場していないキャラクターでも構わない。また、破滅判定において目標値が２点減少する。",
            "死んだと思っていたあいつが生きて帰ってきた。これは奇跡だ！あなたはツナガリを獲得する。対象はセッションに登場していないキャラクターにする。また、あなたは戦闘中、常に２点の追加ダメージを得る。",
            "唐突に銃撃戦が始まった!!!Wow!!あなたに流れ弾が直撃し、４点のダメージを受ける。ただし、それっぽいアメリカンな演技で無事を主張できれば、このダメージをなかったことにできる。",
            "何故かはわからないが、あなたが行動するたびに、どこからかアメリカンなリアクションが聞こえてくる。どうにも、集中力がそがれる……セッション終了まで、全ての判定の目標値が１点増加する(破滅判定を除く)。この効果は重複する。",
            "唐突に、ポップな曲が辺り一帯に流れる。これは一体？主人公は全員、次に判定を行う際、アメリカンな行動をとった場合に目標値が１点増加する(破滅判定の場合は１点減少する)。アメリカンかどうかの判断は進行役に委ねられる。なお、曲に乗って踊りながら行動する演出にした場合は、判定の目標値がさらに１点増加する。",
            "些細なことが気になり、他の主人公に対し声を荒げてしまう。そんなことをしてもどうにもならないと、わかっているのに……。あなたがツナガリを獲得している主人公を一人選び、相手とのツナガリを失う。ただし、ハグして仲直りする演出を行うなら、ツナガリを消さなくともよい。",
            "要するに全部やっつけちまえばいい、そういう事だろ？脳内で声がする。そうだ、銃は全てを解決する！ダイスを１つ振り、出た目の数だけ「武器」を獲得する。ただし同じ数だけ、破滅判定の際の目標値が増加する。",
            "気が付くと、顔や体格が変化している！㈰イケメン ㈪ブロンド ㈫タフガイ ㈬ブレインのどれかを選択する。㈰は全ての能力値が１点増加する。㈪は【精神】、㈫は【肉体】、㈬は【頭脳】が２点増加する。ただし㈰〜㈬は全て、破滅判定の目標値が２点増加する。",
            "最後の一言を言い残し、あなたのキャラクターは絶命する。全米が号泣する感動のシーンだ。あなたは進行役が許可する範囲で、あなたの主人公の最期を自由に演出する。ただし、主人公は異世界の影響ですぐに復活する。侵蝕を〔ダイス２つ分〕点増加させる(最大１０点)。",
          ]
        ),
        "SAE3" => DiceTable::Table.new(
          "大事故イベント表3　牙をむく異世界",
          "1D10",
          [
            "異世界からの侵蝕の影響か、あなたの姿が乳児になり、全ての「能力値」を「失調」する(いずれかの「能力値」が「復調」した場合、姿は元に戻る)。",
            "こんなところにいられるか！こいつらといたら命がいくつあっても足りない！あなたは、一人になろうとする。次の「選択」の結果、あなたが一人になることができなかった場合、あなたの理性は半分になる。(端数切り上げ)",
            "何かはわからないが、あなたはこの異世界の住人の逆鱗に触れてしまったようだ。あなたに対して、誰かが「負の感情」で「ツナガリ」を結ぶ(誰が結ぶかは進行役が決定すること)。",
            "運に見放された？主人公全員の「確保」しているダイスを捨て、新たに全員が「１０」の目のダイスを「確保」する。",
            "セッション終了まで、あなたが外来語を口にするたびに、あなたの主人公の「侵蝕」が１点増加する。",
            "あなたには、周囲の人間全てがおぞましい怪物に見える。以降セッション終了まで、他の主人公が同じ場面にいる場合、判定に使用するダイスが一個減少する。",
            "あなたの外見がおぞましい怪物へと変化する。こんな姿では、人とかかわることができない！他の主人公があなたに結んでいる「ツナガリ」がすべて失われる(「継続的なツナガリ」を除く)。",
            "主人公全員の外見が、いずれかの主人公と同じになる。次の「選択」が行われるまで(戦闘中であればそのラウンドが終了するまで)全ての能力値がその主人公の数値と同じになる。進行役は、どの主人公の姿に変化するか決定すること。",
            "主人公たちは、お互いの姿を見ることができなくなる。次の「選択」が行われるまで(戦闘中であればそのラウンドが終了するまで)主人公は全員、自分以外の主人公にアイテムを使用することができなくなる。",
            "あなたの姿が老人になる。全ての能力値が４点減少し、また全ての「ツナガリ」を忘れてしまう(「ツナガリ」は消えないが「援護」や感情の変更を行うことができなくなる)。この状態は「失調」として扱い「薬」や「治療」の効果により元に戻る。また新たな「ツナガリ」を獲得した場合も姿は元に戻る。",
          ]
        ),
        "SAE4" => DiceTable::Table.new(
          "大事故イベント表4　悪意のおとぎ話",
          "1D10",
          [
            "何か尖ったものに触れてしまった。途端に、あなたは強烈な眠気に襲われた……。あなたが次に幕間作成を行う場合「休憩」(『トコヤミメイズ』P74)しか選ぶことができない。",
            "誰かが倒れ、息絶えている……いや、あれは自分だ。自分自身の、未来の姿なのか……？あなたが平静状態であれば発狂する。すでに発狂していれば侵蝕が４点増加する。",
            "突然の爆音。あなたの脇を、スポーツカーがドリフトしながら駆け抜けてゆく。なにあれかっこいい！「穢れ：最後の執着」(『クラヤミクライン』P180)の効果をあなたに適用する。",
            "別の異世界から来たという情報屋に出会う。情報屋は、今回の怪異のレベルを教え、どこかへと去る。侵蝕が４点増加する。",
            "狐の嫁入り行列が目の前を遮る。狐は主人公たちに、毛皮をモフモフさせてくれる。幸せだ！……が、気が付くと、ふところが軽くなっている。主人公は全員、アイテムをランダムに一つ失う。",
            "怪異(または破滅者)がシレッと横にいる。あなたの見たもの聞いたもの触れたものに興味があるようだ。今回登場する怪異(または破滅者)の存在点が〔ダイス１つ分〕増加する。",
            "ボロボロの日記帳が、開かれた状態で落ちている。すると、日記帳に「ヤブッタページヲカエシテ！」と文字が浮かび上がった。あなたはアイテム「運命の日記」(『トコヤミメイズ』P73)を入手する。代わりに、破滅判定時、自分に向けられている「負の感情」一つにつき侵蝕が４点増加する。",
            "エイリアンにアブダクションされる。あなたは突然、このシーンから消え去る。以降、幕間で「メイン」として指定されるか「終章」に入るまでゲームに登場することができない。なお、再登場した際は呆けた表情で戻ってくる。",
            "悪魔と契約をしてしまった。以降、あなたは判定で出した「１０」のダイス目をいくつでも「確保」できる。ただし「確保」した「１０」のダイス目は「１」との相殺以外で消すことができない。",
            "あなたは足元に現れた泉に落ちる。泉からはい上がると、あなたの頭の中に３人のあなたがいる。頭の中がうるさくて落ち着かない！以後、判定の際にダイスを一つ追加し、最も低い出目の一つはなかったことにする。",
          ]
        ),
        "SAE5" => DiceTable::Table.new(
          "大事故イベント表5　悲劇の運命",
          "1D10",
          [
            "シナリオに直接関係ないが、あなたの家が燃える。",
            "シナリオに直接関係ないが、あなたの口座残高が０になる。クレジットカードも使用不可能になる。",
            "シナリオに直接関係ないが、会社から解雇される。自身が会社員ではない場合は経営している店や実家が倒産したり、持っている株が暴落したりする。",
            "シナリオに直接関係ないが、あなたの親の訃報、もしくは大切な何かが喪失した連絡を受ける。本当かどうかは、現実に生還するまでわからない。",
            "シナリオに直接関係ないが、あなたは突然〔ダイス２つ分〕歳を取る(能力値に変動は発生しない)。",
            "シナリオに直接関係ないが、あなたが原因で大事故、もしくは大災害が発生する。損害賠償で数億〜数十億程度の借金を負う。",
            "シナリオに直接関係ないが、病魔により余命幾ばくも無いことを悟ってしまう。",
            "シナリオに直接関係ないが、あなたはSNSで大炎上する。マスコミにも実名報道され、今後大変な生活を送ることになる。",
            "シナリオに直接関係ないが、この場で突然子供が誕生する。主人公役は名前や性別を決めること。なお、何らかの原因により子供が命を落とした場合、理性を１０点失う。",
            "進行役は主人公役に何か一つ質問をする。その質問に対し可能な限り正直に答えなければならない(公序良俗に反する質問やハラスメントにあたる質問であった場合を除く)。",
          ]
        ),
      }.freeze

      register_prefix(TABLES.keys)
    end
  end
end
