# frozen_string_literal: true

require "bcdice/dice_table/chain_table"
require "bcdice/dice_table/sai_fic_skill_table"
require "bcdice/dice_table/table"
require "bcdice/format"

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

      # ゲームシステム名
      NAME = "スタリィドール"

      # ゲームシステム名の読みがな
      SORT_KEY = "すたりいとおる"

      # ダイスボットの使い方
      HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
        ・行為判定 nD6±m@s>=t
        　nD6の行為判定を行う。スペシャル／ファンブル／成功／失敗を判定。
        　　n: ダイス数
        　　m: 修正（省略可）
        　　s: スペシャル値（省略時 12）
        　　t: 目標値（?指定可）
        ・各種表
        　・ランダム特技決定表 RTTn (n：分野番号、省略可能)
        　　　1願望 2元素 3星使い 4動作 5召喚 6人間性
        　・ランダム分野表 RCT
        　・ランダム星座表 HOR
        　　　ランダム星座表A HORA／ランダム星座表B HORB
        　・主人関係表 MRT／関係属性表 RAT
        　・従者関係表 SRT
        　・奇跡表 MIR
        　・戦果表 BRT
        　・事件表 TRO
        　・森事件表 TROF
        　・庭園事件表 TROG
        　・城内事件表 TROC
        　・都市事件表 TROT
        　・図書館事件表 TROL
        　・駅事件表 TROS
        　・従者トラブル表 TRS
        　・リアクション表　忠誠 RAL
        　・リアクション表　冷静 RAC
        　・リアクション表　母性 RAM
        　・リアクション表　年長者 RAO
        　・リアクション表　無邪気 RAI
        　・リアクション表　長老 RAE
        　・遭遇表 ENC
        　・致命傷表 FWT
        　・カタストロフ表 CAT
        　・回想表
        　　　〈魔術師の庭〉回想表 JDSRT／〈セブンス・ヘブン〉回想表 SHRT
        　　　／〈祝福の鐘〉回想表 BCRT／〈オメガ探偵社〉回想表 ODRT
        　・出張表
        　　　〈魔術師の庭〉出張表 JDSBT／〈セブンス・ヘブン〉出張表 SHBT
        　　　／〈祝福の鐘〉出張表 BCBT／〈オメガ探偵社〉出張表 ODBT
        　　　／〈天の川商店街〉出張表 ASBT／〈ポラリス星学院〉出張表 PABT
        　　　／〈人形騎士団〉出張表 SCBT／〈人形騎士団〉への出張表 TOSCBT
        ・D66ダイスあり
      INFO_MESSAGE_TEXT

      def initialize(command)
        super(command)

        @d66_sort_type = D66SortType::ASC
      end

      def eval_game_system_specific_command(command)
        action_roll(command) ||
          roll_tables(command, TABLES) ||
          RTT.roll_command(@randomizer, command)
      end

      private

      SPECIAL = "スペシャル(【星命力】を1D6点回復)"
      FUMBLE = "ファンブル(ランダムなサインが【蝕】状態へ変化)"

      RTT = DiceTable::SaiFicSkillTable.new(
        [
          ["願望", ["創造", "研究", "守護", "絆", "*かに座", "夢", "*しし座", "自由", "恋愛", "脚光", "世界"]],
          ["元素", ["光", "雷", "*ふたご座", "水", "火", "風", "木", "氷", "*おとめ座", "土", "闇"]],
          ["星使い", ["*おうし座", "幸運", "幻影", "テレパシー", "予知夢", "星読み", "治癒", "天候", "変身", "時間停止", "*てんびん座"]],
          ["動作", ["*おひつじ座", "精密", "高速", "怪力", "隠密", "飛行", "言霊", "模倣", "軽業", "歌舞", "*さそり座"]],
          ["召喚", ["リボン", "照明具", "*うお座", "料理", "獣", "花", "乗り物", "書物", "*いて座", "武器", "財宝"]],
          ["人間性", ["勇気", "知恵", "熱意", "調和", "*みずがめ座", "愛情", "*やぎ座", "センス", "根気", "礼節", "理性"]],
        ]
      )

      def action_roll(command)
        parser = Command::Parser.new("D6", round_type: round_type)
                                .has_prefix_number
                                .restrict_cmp_op_to(:>=)
                                .enable_critical
                                .enable_question_target
        cmd = parser.parse(command)
        return nil unless cmd

        times = cmd.prefix_number
        return nil if times < 1

        fumble = 2
        special = cmd.critical || 12

        if special <= fumble
          special = fumble + 1 # p.180
          cmd.critical = special
        end

        dice_list = @randomizer.roll_barabara(times, 6)
        dice_total = dice_list.sum()
        total = dice_total + cmd.modify_number

        result =
          if dice_total <= fumble
            Result.fumble(FUMBLE)
          elsif dice_total >= special
            Result.critical(SPECIAL)
          elsif cmd.question_target?
            Result.new
          elsif total >= cmd.target_number
            Result.success("成功")
          else
            Result.failure("失敗")
          end

        sequence = [
          "(#{cmd.to_s(:after_modify_number)})",
          "#{dice_total}[#{dice_list.join(',')}]#{Format.modifier(cmd.modify_number)}",
          total,
          result.text
        ].compact

        result.text = sequence.join(" ＞ ")
        result
      end

      HOR_TABLE_A = DiceTable::Table.new(
        "ランダム星座表A", # p.177
        "1D6",
        [
          "おひつじ座",
          "おうし座",
          "ふたご座",
          "かに座",
          "しし座",
          "おとめ座",
        ]
      )

      HOR_TABLE_B = DiceTable::Table.new(
        "ランダム星座表B", # p.177
        "1D6",
        [
          "てんびん座",
          "さそり座",
          "いて座",
          "やぎ座",
          "みずがめ座",
          "うお座",
        ]
      )

      TABLES = {
        "HORA" => HOR_TABLE_A,
        "HORB" => HOR_TABLE_B,
        "HOR" => DiceTable::ChainTable.new(
          "ランダム星座表", # p.177
          "1D6",
          [
            HOR_TABLE_A,
            HOR_TABLE_A,
            HOR_TABLE_A,
            HOR_TABLE_B,
            HOR_TABLE_B,
            HOR_TABLE_B,
          ]
        ),
        "MRT" => DiceTable::Table.new(
          "主人関係表", # p.186
          "1D6",
          [
            "親",
            "友人",
            "恩師",
            "相棒",
            "上司",
            "恋人",
          ]
        ),
        "RAT" => DiceTable::Table.new(
          "関係属性表", # p.186
          "1D6",
          [
            "尊敬／優越感",
            "理解／反抗",
            "愉快／恐怖",
            "友情／競争",
            "恋心／不気味",
            "庇護／劣等感",
          ]
        ),
        "MIR" => DiceTable::Table.new(
          "奇跡表", # p.177
          "1D6",
          [
            "空から降る一筋の光が星人形の体を包み込み、不思議な力を与えてくれる。",
            "守護星座に関連する人や動物が現れ、星人形に力を貸してくれる。",
            "運命が不自然なまでに星人形の味方をし、すべてが上手く進んでいく。",
            "星人形の必要とするものが空中から次々と現れる。",
            "少しの間だけ〈劇場〉の住人が正気に戻り、一致団結して星人形に協力してくれる。",
            "体中に星命力が溢れ出し、限界を超えた大規模な星術を扱えるようになる。",
          ]
        ),
        "BRT" => DiceTable::Table.new(
          "戦果表", # p.191
          "1D6",
          [
            "所持しているアイテムから一つを選び、同じものをもう一つ獲得する。所持していない場合はもう一度戦果表を使用する。",
            "時計を獲得する。",
            "ロザリオを獲得する。",
            "コンパスを獲得する。",
            "星の欠片を獲得する。",
            "自由なアイテムを一つ獲得する。",
          ]
        ),
        "TRO" => DiceTable::Table.new(
          "事件表", # p.193
          "2D6",
          [
            "〈変晶体〉を手にした途端、人形兵の軍勢に見つかり追われることに……！ なんとかして振り切ろう！",
            "〈変晶体〉を乗せた物体が空を飛んでいる。接触する方法はないだろうか。",
            "不気味な商人が現れた。価値あるものを差し出せば、〈変晶体〉と交換してくれるという。上手く交渉しよう。",
            "〈変晶体〉の影響で理性を失った人々が大喧嘩をしている。これでは浄化するのも困難だ……仲間と協力して仲裁しよう。",
            "〈変晶体〉は建物の中にあるようだが、警備が厳重だ。どうやって侵入しようか……。",
            "罪のない人たちが〈変晶体〉を持つ敵に捕らわれているようだ。仲間と共に人々を助け出し、〈変晶体〉を浄化しよう。",
            "〈変晶体〉に操られた人々がこちらへ敵意の目を向けている。危害は加えたくないが、一体どうすれば……！",
            "〈変晶体〉に取り憑かれた動物が、仲間に襲いかかった！ 早く助け出さなければ！",
            "仲間が敵にさらわれてしまった！ 敵は〈変晶体〉も持っているようだ。追跡して仲間を助けなければ！",
            "入り組んだ場所に迷い込んでしまった。〈変晶体〉の気配は近いはずだが、どこにあるのだろう？",
            "〈変晶体〉は深い水の底に沈んでいるようだ。浄化する方法はないだろうか……。",
          ]
        ),
        "ENC" => DiceTable::Table.new(
          "遭遇表", # p.193
          "1D6",
          [
            "『弁士』コオロギのパルランテ\n指定特技: 《調和／人間性5》\n効果: プラネタリカードルール非採用時、このセッション中【運命力】を1点上昇させる。\nプラネタリカードルール採用時、ベネフィックを1枚獲得する。",
            "『航空士』鳩のコロンボ\n指定特技: 《熱意／人間性4》\n効果: コンパスを1つ獲得する。",
            "『医者』カラスのコルヴォ\n指定特技: 《礼節／人間性11》\n効果: 星の欠片を1つ獲得する。",
            "『御者』むく犬のメドーラ\n指定特技: 《知恵／人間性3》\n効果: 時計を1つ獲得する。",
            "『道化』ピエロのアルレッキーノ\n指定特技: 《センス／人間性9》\n効果: 【関係】の使用チェックをすべてはずす。使用チェックがなければ、アルレッキーノに【関係】を獲得する。",
            "『少女』ヤギのカプレッティーナ\n指定特技: 《愛情／人間性7》\n効果: ロザリオを1つ獲得する。",
          ]
        ),
        "FWT" => DiceTable::Table.new(
          "致命傷表", # p.184
          "1D6",
          [
            "敵の攻撃は星人形の瞳を直撃し、宝石は鮮血のごとく砕け散った。PCは形骸化する。",
            "なんとか致命傷は免れたが、もう戦闘は難しそうだ……。PCは戦闘から脱落する。",
            "最後の力をふり絞り、星人形は持っていたものを仲間へ投げ渡した。PCは所持しているアイテムを誰かに譲渡したのち戦闘から脱落する。",
            "星人形は自分の気持ちを誰かに託しながら、地面に倒れ込んだ。仲間のうち誰か一人がPCに対する【関係】を獲得したのち、PCは戦闘から脱落する。",
            "ただでやられるわけにはいかない……！ 星人形は捨て身の攻撃を放つ。PCはエネミー1体に霧装の【耐久値】と同じダメージを与えたのち、戦闘から脱落する。",
            "こんなところで倒れるわけにはいかない。星人形は【星命力】1点で戦闘に復帰する。再度【星命力】が0になった場合、PCは致命傷表を使用せず戦闘から脱落する。",
          ]
        ),
        "CAT" => DiceTable::Table.new(
          "カタストロフ表", # p.198
          "1D6",
          [
            "〈劇場〉全体が大きく揺れ、空間に裂け目が生じる。現実は塗り替えられ……〈変容区〉と化した。最も恐れていた事態に、星人形たちは呆然と立ち尽くすほかなかった。",
            "激しい地鳴りと共に人形兵たちの増援が押し寄せ、形成が逆転してしまう。星人形たちはやむを得ず〈劇場〉を後にした。",
            "「時間切れです」戦場に〈悪魔派〉がやってきた。星座の加護は遮られ、星人形の体から力が抜けていく。「いずれまた」という声を最後に星人形の意識は途絶え……現実世界で目を覚ました。",
            "突如〈型堕ち〉が苦しみ始め、体に残っていた〈悪夢の霧〉を爆発させた。意識を失った星人形たちが目覚めたのは現実世界だった。……まだ再挑戦する時間はあるはずだ。",
            "〈型堕ち〉は自分を制御できなくなり、〈悪夢の霧〉に呑まれて姿を消してしまった。主を失った〈劇場〉は成長も衰退もしないまま、鏡の中に残り続けることになるだろう。",
            "〈型堕ち〉の体は膨張する〈悪夢の霧〉の圧力に耐えきれず、宝石を内側から破壊してしまった。〈型堕ち〉に残された命はあとわずかだ。星人形は〈型堕ち〉の最期を看取ることになる。",
          ]
        ),
        "JDSRT" => DiceTable::Table.new(
          "〈魔術師の庭〉回想表", # p.187
          "1D6",
          [
            "仕事に必要な道具が不足し、急遽買い出しへ。荷物が重くなりそうだからと、キーNPCも手伝ってくれることになった。",
            "キーNPCはあなたの仕事に感謝し、プレゼントを贈ってくれた。箱の中身はキーNPCのお気に入りの一品らしい。",
            "主人はお客さんと話し込んでいる。あなたが部屋の片隅で退屈そうにしていると、キーNPCと目が合った。",
            "整備作業がひと区切りついたところで、キーNPCがお茶とお菓子を持ってきてくれた。少し休憩しよう。",
            "整備中、星人形の体に傷が見つかった。どこで付けたのだろう？ あなたはキーNPCに聞いてみることにした。",
            "部屋を移動中、あるものが目に留まる。それはキーNPCにとって思い出深いものであるようだ。",
          ]
        ),
        "SHRT" => DiceTable::Table.new(
          "〈セブンス・ヘブン〉回想表", # p.187
          "1D6",
          [
            "掃除をしていたら、お家のものを引っ掛けて壊してしまった！ そこへキーNPCがやってきて……。",
            "キーNPCはちょっとお疲れの様子。あなたはお茶とお菓子を持って労ってあげることにした。",
            "料理の材料を取りたいのに、棚に手が届かない……。あなたはキーNPCに助けを求めた。",
            "キーNPCの仕事をお手伝い。こんな体験は初めてだ！ あなたはワクワクしながら挑戦する。",
            "お客さんの星人形に制服を貸し出して、一緒に写真撮影をすることに。照れてるだろうか？ それともノリノリ？",
            "今日はセブンス・ヘブンのファン感謝イベント。会場には、差し入れを持ったキーNPCの姿もあった。",
          ]
        ),
        "BCRT" => DiceTable::Table.new(
          "〈祝福の鐘〉回想表", # p.187
          "1D6",
          [
            "終演後のエントランスで挨拶をしていると、キーNPCが誰かと話し込んでいる。ちょっと様子を見に行こう。",
            "次の公演に向けて衣装合わせ。どんな役をやる？ 衣装のフィット具合はどう？ 確認していると、キーNPCが様子を見にやってきた。",
            "基礎練習。地道なルーチンワークの間、スパイスとなるのはキーNPCとのおしゃべりだ。",
            "学校での公演。終わったあと、子どもたちに囲まれてもみくちゃになる。キーNPCは、子どもが好きだったっけ？",
            "地方巡業。一緒に移動するキーNPCと、あれこれ話し込んでいると、意外な話題に移っていって……。",
            "撤収作業も終わりに近づくステージの上。誰もいない客席に向けて、キーNPCが遠い目をしている。",
          ]
        ),
        "ODRT" => DiceTable::Table.new(
          "〈オメガ探偵社〉回想表", # p.187
          "1D6",
          [
            "事件調査のため、キーNPCに聞き込み。何か有益な情報は出るだろうか。世間話になってしまうかも？",
            "依頼もなく平和な探偵事務所へ、キーNPCがやってきた。これが事件の序章に……なるんだろうか？",
            "みんなで、近所の家のペット探し。キーNPCの見知ったペットらしく、ちょっと心配そうな顔をしている。",
            "警察の事件調査を手伝うことに。キーNPCは、事件の重要参考人として呼び出されているようだ。",
            "地道な張り込み調査をしているところへ、キーNPCがやってきた。あなたに差し入れもあるようだ。",
            "華麗なる事件解決！ 主人の推理をたくさん手伝うことができた。キーNPCも、あなたに一目置いてくれそう。",
          ]
        ),
        "SRT" => DiceTable::Table.new(
          "従者関係表", # 双子座の小径p.161
          "1D6",
          [
            "悪友",
            "きょうだい",
            "先輩／後輩",
            "相談相手",
            "部下／家臣",
            "双子",
          ]
        ),
        "TRS" => DiceTable::Table.new(
          "従者トラブル表", # 双子座の小径p.163
          "2D6",
          [
            "〈変晶体〉を見つけた従者は一人で「狭い場所／高い場所」へ行って戻れなくなってしまった。助けてあげよう。",
            "星人形の活躍に嫉妬したのか、従者が「いたずらを始めた／いじけてしまった」。友情を再確認させてあげよう。",
            "退屈していた従者は、ふらっとどこかへ「遊び／探索」に行ってしまった。従者の行きそうな場所を探してみよう。",
            "従者が「住人／PC」に一目惚れしてしまったようで、ずっと上の空だ。うまく冒険に興味を戻してあげることはできないだろうか。",
            "従者の姿が見えなくなったと思ったら、興味を引いた「子どもたち／小動物たち」に追い回され、奪い合いになっていた。助けてあげなければ！",
            "従者が〈変晶体〉に取り憑かれ、「暴れだした／逃げ出した」。なんとか取り押さえて浄化しよう！",
            "従者は突然、帰りたいと言い出した。「星人形が心配になった／冒険が怖くなった」ようだ……。話を聞いてあげよう。",
            "不注意からか、従者が何かを「壊してしまって／盗んでしまって」住人に怒られている。仲裁してあげよう。",
            "従者は「もっと強くなりたい／もっと美しくなりたい」と相談してきた。どう答えてあげればいいだろう？",
            "従者は自分の体の一部が「壊れて／汚れて」しまったことに落ち込んでいるようだ。治してあげることはできないだろうか？",
            "住人が従者を珍しく思い、無理やり「コレクション／商品」に加えようとしている。連れて行かれる前に救い出そう。",
          ]
        ),
        "RAL" => DiceTable::Table.new(
          "リアクション表　忠誠", # 双子座の小径p.159
          "1D6",
          [
            "仰せの通りに",
            "いえ、そのようなことは……",
            "我が主の判断に誤りなどございません",
            "ここは私が",
            "……ハッ！　眠ってなどおりません",
            "(従者の姿）の騎士として、主命を全ういたします",
          ]
        ),
        "RAC" => DiceTable::Table.new(
          "リアクション表　冷静", # 双子座の小径p.159
          "1D6",
          [
            "嫌な予感がするわね",
            "あなたがどうしたいかが大切よ",
            "私にはわからないわ",
            "気にする必要はないわ",
            "先を急ぎましょう",
            "私は（従者の姿）だけれど……あなたは本当の友達よ",
          ]
        ),
        "RAM" => DiceTable::Table.new(
          "リアクション表　母性", # 双子座の小径p.159
          "1D6",
          [
            "あらあら、どうしたのかしら",
            "頭をなでて差し上げましょう",
            "素晴らしいことですわ",
            "あなたの思う通りやっていいのですよ",
            "なんて愛らしい子でございましょう",
            "（従者の姿）の私でよければ、いっぱい甘えてくださいまし",
          ]
        ),
        "RAO" => DiceTable::Table.new(
          "リアクション表　年長者", # 双子座の小径p.159
          "1D6",
          [
            "大丈夫、心配しなくていいよ",
            "自分を信じるんだ",
            "フフッ、君は本当にかわいいね",
            "君の力はこんなものじゃないだろう？",
            "私にできることはそう多くない",
            "（従者の姿）たる私を友人に選んでくれたこと、誇りに思うよ",
          ]
        ),
        "RAI" => DiceTable::Table.new(
          "リアクション表　無邪気", # 双子座の小径p.160
          "1D6",
          [
            "やっちゃう～？",
            "楽しそうだね！",
            "ボクにまかせて！",
            "ボク、難しいことはわかんな～い",
            "ねえねえ、遊びに行こうよ～",
            "そんなこと言われても……ボク、（従者の姿）だし",
          ]
        ),
        "RAE" => DiceTable::Table.new(
          "リアクション表　長老", # 双子座の小径p.160
          "1D6",
          [
            "ほっほ、元気がいいのう",
            "どれ、ワシがやってみよう",
            "こりゃあたまげた",
            "ム？　ウ、ウム、そうじゃな……",
            "年寄りだと思って甘く見るでないぞ",
            "ワシも長いこと（従者の姿）をやっとるが、こんなことは初めてじゃ",
          ]
        ),
        "JDSBT" => DiceTable::Table.new(
          "〈魔術師の庭〉出張表", # 双子座の小径p.185
          "1D6",
          [
            "定期点検で通っている組織が人手不足になり、協力を求められた。あなたは主人にお願いされ、手伝いをしにいくことになる。",
            "主人はあなたの経験になればと、しばらく別の主人の元で仕事をするよう勧めた。",
            "「星人形を派遣できないか」と〈魔術師の庭〉宛に相談があり、あなたは主人のお願いで出張をすることになった。",
            "多忙な星人形の点検をする時間が割けないクライアントに代わって、しばらくあなたが星人形たちの点検をすることになった。",
            "体に違和感のある星人形がいるらしい。手の空いていたあなたは、クライアントの家に滞在し様子を観察することになった。",
            "〈魔術師の庭〉の仕事に退屈してしまったあなたは、別の職場を体験してみることにした。",
          ]
        ),
        "SHBT" => DiceTable::Table.new(
          "〈セブンス・ヘブン〉出張表", # 双子座の小径p.185
          "1D6",
          [
            "以前のクライアントが人手不足になり、協力を求められた。あなたは主人にお願いされ、手伝いをしにいくことになる。",
            "主人の知り合いからの要望を受け、あなたは特別に派遣メイドとして通うことになった。必要ならば、仕事を手伝う場面もあるかもしれない。",
            "あなたはクライアントの星人形たちに家事を教えるため、しばらく出張先に滞在することになった。",
            "クライアントから、星人形にサプライズパーティーをしたいと相談された。あなた仕事を手伝うフリをして、星人形の下調べをすることにした。",
            "あなたのメイド姿が大好きなクライアントから、熱のこもった出張依頼がきた。あなたは嫌な予感を覚えながら、出張先へ向かう。",
            "仕事のスキルアップがしたいと思ったあなたは、一人で出張し、別の主人の元で家事を担当することになった。",
          ]
        ),
        "BCBT" => DiceTable::Table.new(
          "〈祝福の鐘〉出張表", # 双子座の小径p.185
          "1D6",
          [
            "いつも応援してくれている組織が人手不足になり、協力を求められた。あなたは主人にお願いされ、手伝いをしにいくことになる。",
            "あなたは次の役柄や脚本について研究するため、別の職場に滞在して仕事を観察することになった。",
            "あなたはテレビ番組や雑誌などの企画を通じて、別の職場で職業体験をすることになった。",
            "本番が近付き、練習時間は一刻でも惜しい。あなたは稽古場からほど近い、知り合いの家にしばらく泊めてもらうことにした。",
            "劇団の大ファンだという星人形（あるいは主人）の熱烈な要望があり、あなたはオフの間、出張先に滞在することになった。",
            "次の公演まで長期休暇をもらったあなたは、気分転換に別の主人の元で生活をすることになった。",
          ]
        ),
        "ODBT" => DiceTable::Table.new(
          "〈オメガ探偵社〉出張表", # 双子座の小径p.186
          "1D6",
          [
            "以前捜査協力してくれた組織が人手不足になり、協力を求められた。あなたは主人にお願いされ、手伝いをしにいくことになる。",
            "あなたはクライアントの周囲に起きている小さな事件の解決を依頼され、滞在しながら調査をすることになった。",
            "あなたはターゲットにマークされないよう、別の主人の所持する星人形を演じることになった。",
            "あなたの勘は、出張先の主人や星人形が怪しいと告げている……！あなたは潜り込んで調査をすることにした。",
            "あなたは捜査のため、事件現場からほど近い別の主人の家に滞在することにした。",
            "依頼が来ない……！退屈そうにしているあなたを気遣い、主人はあなたを別の主人の元で手伝わせることにした。",
          ]
        ),
        "ASBT" => DiceTable::Table.new(
          "〈天の川商店街〉出張表", # 双子座の小径p.186
          "1D6",
          [
            "お店の常連が人手不足になり、協力を求められた。あなたは主人にお願いされ、手伝いをしにいくことになる。",
            "出張先の組織が商店街のイベントに協力することになった。相手をよく知りたいと思ったあなたは、滞在しながら打ち合わせを進めることになる。",
            "新商品や新サービスのアイデアを求めて、あなたは他の組織へ出張することにした。",
            "以前出張に来てくれたお礼に、今度はあなたが出張することになった。しっかり働いて恩を返そう。",
            "店舗の改装に伴って、お店が長期休業に入った。あなたはその間、別の主人の元で仕事を手伝うことになる。",
            "お店の常連と仲良くなったあなたは、主人の計らいで出張をすることになった。楽しい思い出をたくさん作ろう。",
          ]
        ),
        "PABT" => DiceTable::Table.new(
          "〈ポラリス星学院〉出張表", # 双子座の小径p.186
          "1D6",
          [
            "クラスの非常勤講師が人手不足になり、協力を求められた。あなたは先生にお願いされ、手伝いをしにいくことになる。",
            "社会科見学の一環としてあなたは別の主人の元へ出張することになった。",
            "あなたは学級新聞の取材のため、別の主人の元へ出張し、情報を集めることになった。",
            "学校のイベントが近いのに、準備が終わらない！あなたはクラスメートの家に泊まりがけで準備を進めることになる。",
            "非常勤講師としてやってきた主人が気になって仕方ないあなたは、自分の主人にお願いして出張をすることになった。",
            "あなたは国内留学で、別の学堂へ一時的に転入することになった。新しい出会いに期待をふくらませて、あなたは出張する。",
          ]
        ),
        "SCBT" => DiceTable::Table.new(
          "〈人形騎士団〉出張表", # 双子座の小径p.187
          "1D6",
          [
            "知り合いの主人が人手不足になり、協力を求められた。あなたは正体を隠しつつ、手伝いをしにいくことになる。",
            "あなたが目を覚ますと、そこは見知らぬ組織だった。怪我をした貴方を匿ってくれいたらしい。あなたは恩返しのため、手伝いをすることになる。",
            "予知夢によって〈型堕ち〉の出現を知ったあなたは、夢の通り別の主人の元へ出張し、出現を待つことにした。",
            "あなたのアジトは襲撃を受けた。敵にアジトを特定されてしまったようだ。足取りを追われないよう、あなたはしばらく出張することになる。",
            "この頃戦い続きだったあなたは、他の主人の元へ出張し、気持ちをリフレッシュするよう指示された。",
            "主人は「自分が守っているものを知ることも大事だ」と、あなたに出張を勧めた。",
          ]
        ),
        "TOSCBT" => DiceTable::Table.new(
          "〈人形騎士団〉への出張表", # 双子座の小径p.187
          "1D6",
          [
            "あなたの職場が〈型堕ち〉に襲われた。主人は怪我により入院、あなたは襲撃時加勢に来た〈人形騎士団〉に匿われることになった。",
            "あなたは〈型堕ち〉をよく知る人物として協力を求められた。一緒に仲間を救い出そう。",
            "予知夢を通じて、あなたは〈人形騎士団〉に協力しなければならないと知った。",
            "あなたは〈人形騎士団〉の戦いを偶然目の当たりにし、共に戦いたいと感じた。彼らのように強くなりたいと願ったのかもしれない。",
            "〈人形騎士団〉が現れ、あなたが〈型堕ち〉に狙われていることを教えてくれた。しばらく一緒に行動した方がいいだろう。",
            "かつてあなたは〈人形騎士団〉と共闘し、またいつでも協力すると約束した。その約束を果たすときが来たようだ。あなたは主人に願い出る。",
          ]
        ),
        "TROF" => DiceTable::Table.new(
          "森事件表", # 双子座の小径p.191
          "2D6",
          [
            "〈変晶体〉に取り憑かれた食虫植物が仲間を飲み込んでしまった。早く助けなければ！",
            "〈変晶体〉は滝壺の中に沈んでいるようだ。しかし直接手に入れようとすれば、流れに巻き込まれて出られなくなってしまうだろう。",
            "鳥の巣の中に〈変晶体〉があるようだ。親鳥は雛を守ろうと警戒している。うまく心を通わせることはできないだろうか？",
            "巨岩の中から〈変晶体〉の気配がある……。破壊しなければ取り出すことはできないだろう。",
            "〈変晶体〉に憑依された小動物が、巣穴の中に入っていってしまった……。おびき寄せる方法はないだろうか？",
            "〈変晶体〉に憑依された動物が、仲間の大切なものを盗んでいってしまった。追いかけて取り戻そう！",
            "〈変晶体〉に憑依された獰猛な動物が寝息を立てている。起こさないように近づくことはできるだろうか。",
            "〈変晶体〉を持つ人形兵たちが車座になって、何かを相談している。幸い、相手はこちらに気付いていない。今なら……！",
            "仲間が落とし穴に落ちてしまった。穴の底には〈変晶体〉があるようだ。救出して浄化しよう。",
            "水の中を泳ぎ回る魚が〈変晶体〉を飲み込んでいるようだ。どうやって捕まえたものか……。",
            "崖にかかったボロボロな吊り橋の中央に〈変晶体〉を見つけた。罠だろうか。普通に取りに行けば橋が落ちてしまいそうだが……。",
          ]
        ),
        "TROG" => DiceTable::Table.new(
          "庭園事件表", # 双子座の小径p.193
          "2D6",
          [
            "紳士の蒐集家が、鞄の中に〈変晶体〉を入れて持ち歩いているようだ。何とか相手を傷つけず手に入れたいが、どうしようか。",
            "〈変晶体〉を宿した二重型が、あなたに追いかけっこを挑んできた。捕まえれば浄化できるだろうが、果たして追いつけるだろうか……？",
            "庭木に〈変晶体〉が憑依し、天高く伸びていく。〈変晶体〉は木の先端にあるようだが、取りにいくことはできるだろうか。",
            "腰を痛めてしまった老いた庭師が、「代わりに木を切ってくれたら〈変晶体〉の在り処を教えよう」と言う。手早く済ます方法は……。",
            "バラの茨によって雁字搦めにされ、厳重に守られた〈変晶体〉を見つけた。安全に手にする方法はあるだろうか……。",
            "「侵入者だ！」〈変晶体〉に取り憑かれた人形兵たちが、武器を持ってあなたに襲いかかる！",
            "獰猛そうな番犬が唸り声を上げ、あなたたちに敵意の眼差しを向けている。〈変晶体〉に憑依されているようだ。",
            "〈変晶体〉に取り憑かれた花がつるを伸ばし、一行の体を締め上げる。身動きは取れないが、脱出しなければ……！",
            "〈変晶体〉を取り込んだ蜂の巣から、蜂が一斉に襲いかかる！通常の攻撃では効果がなさそうだ。何か方法はないだろうか？",
            "上品な女性が、衣装のほつれを気にしている。修繕できれば〈変晶体〉の在り処を教えてくれるようだ。",
            "焼却炉の中で〈変晶体〉が燃え盛り、辺りに〈悪夢の霧〉を撒き散らしている。この激しい炎を止めないと、浄化はできそうにない。",
          ]
        ),
        "TROC" => DiceTable::Table.new(
          "城内事件表", # 双子座の小径p.195
          "2D6",
          [
            "「あなたには王（姫）を救うことができるのですか？」女性があなたに問いかける。あなたが力を示せば、〈変晶体〉の場所を教えるつもりのようだ。",
            "重くて大きな壺の中に〈変晶体〉を見つけた。壺の口は狭くて手は入りそうにない。どうやって手に入れようか……？",
            "敵兵の武器の装飾に〈変晶体〉が埋め込まれている。できるだけ穏便に回収したいが……。",
            "天井に吊るされたシャンデリアに〈変晶体〉が引っかかり、不気味な影を落としている。どうすれば手が届くだろう？",
            "〈型堕ち〉にそっくりな彫像を見つけた。王冠には〈変晶体〉が使われているようだ。見張り番にバレないように回収しよう。",
            "通路に飾られていた甲冑が突然動き出し襲いかかってきた！〈変晶体〉に操られているようだ。",
            "ネズミが〈変晶体〉をくわえて、壁に空いた小さな穴へ逃げていった。どうやったら捕まえられるだろう……？",
            "壁の向こう側から〈変晶体〉の気配がある。どこかに隠し通路があるようだが、どうすれば見つかるだろうか。",
            "「これよりも私に似合う装飾品を見つければ交換してやろう」貴族の男性が胸元に〈変晶体〉のブローチをつけている。",
            "〈変晶体〉の入った大砲が今にも着火しそうだ。早く止めなければ城外の遥か遠くまで飛ばされてしまう……！",
            "「助けてくれれば、〈変晶体〉の在り処を教える」手枷と足枷をかけられた星人形があなたに訴える。人形兵と違い、はっきり意識があるようだ。",
          ]
        ),
        "TROT" => DiceTable::Table.new(
          "都市事件表", # 双子座の小径p.197
          "2D6",
          [
            "信号が突如めちゃくちゃになって混乱が起きている。信号に〈変晶体〉が憑依しているようだ。暴走する車をかき分けて信号へ辿り着こう。",
            "迷子の少女が泣きながら「これあげるから、お母さんのところまで連れてって！」と妙な石を差し出す。……〈変晶体〉じゃないか！",
            "「そこのあんた、悪い相が出ているよ」占い師の老婆に引き止められる。手元には水晶の代わりに〈変晶体〉が……！",
            "〈変晶体〉を積んだ暴走トラックがあなたたちに突っ込んできた。なんとかして止めないと〈変晶体〉もろともバラバラだ！",
            "人混みの中に〈変晶体〉の気配を感じた。この中の誰かが持っているはずだ。しかしどうやって見つけ出そう？",
            "厳重な鍵がついたショーケースの中に〈変晶体〉を見つけた。何か開ける方法は……？",
            "「引ったくりよー！！」女性の叫び声に顔を上げると〈変晶体〉に取り憑かれた男性が逃げ去っていく！",
            "工事車両の荷台に瓦礫ごと〈変晶体〉が積まれている。運ばれる前に回収しなければ……。",
            "都市公園の水辺が黒く濁っている。中に〈変晶体〉が沈んでいるようだ。うまく見つけ出す方法はないだろうか？",
            "〈変晶体〉を手に入れた途端、カラスの大群が襲いかかってきた！　ギラギラした〈変晶体〉を狙っているようだ。",
            "路上で男同士が喧嘩をしているが、様子がおかしい。殴りかかろうとする男の手には〈変晶体〉が！　喧嘩を仲裁して〈変晶体〉を手に入れよう。",
          ]
        ),
        "TROL" => DiceTable::Table.new(
          "図書館事件表", # 双子座の小径p.199
          "2D6",
          [
            "本棚に誰かの日記が混ざっているのを見つけた。中には「邪悪な黒い宝石を入手した」とある。持ち主を見つければ、〈変晶体〉が手に入るかもしれない。",
            "「探しているものが見つかる本」を発見した。文字もページもかなり多い本だが、〈変晶体〉の場所が書かれたページを見つけられただろうか……？",
            "館員が〈変晶体〉のありかを教えてくれたが、道案内の内容がかなり複雑だ……。どうにかしてたどり着く方法は……。",
            "本が積み上がってできた巨大な山の中から、〈変晶体〉の気配がある。なんとかして山をどかすことはできないだろうか。",
            "本に触れた途端〈悪夢の霧〉が吹き出し、視界を奪われる。真っ暗で何も見えないが、はやく〈変晶体〉の影響を受けた本を見つけよう。",
            "〈変晶体〉を見つけた直後、巨大な本棚が倒れてきた。このままでは〈変晶体〉を手に入れる前に全員下敷きになってしまう……！",
            "絵本を開くと、お話の登場人物が飛び出して襲いかかってきた。相手は〈変晶体〉に取り憑かれているようだ。",
            "〈変晶体〉の宿った本を、二人の人形兵が見張っている。うまく彼らの注意を引けないだろうか……？",
            "本棚の一番上の列に〈変晶体〉が挟まっているが、はしごなどは見当たらない。よじ登るしかないのだろうか……？",
            "あなたは〈変晶体〉を手に入れたが、二重型に奪われてしまう。「知らないお話を聞かせてくれたら返してあげる」と二重型は言うが……。",
            "「ご本を読んでくださらない？」少女は〈悪夢の霧〉で黒く澱んだ本を抱えて言う。願いを叶えなければ〈変晶体〉が潜んだ本は離してもらえなさそうだ。",
          ]
        ),
        "TROS" => DiceTable::Table.new(
          "駅事件表", # 双子座の小径p.201
          "2D6",
          [
            "「旅行キャンペーンお申し込みの方には〈変晶体〉プレゼント！」と書かれた張り紙を見つける。誰かの手に渡る前に回収しよう！",
            "落とし物を探している老人に出会う。見つけられたら〈変晶体〉と交換してくれるようだ。",
            "改札の向こうに〈変晶体〉を見つけたが、「切符がないと通れませんよ」と止められる。でも切符売り場も見つからないし、どうやって通ろうか……。",
            "複数の鳩が〈変晶体〉をつついて遊んでいる。鳩に〈変晶体〉の影響が出る前に回収しよう。",
            "「なんだこれは？」駅員達が〈変晶体〉を囲んで首を傾げている。なんとか説得して〈変晶体〉を渡してもらおう。",
            "線路上に〈変晶体〉が落ちているが、もうすぐ列車がやってくる！列車が通過したあと、元の場所にあるかはわからない……！",
            "〈変晶体〉を持った人形兵たちはあなたたちを追っていたが、人混みで見失ったようだ。うまく利用客に紛れれば、戦わずに浄化できるかもしれない。",
            "停車中の電車が〈悪夢の霧〉に包まれ、乗客はパニックになっている。あの中に〈変晶体〉があるはずだ。しかしまずは乗客を救出しよう。",
            "〈変晶体〉を宿した二重型があなたを線路に突き落とそうとぶつかってきた。どうにかこの場を乗り切って二重型を捕まえよう！",
            "時刻表「〈変晶体〉の列車」と表示される。〈変晶体〉に憑依された列車が通過するようだ。列車を止めることなんてできるのだろうか……！？",
            "路上コンサートの観客達の様子がおかしい。よく見ると演奏者の楽器に〈変晶体〉が埋め込まれている！早く浄化してみんなの目を覚まそう。",
          ]
        ),
      }.freeze

      register_prefix('\d+D6', RTT.prefixes, TABLES.keys)
    end
  end
end
