# frozen_string_literal: true

require 'bcdice/dice_table/table'

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

      # ゲームシステム名
      NAME = 'シノビガミ'

      # ゲームシステム名の読みがな
      SORT_KEY = 'しのひかみ'

      # ダイスボットの使い方
      # 25/01/17：書式成形（半角スペース×2に統一、同じ書籍のシーン表は改行なしで列挙）
      HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
        ・行為判定 nSG@s#f>=x
          2D6の行為判定を行う。ダイス数が指定された場合、大きい出目2個を採用する。
          n: ダイス数 (省略時 2)
          s: スペシャル値 (省略時 12)
          f: ファンブル値 (省略時 2)
          x: 目標値 (省略可)
          例）SG, SG@11, SG@11#3, SG#3>=7, 3SG>=7

        ・行為判定以外の表
          以下の表は「回数+コマンド」で複数回振れる
          例）3RCT, 2WT

        ・ランダム特技決定表 RTTn (n:分野番号、省略可能)
          1器術 2体術 3忍術 4謀術 5戦術 6妖術

        ・ランダム分野表 RCT

        ・各種表：基本ルールブック以降
          ファンブル表 FT、戦場表 BT、感情表 ET、変調表 WT、戦国変調表 GWT、プライズ効果表 PT
          妖魔化（異形表、妖魔忍法表一括） MT、異形表 MTR、妖魔忍法表(x:A,B,C) DSx

        ・各種表：流派ブック以降
          比良坂流派ブック
            パニック表 HRPT
          鞍馬流派ブック
            新戦場表 BNT
          御斎流派ブック
            覚醒表 OTAT
            忍法授業シーン表（x:1-攻撃系 2-防御系 3-戦略系）NCTx
            【数奇】OTS
          隠忍流派ブック
            妖術変調対応表（x:なし-現代／戦国、1-現代、2-戦国）YWTx
            妖魔化（新異形表利用） NMT、新異形表 NMTR、妖魔忍法表（x:1-異霊 2-凶身 3-神化 4-攻激）DSNx
            出物表 ONDT

        ・各種表：基本ルールブック改訂版以前
          無印
            旧ファンブル表 OFT 、旧変調表 OWT、旧戦場表 OBT、異形表 MT
          怪
            怪ファンブル表 KFT、怪変調表 KWT (基本ルールブックと同一）

        ・シーン表
          基本ルールブック
            通常 ST、出島 DST、都市 CST、館 MST、トラブル TST、回想 KST、日常 NST、学校 GAST、戦国 GST
          忍秘伝
            中忍試験 HC、滅びの塔 HT、影の街 HK、夜行列車 HY、病院 HO、龍動 HR、密室 HM、催眠 HS
          正忍記
            カジノ TC、ロードムービー TRM、マスカレイド・キャッスル TMC、月天に死の咲く TGS、恋人との日々 TKH、学校（黒星祭） TKG、魔都学園 TMG、魔都東京 TMT
          流派ブック以降
            御斎流派ブック
              不良高校 OTFK
          基本ルールブック改訂版以前
            死
              東京 TKST
            リプレイ戦1〜2巻
              京都 KYST、神社仏閣 JBST
          その他
            秋空に雪舞えば AKST、夏の終わり NTST、出島EX DXST、災厄 CLST、斜歯ラボ HLST、培養プラント PLST

        ・D66ダイスあり
      INFO_MESSAGE_TEXT

      class DemonSkillTableForMetamorphose
        def initialize(pretext, table)
          @pretext = pretext
          @table = table
        end

        def roll(randomizer)
          return "#{@pretext} ＞ #{@table.roll(randomizer)}"
        end
      end

      def initialize(command)
        super(command)

        @sort_add_dice = true
        @d66_sort_type = D66SortType::ASC
      end

      SPECIAL = "スペシャル(【生命力】1点か変調一つを回復)"

      def result_2d6(total, dice_total, _dice_list, cmp_op, target)
        return nil unless cmp_op == :>=

        if dice_total <= 2
          Result.fumble("ファンブル")
        elsif dice_total >= 12
          Result.critical(SPECIAL)
        elsif target == "?"
          nil
        elsif total >= target
          Result.success("成功")
        else
          Result.failure("失敗")
        end
      end

      register_prefix('\d*SG')

      def eval_game_system_specific_command(command)
        return action_roll(command) || repeat_table(command)
      end

      def repeat_table(command)
        times = command.start_with?(/\d/) ? command.to_i : 1
        key = command.sub(/^\d+/, '')
        results = [*0...times].map do |_|
          roll_tables(key, TABLES) || roll_tables(key, SCENE_TABLES) ||
            roll_tables(key, DEMON_SKILL_TABLES) || roll_tables(key, DEMON_SKILL_TABLES_NEW) || RTT.roll_command(@randomizer, key)
        end.compact
        return nil if results.empty?

        return results.join("\n")
      end

      RTT = DiceTable::SaiFicSkillTable.new(
        [
          ['器術', ['絡繰術', '火術', '水術', '針術', '仕込み', '衣装術', '縄術', '登術', '拷問術', '壊器術', '掘削術']],
          ['体術', ['騎乗術', '砲術', '手裏剣術', '手練', '身体操術', '歩法', '走法', '飛術', '骨法術', '刀術', '怪力']],
          ['忍術', ['生存術', '潜伏術', '遁走術', '盗聴術', '腹話術', '隠形術', '変装術', '香術', '分身の術', '隠蔽術', '第六感']],
          ['謀術', ['医術', '毒術', '罠術', '調査術', '詐術', '対人術', '遊芸', '九ノ一の術', '傀儡の術', '流言の術', '経済力']],
          ['戦術', ['兵糧術', '鳥獣術', '野戦術', '地の利', '意気', '用兵術', '記憶術', '見敵術', '暗号術', '伝達術', '人脈']],
          ['妖術', ['異形化', '召喚術', '死霊術', '結界術', '封術', '言霊術', '幻術', '瞳術', '千里眼の術', '憑依術', '呪術']],
        ],
        s_format: "『%<category_name>s』%<skill_name>s",
        rtt_format: "ランダム指定特技表(%<category_dice>d,%<row_dice>d) ＞ %<text>s"
      )

      private

      def action_roll(command)
        parser = Command::Parser.new(/\d*SG/, round_type: round_type)
                                .restrict_cmp_op_to(:>=, nil)
                                .enable_critical
                                .enable_fumble
        cmd = parser.parse(command)
        return nil unless cmd

        times = cmd.command.start_with?(/\d/) ? cmd.command.to_i : 2
        return nil if times <= 1

        cmd.critical ||= 12
        cmd.fumble ||= 2

        dice_list_full = @randomizer.roll_barabara(times, 6).sort
        dice_list_full_str = "[#{dice_list_full.join(',')}]" if times > 2

        dice_list = dice_list_full[-2, 2]
        dice_total = dice_list.sum()
        total = dice_total + cmd.modify_number

        result =
          if dice_total <= cmd.fumble
            Result.fumble("ファンブル")
          elsif dice_total >= cmd.critical
            Result.critical(SPECIAL)
          elsif cmd.cmp_op.nil?
            Result.new
          elsif total >= cmd.target_number
            Result.success("成功")
          else
            Result.failure("失敗")
          end

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

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

      # 妖魔忍法表A, B, C
      DEMON_SKILL_TABLES = {
        'DSA' => DiceTable::Table.new(
          '妖魔忍法表A',
          '1D6',
          [
            '【震々】(怪p.252／基本p.172)',
            '【神隠】(怪p.252／基本p.172)',
            '【夜雀】(怪p.252／基本p.172)',
            '【猟犬】(怪p.252／基本p.172)',
            '【逢魔時】(怪p.252／基本p.172)',
            '【狂骨】(怪p.252／基本p.172)',
          ]
        ),
        'DSB' => DiceTable::Table.new(
          '妖魔忍法表B',
          '1D6',
          [
            '【野衾】(怪p.253／基本p.172)',
            '【付喪神】(怪p.253／基本p.172)',
            '【見越】(怪p.253／基本p.172)',
            '【木魂】(怪p.253／基本p.172)',
            '【鵺】(怪p.253／基本p.172)',
            '【生剥】(怪p.253／基本p.172)',
          ]
        ),
        'DSC' => DiceTable::Table.new(
          '妖魔忍法表C',
          '1D6',
          [
            '【百眼】(怪p.254／基本p.173)',
            '【呑口】(怪p.254／基本p.173)',
            '【荒吐】(怪p.254／基本p.173)',
            '【怨霊】(怪p.254／基本p.173)',
            '【鬼火】(怪p.254／基本p.173)',
            '【蛭子】(怪p.254／基本p.173)',
          ]
        )
      }.freeze
      # 妖魔忍法表（隠忍流派）
      DEMON_SKILL_TABLES_NEW = {
        'DSN1' => DiceTable::Table.new(
          '妖魔忍法表・異霊',
          '1D6',
          [
            '【逢魔時】(基本 p172)／【虚舟】（隠忍 p28）',
            '【神隠】(基本 p172)／【夢喰】（隠忍 p28）',
            '【狂骨】(基本 p172)／【金毛】（隠忍 p28）',
            '【木魂】(基本 p172)／【朽縄】（隠忍 p28）',
            '【付喪神】(基本 p172)／【香魂】（隠忍 p28）',
            '【生剥】(基本 p172)／【三尸】（隠忍 p28）',
          ]
        ),
        'DSN2' => DiceTable::Table.new(
          '妖魔忍法表・凶身',
          '1D6',
          [
            '【荒吐】(基本 p173)／【赤舌】（隠忍 p29）',
            '【鬼火】(基本 p173)／【大太郎】（隠忍 p29）',
            '【怨霊】(基本 p173)／【白面】（隠忍 p29）',
            '【呑口】(基本 p173)／【邪魅】（隠忍 p29）',
            '【百眼】(基本 p173)／【鬼胎】（隠忍 p29）',
            '【蛭子】(基本 p173)／【岩肌】（隠忍 p29）',
          ]
        ),
        'DSN3' => DiceTable::Table.new(
          '妖魔忍法表・神化',
          '1D6',
          [
            '【鵺】(基本 p172)／【朱盤】（隠忍 p29）',
            '【野衾】(基本 p172)／【長壁】（隠忍 p29）',
            '【震々】(基本 p172)／【物気】（隠忍 p29）',
            '【見越】(基本 p172)／【紙舞】（隠忍 p29）',
            '【夜雀】(基本 p172)／【目競】（隠忍 p29）',
            '【猟犬】(基本 p172)／【置行】（隠忍 p29）',
          ]
        ),
        'DSN4' => DiceTable::Table.new(
          '妖魔忍法表・攻激',
          '1D6',
          [
            '【黒手】(隠忍 p28)／【強威】（隠忍 p25）',
            '【業弓】(隠忍 p28)／【強威】（隠忍 p25）',
            '【怪病】(隠忍 p28)／【強威】（隠忍 p25）',
            '【鏖殺】(隠忍 p28)／【強威】（隠忍 p25）',
            '【精霊風】(隠忍 p28)／【強威】（隠忍 p25）',
            '【雷獣】(隠忍 p28)／【強威】（隠忍 p25）',
          ]
        )
      }.freeze
      TABLES = {
        'FT' => DiceTable::Table.new(
          'ファンブル表',
          '1D6',
          [
            '何か調子がおかしい。そのサイクルの間、すべての行為判定にマイナス１の修正がつく。',
            'しまった！　好きな忍具を１つ失ってしまう。',
            '情報が漏れる！　あなた以外のキャラクターは、あなたの持っている【秘密】か【居所】の中から、好きなものをそれぞれ一つ知ることができる。',
            '油断した！　術の制御に失敗し、好きな【生命力】を１点失う。',
            '敵の陰謀か？　罠にかかり、ランダムに選んだ変調一つを受ける。変調は、変調表で決定すること。',
            'ふう。危ないところだった。特に何も起こらない。',
          ]
        ),
        'OFT' => DiceTable::Table.new(
          'ファンブル表（旧文庫版）',
          '1D6',
          [
            '何か調子がおかしい。そのサイクルの間、すべての行為判定にマイナス１の修正がつく。',
            'しまった！　好きな忍具を１つ失ってしまう。',
            '情報が漏れる！　このゲームであなたが獲得した【秘密】は、他のキャラクター全員の知るところとなる。',
            '油断した！　術の制御に失敗し、好きな【生命力】を１点失う。',
            '敵の陰謀か？　罠にかかり、ランダムに選んだ変調１つを受ける。変調は、変調表で決定すること。',
            'ふう。危ないところだった。特に何も起こらない。',
          ]
        ),
        'KFT' => DiceTable::Table.new(
          '怪ファンブル表',
          '1D6',
          [
            '何か調子がおかしい。そのサイクルの間、すべての行為判定にマイナス１の修正がつく。',
            'しまった！　好きな忍具を１つ失ってしまう。',
            '情報が漏れる！　あなた以外のキャラクターは、あなたの持っている【秘密】か【居所】の中から、好きなものをそれぞれ一つ知ることができる。',
            '油断した！　術の制御に失敗し、好きな【生命力】を１点失う。',
            '敵の陰謀か？　罠にかかり、ランダムに選んだ変調一つを受ける。変調は、変調表で決定すること。',
            'ふう。危ないところだった。特に何も起こらない。',
          ]
        ),
        'ET' => DiceTable::Table.new(
          '感情表',
          '1D6',
          [
            '共感（プラス）／不信（マイナス）',
            '友情（プラス）／怒り（マイナス）',
            '愛情（プラス）／妬み（マイナス）',
            '忠誠（プラス）／侮蔑（マイナス）',
            '憧憬（プラス）／劣等感（マイナス）',
            '狂信（プラス）／殺意（マイナス）',
          ]
        ),
        'WT' => DiceTable::Table.new(
          '変調表',
          '1D6',
          [
            '故障:すべての忍具が使用不能になる。この効果は累積しない。各サイクルの終了時に、《絡繰術》で行為判定を行い、成功するとこの変調は無効化される。',
            'マヒ:修得している特技の中からランダムに一つを選び、その特技が使用不能になる。この効果は、修得している特技の数だけ累積する。各サイクルの終了時に、《身体操術》で行為判定を行い、成功するとこの変調はすべて無効化される。',
            '重傷:命中判定、情報判定、感情判定を行うたびに、接近戦ダメージを１点受ける。この効果は累積しない。各サイクルの終了時に、《生存術》で行為判定を行い、成功するとこの変調は無効化される。',
            '行方不明:メインフェイズ中、自分以外がシーンプレイヤーのシーンに登場することができなくなる。この効果は累積しない。各サイクルの終了時に、《経済力》で行為判定を行い、成功するとこの変調は無効化される。',
            '忘却:修得している【感情】の中からランダムに一つを選び、その【感情】を持っていないものとして扱う。この効果は、修得している【感情】の数だけ累積する。各サイクルの終了時に、《記憶術》で行為判定を行い、成功するとこの変調はすべて無効化される。',
            '呪い:修得している忍法の中からランダムに一つを選び、その忍法を修得していないものとして扱う。この効果は、修得している忍法の数だけ累積する。各サイクルの終了時に、《呪術》で行為判定を行い、成功するとこの変調はすべて無効化される。',
          ]
        ),
        'OWT' => DiceTable::Table.new(
          '変調表（旧文庫版）',
          '1D6',
          [
            '故障:すべての忍具が使用不能。１サイクルの終了時に、《絡繰術》で判定を行い、成功するとこの効果は無効化される。',
            'マヒ:修得済み特技がランダムに１つ使用不能になる。１サイクルの終了時に、《身体操術》で成功するとこの効果は無効化される。',
            '重傷:次の自分の手番に行動すると、ランダムな特技分野１つの【生命力】に１点ダメージ。１サイクルの終了時に、《生存術》で成功すると無効化される。',
            '行方不明:その戦闘終了後、メインフェイズ中に行動不可。１サイクルの終了時に、《経済力》で成功すると無効化される。',
            '忘却:修得済み感情がランダムに１つ使用不能。１サイクルの終了時に、《記憶術》で成功すると無効化される。',
            '呪い:修得済み忍法がランダムに１つ使用不能。１サイクルの終了時に、《呪術》で成功すると無効化される。',
          ]
        ),
        'KWT' => DiceTable::Table.new(
          '怪変調表',
          '1D6',
          [
            '故障:すべての忍具が使用不能になる。この効果は累積しない。各サイクルの終了時に、《絡繰術》で行為判定を行い、成功するとこの変調は無効化される。',
            'マヒ:修得している特技の中からランダムに一つを選び、その特技が使用不能になる。この効果は、修得している特技の数だけ累積する。各サイクルの終了時に、《身体操術》で行為判定を行い、成功するとこの変調はすべて無効化される。',
            '重傷:命中判定、情報判定、感情判定を行うたびに、接近戦ダメージを１点受ける。この効果は累積しない。各サイクルの終了時に、《生存術》で行為判定を行い、成功するとこの変調は無効化される。',
            '行方不明:メインフェイズ中、自分以外がシーンプレイヤーのシーンに登場することができなくなる。この効果は累積しない。各サイクルの終了時に、《経済力》で行為判定を行い、成功するとこの変調は無効化される。',
            '忘却:修得している【感情】の中からランダムに一つを選び、その【感情】を持っていないものとして扱う。この効果は、修得している【感情】の数だけ累積する。各サイクルの終了時に、《記憶術》で行為判定を行い、成功するとこの変調はすべて無効化される。',
            '呪い:修得している忍法の中からランダムに一つを選び、その忍法を修得していないものとして扱う。この効果は、修得している忍法の数だけ累積する。各サイクルの終了時に、《呪術》で行為判定を行い、成功するとこの変調はすべて無効化される。',
          ]
        ),
        'GWT' => DiceTable::Table.new(
          '戦国変調表',
          '1D6',
          [
            '催眠:この変調を受けた者は、戦闘に参加したとき、戦闘開始時、もしくはこの変調を受けたときに【生命力】を１点減少しないと、その戦闘から自動的に脱落する。この効果は累積しない。サイクルの終了時に、《意気》の判定を行い、成功するとこの効果は無効化される。',
            '火達磨:この変調を受けた者は、ファンブル値が１上昇し、ファンブル時に１点の接近戦ダメージを受ける。この効果は累積する。シーンの終了時に、この効果は無効化される。',
            '猛毒:この変調を受けた者は、戦闘に参加した時、ラウンドの終了時にサイコロを１個振る。その目が奇数だったら、【生命力】を１点減少する。この効果は累積する。サイクルの終了時に、《毒術》の判定を行い、成功するとこの効果は無効化される。',
            '飢餓:この変調を受けた者は、戦闘に参加した時、ラウンドの終了時にサイコロを１個振る。その目が偶数だったら、【生命力】を１点減少する。この効果は累積する。サイクルの終了時に、《兵糧術》の判定を行い、成功するとこの効果は無効化される。',
            '残刃:この変調を受けた者は、回復判定や忍法、忍具の効果によって【生命力】を回復できなくなる（変調を回復することはできる）。この効果は累積しない。サイクルの終了時に、《拷問術》の判定を行い、成功するとこの効果は無効化される。',
            '野望:この変調を受けた者は、命中判定にプラス１、それ以外のあらゆる行為判定にマイナス１の修正がつく。この効果は累積しない。サイクルの終了時に、《憑依術》の判定を行い、成功するとこの効果は無効化される。',
          ]
        ),
        'OBT' => DiceTable::Table.new(
          '戦場表（旧文庫版）',
          '1D6',
          [
            '平地:特になし。',
            '水中:海や川や、プール、血の池地獄など。この戦場では、回避判定に-2の修正がつく。',
            '高所:ビルの谷間や樹上、断崖絶壁など。この戦場でファンブルすると1点のダメージを受ける。',
            '悪天候:嵐や吹雪、ミサイルの雨など。この戦場では、すべての攻撃忍法の間合が１上昇する。',
            '雑踏:人混みや教室、渋滞中の車道など。この戦場では、行為判定のとき、2D6の目がプロット値+1以下だとファンブルする。',
            '極地:宇宙や深海、溶岩、魔界など。ラウンドの終わりにＧＭが1D6を振り、経過ラウンド以下なら全員1点ダメージ。ここから脱落したものは変調表を適用する。',
          ]
        ),
        'BT' => DiceTable::Table.new(
          '戦場表',
          '1D6',
          [
            '平地:特になし。',
            '水中:海や川や、プール、血の池地獄など。この戦場では、回避判定にマイナス２の修正がつく。',
            '高所:ビルの谷間や樹上、断崖絶壁など。この戦場でファンブルすると接近戦ダメージを１点受ける。',
            '悪天候:嵐や吹雪、ミサイルの雨など。この戦場では、すべての攻撃忍法の間合が１上昇する。',
            '雑踏:人混みや教室、渋滞中の車道など。この戦場では、この戦場では、行為判定のとき、ファンブル値が１上昇する。',
            '極地:宇宙や深海、溶岩、魔界など。ゲームマスターは、ラウンドの終わりに１Ｄ６を振る。戦闘開始時からの経過ラウンド以下の目が出ると、この戦場にいると、接近戦ダメージを１点受ける。この戦場から脱落した者は、１Ｄ６を振り、変調表の結果を適用すること。',
          ]
        ),
        'MT' => DiceTable::ChainTable.new(
          "異形表",
          '1D6',
          [
            DemonSkillTableForMetamorphose.new(
              '1D6を振り、「妖魔忍法表A」で、ランダムに忍法の種類を決定する。妖魔化している間、その妖魔忍法を修得しているものとして扱う。この異形は、違う種類の妖魔忍法である限り、違う異形として扱う。',
              DEMON_SKILL_TABLES['DSA']
            ),
            DemonSkillTableForMetamorphose.new(
              '1D6を振り、「妖魔忍法表B」で、ランダムに忍法の種類を決定する。妖魔化している間、その妖魔忍法を修得しているものとして扱う。この異形は、違う種類の妖魔忍法である限り、違う異形として扱う。',
              DEMON_SKILL_TABLES['DSB']
            ),
            DemonSkillTableForMetamorphose.new(
              '1D6を振り、「妖魔忍法表C」で、ランダムに忍法の種類を決定する。妖魔化している間、その妖魔忍法を修得しているものとして扱う。この異形は、違う種類の妖魔忍法である限り、違う異形として扱う。',
              DEMON_SKILL_TABLES['DSC']
            ),
            '妖魔化している間、戦闘中、1ラウンドに使用できる忍法のコストが、自分のプロット値+3点になり、装備忍法の【揺音】を修得する。',
            '妖魔化している間、【接近戦攻撃】によって与える接近戦ダメージが2点になる。',
            '妖魔化している間、このキャラクターの攻撃に対する回避判定と、このキャラクターの奥義に対する奥義破り判定にマイナス1の修正がつく。'
          ]
        ),
        'MTR' => DiceTable::Table.new(
          "異形表",
          '1D6',
          ['1D6を振り、「妖魔忍法表A」で、ランダムに忍法の種類を決定する。妖魔化している間、その妖魔忍法を修得しているものとして扱う。この異形は、違う種類の妖魔忍法である限り、違う異形として扱う。',
           '1D6を振り、「妖魔忍法表B」で、ランダムに忍法の種類を決定する。妖魔化している間、その妖魔忍法を修得しているものとして扱う。この異形は、違う種類の妖魔忍法である限り、違う異形として扱う。',
           '1D6を振り、「妖魔忍法表C」で、ランダムに忍法の種類を決定する。妖魔化している間、その妖魔忍法を修得しているものとして扱う。この異形は、違う種類の妖魔忍法である限り、違う異形として扱う。',
           '妖魔化している間、戦闘中、1ラウンドに使用できる忍法のコストが、自分のプロット値+3点になり、装備忍法の【揺音】を修得する。',
           '妖魔化している間、【接近戦攻撃】によって与える接近戦ダメージが2点になる。',
           '妖魔化している間、このキャラクターの攻撃に対する回避判定と、このキャラクターの奥義に対する奥義破り判定にマイナス1の修正がつく。']
        ),
        'PT' => DiceTable::Table.new(
          'プライズ効果表',
          '2D6',
          [
            '爆弾。このプライズの所持者は、行為判定にファンブルすると、1D6点の射撃戦ダメージを受ける。その後、このプライズは破壊される。ゲーム終了時に、このプライズを持っていると、功績点を1点獲得する。',
            '集中。そのプライズの所持者は、戦闘シーンのとき、1ラウンドに使用できる忍法のコストが1点上昇する。',
            '再生。そのプライズの所持者は、サイクルの終了時に、【生命力】が1点回復する。',
            '障壁。そのプライズの所持者は、目標値が10以上の回避判定にプラス1の修正を得る。',
            '加速。そのプライズの所持者は、自分が攻撃忍法を使用した時、その回避判定にマイナス1の修正を与えることができる。',
            '治癒。そのプライズの所持者は、ドラマシーンで回復判定を行った際、さらに【生命力】を1点回復するか、変調を1つ回復することができる。',
            '断絶。そのプライズの所持者は、誰かが自分を対象とした情報判定や感情判定を行おうとした時、マイナス1の修正を与えることができる。',
            '加護。そのプライズの所持者は、自分が集団戦ダメージを受けた時、それを射撃戦ダメージに変更することができる。',
            '記憶。そのプライズの所持者は、ランダムに選んだ特技1種を所持しているものとして扱う。',
            '業物。そのプライズの所持者は、もう1つ【接近戦攻撃】の忍法を特例修得する。その指定特技は、プライズを獲得した時に、獲得したキャラクターが設定することができる。',
            '呪詛。さらに2回「プライズ効果表」を振り、その2つの効果をあわせ持つ。このプライズの所持者は、サイクルの終了時に、1点の接近戦ダメージを受ける。'
          ]
        ),
        ## 以下流派ブック
        'BNT' => DiceTable::Table.new(
          '戦場新効果表',
          '1D6',
          [
            '平地　甲：特になし。／乙：この戦場では、射撃戦の命中判定にプラス１の修正がつく。',
            '水中　甲：この戦場では、回避判定にマイナス２の修正がつく。／乙：この戦場では、判定でスペシャルしても【生命力】が回復する効果は発生しない。',
            '高所　甲：この戦場でファンブルすると接近戦ダメージを１点受ける。／乙：この戦場では、各ラウンドに使用できる忍法のコストの最大値が１減少する。',
            '悪天候　甲：この戦場ではすべての攻撃忍法の間合が１上昇する。／乙：この戦場では、サポート忍法の指定特技の判定にマイナス２の修正がつく。',
            '雑踏　甲：この戦場では、行為判定のとき、ファンブル値が１上昇する。／乙：この戦場では、奥義破り判定にマイナス１の修正がつく。',
            '極地　甲：ゲームマスターは、ラウンドの終わりに１Ｄ６を振る。戦闘開始時からの経過ラウンド以下の目が出ると、この戦場にいると、接近戦ダメージを１点受ける。この戦場から脱落した者は、１Ｄ６を振り、変調表の結果を適用すること。／乙：この戦場でファンブルすると集団戦ダメージを１点受ける。'
          ]
        ),
        'YWT' => DiceTable::Table.new(
          '妖術変調対応表（現代／戦国）',
          '1D6',
          [
            '器術：故障（現代）／催眠（戦国）',
            '体術：マヒ（現代）／火達磨（戦国）',
            '忍術：重傷（現代）／猛毒（戦国）',
            '謀術：行方不明（現代）／飢餓（戦国）',
            '戦術：忘却（現代）／残刃（戦国）',
            '妖術：呪い（現代）／野望（戦国）'
          ]
        ),
        'YWT1' => DiceTable::Table.new(
          '妖術変調対応表（現代）',
          '1D6',
          [
            '器術：故障',
            '体術：マヒ',
            '忍術：重傷',
            '謀術：行方不明',
            '戦術：忘却',
            '妖術：呪い'
          ]
        ),
        'YWT2' => DiceTable::Table.new(
          '妖術変調対応表（戦国）',
          '1D6',
          [
            '器術：催眠',
            '体術：火達磨',
            '忍術：猛毒',
            '謀術：飢餓',
            '戦術：残刃',
            '妖術：野望'
          ]
        ),
        ## 誤字修正（異形態→異霊態）
        'NMT' => DiceTable::ChainTable.new(
          "新異形表",
          '1D6',
          [
            DemonSkillTableForMetamorphose.new(
              '異霊態。「妖魔忍法表・異霊」を使用し、妖魔化している間、その妖魔忍法を修得する。', DEMON_SKILL_TABLES_NEW['DSN1']
            ),
            DemonSkillTableForMetamorphose.new(
              '凶身態。「妖魔忍法表・凶身」を使用し、妖魔化している間、その妖魔忍法を修得する。', DEMON_SKILL_TABLES_NEW['DSN2']
            ),
            DemonSkillTableForMetamorphose.new(
              '神化態。「妖魔忍法表・神化」を使用し、妖魔化している間、その妖魔忍法を修得する。', DEMON_SKILL_TABLES_NEW['DSN3']
            ),
            DemonSkillTableForMetamorphose.new(
              '攻激態。「妖魔忍法表・攻激」を使用し、妖魔化している間、その妖魔忍法を修得する。', DEMON_SKILL_TABLES_NEW['DSN4']
            ),
            '業魔態。妖魔化している間、戦闘中、各ラウンドに使用できる忍法のコストの合計が、自分のプロット値＋３点になり、装備忍法の【揺音】（基本 p85）を修得する。',
            '不視態。妖魔化している間、このキャラクターの攻撃に対する回避判定と、このキャラクターの奥義に対する奥義破り判定にマイナス１の修正がつく。'
          ]
        ),
        'NMTR' => DiceTable::Table.new(
          "新異形表",
          '1D6',
          [
            '異霊態。「妖魔忍法表・異霊」を使用し、妖魔化している間、その妖魔忍法を修得する。',
            '凶身態。「妖魔忍法表・凶身」を使用し、妖魔化している間、その妖魔忍法を修得する。',
            '神化態。「妖魔忍法表・神化」を使用し、妖魔化している間、その妖魔忍法を修得する。',
            '攻激態。「妖魔忍法表・攻激」を使用し、妖魔化している間、その妖魔忍法を修得する。',
            '業魔態。妖魔化している間、戦闘中、各ラウンドに使用できる忍法のコストの合計が、自分のプロット値＋３点になり、装備忍法の【揺音】（基本 p85）を修得する。',
            '不視態。妖魔化している間、このキャラクターの攻撃に対する回避判定と、このキャラクターの奥義に対する奥義破り判定にマイナス１の修正がつく。'
          ]
        ),
        'OTS' => DiceTable::Table.new(
          '【数奇】（御斎 p33）',
          '1D6',
          [
            '「兵糧丸」を一個獲得する。',
            '「神通丸」を一個獲得する。',
            '「遁甲符」を一個獲得する。',
            '戦場を好きな場所に変更する。',
            'その戦闘の間、あらゆる判定にプラス１の修正がつく。この効果は累積しない。',
            'その戦闘の間、あらゆる判定のスペシャル値が１減少する。この効果は累積しない。'
          ]
        ),
        'HRPT' => DiceTable::Table.new(
          'パニック表',
          '2D6',
          [
            'この混乱に乗じて、勢力を拡大する者が現れる。GMは、シナリオに設定されているNPCの中から、この忍災を引き起こした者に敵対する者を一人選ぶ。そのNPCは、そのセッションの間、追加の【生命力】とそのスロットを１点獲得する。シナリオにそうしたNPCな設定されていなかった場合、この忍災を引き起こした者以外のPCの中から、ランダムにPC一人を選ぶ。そのPCはそのセッションの間、追加の【生命力】とそのスロットを１点獲得する。この効果は累積する。',
            'パニックは拡大し、国際問題に発展する。日本の国益が大きく損なわれる。比良坂機関か、その下位流派に所属するPCは「功績点の獲得」のタイミングで自動的に流儀の達成に失敗したものとする。',
            '忍災の影響が忍びの世にも及び、この事態を引き起こした人物の責任問題に発展する。今回のセッションで【使命】（【本当の使命】がある場合はそちら）を達成出来なかったPCは「忍務失敗表」（基本 p71）を一回使用する。',
            '人々の間で根も葉もない噂が蔓延し、世相が暗くなる。そのセッションのドラマシーンの間、PC全員はあらゆる判定にマイナス１の修正がつく。',
            '忍災やパニックの犠牲者が復讐者に変わる。そのセッションのドラマシーンの間、PC全員は判定に失敗すると１点の接近戦ダメージを受ける。',
            '人々のパニックは暴動に発展する。そのセッションのドラマシーンの間、PC全員は判定に失敗すると１点の射撃戦ダメージを受ける。',
            '多くの犠牲が生まれ、人々の怒りが政府や忍者に向かう。そのセッションのドラマシーンの間、PC全員は判定に失敗すると１点の集団戦ダメージを受ける。',
            '人々は忍者の実在を信じ始め、その正体を探ろうとする者が現れる。そのサイクルの間、PC全員はあらゆる判定のファンブル値が１上昇する。',
            '上層部からしばらく大人しくしているよう厳命がくだる。そのサイクルの間、修得している攻撃忍法とサポート忍法のコストが１点上昇する（コストが「なし」のものは１になる）。',
            'パニックが波及し、忍者たちは家族、友情、自信、存在意義など、それぞれ大切なものを喪失する。そのセッションの間、PC全員は、判定の結果スペシャルになっても【生命力】１点か変調を回復する効果が発生しなくなる。',
            '忍災の結果、PCたちに不信の目が向けられる。そのセッションに登場するキャラクターのうち、忍災を引き起こしたPCに対してプラスの【感情】を獲得している者は、その【感情】をマイナスの何かに変化する（この効果が無効化されると、元の【感情】の種類に戻る）。'
          ]
        ),
        'OTAT' => DiceTable::Table.new(
          '覚醒表',
          '1D6',
          [
            '自分の力が急に恐ろしくなる。好きな覚醒済みデータを一つ選び、それを未覚醒データに変更する。',
            '自分の力が暴走し、周囲に被害を与える。そのシーンに登場しているキャラクター全員（自分含む）に射撃戦ダメージを１点与える。',
            '覚醒に伴い、身体の形が変化する。未覚醒忍法の中からランダムに一つを選び、それを覚醒済み忍法にする。',
            '忍者の血に目覚め、力の制御方法が理解出来るようになる。好きな未覚醒忍法を一つを選び、それを覚醒済み忍法にする。',
            '自分だけが操ることが出来る独自の力に目覚める。好きな未覚醒奥義一つを選び、それを覚醒済みの奥義にする。',
            '自分の脳に直接何かが囁きかける。集団戦ダメージを１点受けると、好きな未覚醒データの中から一つ選び、それを覚醒済みデータに変更することができる。退魔編であれば、集団戦ダメージを受ける代わりに妖魔化することで、好きな未覚醒データの中から一つ選び、それを覚醒済みデータに変更することができる。'
          ]
        ),
        'ONDT' => DiceTable::Table.new(
          '出物表',
          '2D6',
          [
            '翼手 (基本 p175)／解剖刀 (隠忍 p31)',
            '幽命丹 (基本 p174)／魔界樹 (隠忍 p30)',
            '顔無の面 (基本 p174)／龍鱗 (隠忍 p30)',
            '落仔 (基本 p174)／蟲獲箱 (隠忍 p30)',
            '骨刃 (基本 p174)／魔血図 (隠忍 p30)',
            '死霊粉 (基本 p174)／蒼角 (隠忍 p30)',
            '潮満珠 (基本 p174)／屍人形 (隠忍 p30)',
            '生体銃 (基本 p174)／投幻香 (隠忍 p30)',
            '妖皮紙 (基本 p174)／渡来の干首 (隠忍 p30)',
            '神面瘡 (基本 p174)／眠り砂 (隠忍 p30)',
            '外法炉 (基本 p175)／餓鬼魂 (隠忍 p31)'
          ]
        ),
        ## 忍法授業シーン表（シナリオとは無関係なためこちらに記載）
        'NCT1' => DiceTable::Table.new(
          '攻撃系忍法授業シーン表',
          '1D6',
          [
            "\n接近戦闘学：《刀術》《野戦術》\n【笹貫】(基本 p78)／【天道】(基本 p102)／【新理】(御斎 p34)／好きな体術\n\n御斎学園の敷地内にある森林、御斎林での授業。刃のついた近接武器のみを使って、ターゲットのベテラン教師を倒さなければならない。有利な地形で戦うこと、ターゲットの使う伝統的な技を理解することなどが重要。",
            "\n射撃戦闘学：《砲術》《見敵術》\n【必中】(基本 p79)／【文曲】(基本 p103)／【魔弓】(御斎 p33)／好きな器術\n\n地上十階建てから平屋まで、様々な高さの建物が並ぶ部室棟周囲で行われる。弓やスリング、拳銃、ライフルなどあらゆる武器を使って、潜伏している標的を発見、撃破を目指す。相手の移動先を予測する方法や、移動を妨げる方法なども学ぶ。",
            "\n集団戦闘学：《野戦術》《用兵術》\n【追撃】(基本 p80)／【伏兵】(基本 p102)／【武曲】(基本 p103)／好きな戦術\n\n御斎学園で最も高い場所のひとつ、大時計台の上で行う。地上にいる下級生に指示を出してターゲットを妨害させる。不意打ちさせる、毒を盛らせる、悪い噂を流させるなど、下級生たちを通して配下の効果的運用を知る授業。",
            "\n高速戦闘学：《骨法術》《意気》\n【連撃】(基本 p81)／【風饗】(基本 p81)／【噴足】(御斎 p33)／好きな忍術\n\n地下武道場での授業。一対一での素手による組み手を中心に、攻撃を当てるためにはどうすればいいのか、攻撃を仕掛けた後にどう動くことが効果的なのかなどを教わっていく。また長時間行うことで気力も試される。",
            "\n戦闘物理学：《仕込み》《記憶術》\n【痛打】(基本 p83)／【飢渇】(基本 p84)／【早乙女】(基本 p102)／好きな器術\n\n自身が持つ攻撃方法をより確実にする手段について学ぶ。座学を中心とした授業。武器の威力を高める、時間をかけることで標的を焦らせる、どこにいるかを把握するなどの方法を知ることができる。",
            "\n殺戮力学：《野戦術》《言霊術》\n【蛮歌】(基本 p82)／【共闘】(御斎 p33)／【天槍】(御斎 p33)／好きな妖術\n\n複数の班に別れて、別の班を敵対者と見なして行うグループ学習。協力しての戦い方、対象の負の感情をあおる話術に加え、地形と妖術を利用した相手を害する呪文などが講義内容に含まれる。"
          ]
        ),
        'NCT2' => DiceTable::Table.new(
          '防御系忍法授業シーン表',
          '1D6',
          [
            "\n人体護身学：《衣装術》《地の利》\n【御斎魂】(基本 p102)／【衣換】(御斎 p34)／【自警】(御斎 p36)／好きな体術\n\n通常授業中に、指導教諭から攻撃を受ける。一般生徒に気付かれてはいけないため耐える方法、受け流す方法を学ぶことができる。単なる身体能力ではなく、地形や装備の利用方法を学ぶことを重視して評価される。",
            "\n警備防衛学：《分身の術》《暗号術》\n【かばう】(基本 p81)／【護衛】(基本 p81)／【陽動】(基本 p102)／好きな忍術\n\n広大な御斎学園の敷地全体を使った授業。指定されたターゲットの元にすぐさま赴き、授業終了時まで、護衛しなければならない。自分の動きだけでなく、護衛対象に的確な指示を出すこと、その指示を襲撃者に読み取らせないようにする方法も学習できる。",
            "\n特殊回避学：《手練》《地の利》\n【矢止めの術】(基本 p82)／【返し技】(基本 p82)／【身かわしの術】(基本 p83)／好きな戦術\n\n広大な大グラウンドでの授業。目隠し状態で、手裏剣、苦無、弓、拳銃やライフルといった中距離遠距離からの攻撃を受ける。単にかわすだけではなく、攻撃そのものを失敗させる、飛来物を打ち返すなど、攻撃者に対処する方法を学ぶ。",
            "\n忍法療法学：《対人術》《兵糧術》\n【毒飼】(基本 p81)／【仙食】(基本 p102)／【説教】(基本 p104)／好きな謀術\n\n学生寮の談話室、食堂などを使用して行う。コミュニケーションによって仲間の気力やモチベーションを回復する方法を学ぶ授業。会話のみならず、飲食物や金銭といった報酬の利用方法なども学習内容に含まれている。",
            "\n生存訓練学：《生存術》《意気》\n【頑健】(基本 p84)／【達人】(基本 p84)／【鋭気】(御斎 p33)／好きな体術\n\n御斎学園の所有する樹海、御斎樹海での実地授業。樹海には様々な罠が張り巡らされ、忍獣が解き放たれている。生徒たちはランダムな場所に投下され、ゴール地点を目指す。",
            "\n対抗忍法学：《騎乗術》《暗号術》\n【騎馬】(基本p81)／【破術】(基本p82)／【作戦指揮】(基本p83)／好きな忍術\n\n学園一の蔵書数を誇る御斎第五図書館を利用する、二人一組でチームを組み、それぞれの忍法の利用方法、対処方法を図書館で調べた後に、移動して実践を行う。相手の有利な場所をいかに避けるかも重要。"
          ]
        ),
        'NCT3' => DiceTable::Table.new(
          '戦略系忍法授業シーン表',
          '1D6',
          [
            "\n情報戦略学：《記憶術》《千里眼の術》\n【占術】(基本 p82)／【暗業】(御斎 p34)／【分析】(御斎 p36)／好きな謀術\n\n生徒たちが制作した絵画が飾られた、旧校舎美術室での実習授業。絵画には怪異が関係した忍務で命を落とした生徒の伝言をはじめ、様々なメッセージが残されている。見つけだす方法、読み解く方法、その上でどう利用するかについて学習する。",
            "\n諜報心理学：《対人術》《伝達術》\n【感情操作】(基本p83)／【伝心】(御斎p33)／【柔気】(御斎p33)／好きな謀術\n\nコンサートなどにも利用される御斎記念音楽ホールを使用する。音楽鑑賞中の一般生徒たちの中から一人を指名され、その人物に好意を持たせたり指示を伝えたり物品を受け渡したりする実習を行う。",
            "\n高速機動学：《盗聴術》《異形化》\n【無拍子】(基本 p81)／【覚悟】(基本 p82)／【武曲】(基本 p104)／好きな戦術\n\n遠心力を利用した高負荷の過重力環境室において、高速機動を自分のものにするための授業を受ける。反復訓練により身体能力を拡張し、高速機動中に発生する光の屈折・分散によるプリズム効果に脳を適応させる。",
            "\n戦場構築学：《騎乗術》《地の利》\n【誘導】(基本 p82)／【戦場の極意】(基本 p102)／【安地】(御斎 p33)／好きな戦術\n\n自身にとって有利な地形や状況を見つけだし、戦いの場をそこに導くための方法を学ぶ。自転車、バイク、自動車、騎馬の使用をはじめ、学園内のヘリポートや輸送用列車、秘密地下通路の利用も許可されている。",
            "\n妨害環境学：《地の利》《封術》\n【霾天】(基本 p103)／【大火】(御斎 p34)／【氷楔】(御斎 p34)／好きな妖術\n\n大サウナ室、大食堂付属の冷凍室、強風で知られる御斎砂丘を利用して、高温や低温環境、視界を妨げる場所など、悪環境での戦い方を学ぶ授業。単なる地形や天候に留まらず、学園所属の半妖により、妖力で発生する状況も体験する。",
            "\n業子力学：《鳥獣術》《呪術》\n【神通力】(基本 p82)／【数奇】(御斎 p33)／【三星】(御斎 p33)／好きな妖術\n\n御斎学園専用ネットワークを使用したオンライン授業。巫女や呪術師を講師とし、人ならざるものの力を借りる、呪術を使うなどして、運命に介入し、自分にとって都合のよい方向に引き寄せる理論を学び尽くす。"
          ]
        )
      }.freeze
      # シーン表
      SCENE_TABLES = {
        ## 以下シーン表
        'ST' => DiceTable::Table.new(
          'シーン表',
          '2D6',
          [
            '血の臭いがあたりに充満している。何者かの戦いがあった気配。　いや？まだ戦いは続いているのだろうか？',
            'これは……夢か？　もう終わったはずの過去。しかし、それを忘れることはできない。',
            '眼下に広がる街並みを眺める。ここからなら街を一望できるが……。',
            '世界の終わりのような暗黒。暗闇の中、お前達は密やかに囁く。',
            '優しい時間が過ぎていく。影の世界のことを忘れてしまいそうだ。',
            '清廉な気配が漂う森の中。鳥の囀りや、そよ風が樹々を通り過ぎる音が聞こえる。',
            '凄まじい人混み。喧噪。影の世界のことを知らない無邪気な人々の手柄話や無駄話が騒がしい。',
            '強い雨が降り出す。人々は、軒を求めて、大慌てて駆けだしていく。',
            '大きな風が吹き荒ぶ。髪の毛や衣服が大きく揺れる。何かが起こりそうな予感……',
            '酔っぱらいの怒号。客引きたちの呼び声。女たちの嬌声。いつもの繁華街の一幕だが。',
            '太陽の微笑みがあなたを包み込む。影の世界の住人には、あまりにまぶしすぎる。',
          ]
        ),
        'CST' => DiceTable::Table.new(
          '都市シーン表',
          '2D6',
          [
            'シャワーを浴び、浴槽に疲れた身体を沈める。時には、癒しも必要だ。',
            '閑静な住宅街。忍びの世とは関係のない日常が広がっているようにも見えるが……それも錯覚なのかもしれない',
            '橋の上にたたずむ。川の対岸を結ぶ境界点。さて、どちらに行くべきか……？',
            '人気のない公園。野良猫が一匹、遠くからあなたを見つめているような気がする。',
            '至福の一杯。この一杯のために生きている……って、いつも言ってるような気がするなぁ。',
            '無機質な感じのするオフィスビル。それは、まるで都市の墓標のようだ。',
            '古びた劇場。照明は落ち、あなたたちのほかに観客の姿は見えないが……。',
            '商店街を歩く。人ごみに混じって、不穏な気配もちらほら感じるが……。',
            'ビルの谷間を飛び移る。この街のどこかに、「アレ」は存在するはずなのだが……。',
            '見知らぬ天井。いつの間にか眠っていたのだろうか？それにしてもここはどこだ？',
            '廃屋。床には乱雑に壊れた調度品や器具が転がっている。',
          ]
        ),
        'MST' => DiceTable::Table.new(
          '館シーン表',
          '2D6',
          [
            'どことも知れぬ暗闇の中。忍びの者たちが潜むには、おあつらえ向きの場所である。',
            '洋館の屋根の上。ここからなら、館の周りを一望できるが……。',
            '美しい庭園。丹精こめて育てられたであろう色とりどりの花。そして、綺麗に刈り込まれた生垣が広がっている。',
            'あなたは階段でふと足を止めた。何者かの足音が近づいているようだ。',
            'あなたに割り当てられた寝室。ベッドは柔らかく、調度品も高級なものばかりだが……。',
            'エントランスホール。古い柱時計の時報が響く中、館の主の肖像画が、あなたを見下ろしている。',
            '食堂。染み一つないテーブルクロスに覆われた長い食卓。その上は年代物の燭台や花で飾られている。',
            '長い廊下の途中。この屋敷は広すぎて、迷子になってしまいそうだ。',
            '戯れに遊戯室へ入ってみた。そこには撞球台やダーツの的、何組かのトランプが散らばっているポーカーテーブルがあった。',
            'かび臭い図書室。歴代の館の主たちの記録や、古今東西の名著が、ぎっしりと棚に並べられている。',
            '一族の納骨堂がある。冷気と瘴気に満ちたその場所に、奇妙な叫びが届く。遠くの鳥のさえずりか？それとも死者の恨みの声か……？',
          ]
        ),
        'DST' => DiceTable::Table.new(
          '出島シーン表',
          '2D6',
          [
            '迷宮街。いつから囚われてしまったのだろう？何重にも交差し、曲がりくねった道を歩き続ける。このシーンの登場人物は《記憶術》で判定を行わなければならない。成功すると、迷宮の果てで好きな忍具を一つ獲得する。失敗すると、行方不明の変調を受ける。',
            '幻影城。訪れた者の過去や未来の風景を見せる場所。このシーンの登場人物は、《意気》の判定を行うことができる。成功すると、自分の持っている【感情】を好きな何かに変更することができる。',
            '死者たちの行進。無念の死を遂げた者たちが、仲間を求めて彷徨らっている。このシーンの登場人物は《死霊術》で判定を行わなければならない。失敗すると、ランダムに変調を一つを受ける。',
            'スラム。かろうじて生き延びている人たちが肩を寄せ合い生きているようだ。ここなら辛うじて安心できるかも……。',
            '落書きだらけのホテル。その周囲には肌を露出させた女や男たちが、媚態を浮かべながら立ち並んでいる。',
            '立ち並ぶ廃墟。その影から、人とも怪物ともつかぬ者の影が、あなたの様子をじっとうかがっている。',
            '薄汚い路地裏。巨大な黒犬が何かを貪っている。あなたの気配を感じて黒犬は去るが、そこに遺されていたのは……。',
            '昏い酒場。バーテンが無言でグラスを磨き続けている。あなたの他に客の気配はないが……。',
            '地面を覆う無数の瓦礫。その隙間から暗黒の瘴気が立ち昇る。このシーンの登場人物は《生存術》で判定を行わなければならない。失敗すると、好きな【生命力】を１点失う。',
            '熱気溢れる市場。武器や薬物などを売っているようだ。商人たちの中には、渡来人の姿もある。このシーンの登場人物は、《経済力》で判定を行うことができる。成功すると、好きな忍具を一つ獲得できる。',
            '目の前に渡来人が現れる。渡来人はあなたに興味を持ち、襲い掛かってくる。このシーンの登場人物は《刀術》で判定を行わなければならない。成功すると、渡来人を倒し、好きな忍具を一つ獲得する。失敗すると、３点の接近戦ダメージを受ける。',
          ]
        ),
        'TST' => DiceTable::Table.new(
          'トラブルシーン表',
          '2D6',
          [
            '同行者とケンカしてしまう。うーん、気まずい雰囲気。',
            'バシャ！　同行者のミスでずぶ濡れになってしまう。……冷たい。',
            '敵の気配に身を隠す。……すると、同行者の携帯が着信音を奏で始める。「……えへへへへ」じゃない！',
            '同行者の空気の読めない一言。場が盛大に凍り付く。まずい。何とかしないと。',
            '危機一髪！　同行者を死神の魔手から救い出す。……ここも油断できないな。',
            '同行者が行方不明になる。アイツめ、どこへ逃げたッ！',
            'ずて────ん！　あいたたたた……同行者がつまずいたせいで、巻き込まれて転んでしまった。',
            '同行者のせいで、迷子になってしまう。困った。どこへ行くべきか。',
            '「どこに目つけてんだ、てめぇ！」同行者がチンピラにからまれる。うーん、助けに入るべきか。',
            '！　油断していたら、同行者に自分の恥ずかしい姿を見られてしまう。……一生の不覚！',
            '同行者が不意に涙を流す。……一体、どうしたんだろう？',
          ]
        ),
        'NST' => DiceTable::Table.new(
          '日常シーン表',
          '2D6',
          [
            'っくしゅん！　……うーん、風邪ひいたかなあ。お見舞いに来てくれたんだ。ありがとう。',
            '目の前のアイツは、見違えるほどドレスアップしていた。……ゆっくりと大人な時間が過ぎていく。',
            'おいしそうなスイーツを食べることになる。たまには甘いものを食べて息抜き息抜き♪',
            'ふわわわわ、いつの間にか寝ていたようだ。……って、あれ？　お前、いつからそこにいたッ!!',
            '買い物帰りの友人と出会う。方向が同じなので、しばらく一緒に歩いていると、思わず会話が盛り上がる。',
            'コンビニ。商品に手を伸ばしたら、同時にその商品をとろうとした別の人物と手が触れあう。なんという偶然！',
            'みんなで食卓を囲むことになる。鍋にしようか？　それとも焼き肉？　お好み焼きなんかもい〜な〜♪',
            'どこからか楽しそうな歌声が聞こえてくる。……って、あれ？　何でお前がこんなところに？',
            '野良猫に餌をやる。……猫はのどを鳴らし、すっかりあなたに甘えているようだ。',
            '「……！　……？　……♪」テレビは、なにやら楽しげな場面を映している。あら。もう、こんな時間か。',
            '面白そうなゲーム！　誰かと対戦することになる。GMは、「戦術」からランダムに特技1つを選ぶ。このシーンに登場しているキャラクターは、その特技の判定を行う。成功した場合、同じシーンに登場しているキャラクターを1人を選び、そのキャラクターの自分に対する【感情】を好きなものに変更する（何の【感情】も持っていない場合、好きな【感情】を芽生えさせる）。',
          ]
        ),
        'TKST' => DiceTable::Table.new(
          '東京シーン表',
          '2D6',
          [
            'お台場、臨界副都心。デート中のカップルや観光客が溢れている。',
            '靖国神社。東京の中とも思えぬ、緑で満ちた場所だ。今は観光客もおらず、奇妙に静かだ……。',
            '東京大学の本部キャンパス。正門から伸びる銀杏並木の道を学生や教職員がのんびりと歩いている。道の向こうには安田講堂が見える。',
            '山手線の中。乗車率200％を超える、殺人的な通勤ラッシュ真っ最中。この中でできることは限られている……。',
            '霞が関。この場に集う情報は、忍者にとっても価値が高いものだ。道を行く人々の中にも、役人や警察官が目につく。',
            '渋谷駅前の雑踏。大型屋外ヴィジョンが見下ろす中で、大勢の若者たちが行き交っている。',
            '夜の新宿歌舞伎町。酔っぱらったサラリーマン、華やかな夜の蝶、明らかに筋ものと判る男、外国人などの様々な人間と、どこか危険な雰囲気に満ちている。',
            '新宿都庁。摩天楼が林立するビル街の下、背広姿の人々が行き交う。',
            '神田古書街。多くの古書店が軒を連ねている。軒先に積まれた本の山にさえ、追い求める謎や、深遠な知識が埋もれていそうな気がする。',
            '山谷のドヤ街。日雇い労働者が集う管理宿泊施設の多いこの場所は、身を隠すにはうってつけだ。',
            '東京スカイツリーの上。この場所からならば東京の町が一望できる。',
          ]
        ),
        'KST' => DiceTable::Table.new(
          '回想シーン表',
          '2D6',
          [
            '闇に蔓延する忍びの気配。あのときもそうだった。手痛い失敗の記憶。今度こそ、うまくやってみせる。',
            '甘い口づけ。激しい抱擁。悲しげな瞳……一夜の過ちが思い返される。',
            '記憶の中でゆらめくセピア色の風景。……見覚えがある。そう、私はここに来たことがあるはずだッ!!',
            '目の前に横たわる死体。地面に広がっていく。あれは、私のせいだったのだろうか……？',
            'アイツとの大切な約束を思い出す。守るべきだった約束。果たせなかった約束。',
            '助けを求める右手が、あなたに向かってまっすぐ伸びる。あなたは、必死でその手を掴もうとするが、あと一歩のところで、その手を掴み損ねる……。',
            'きらきらと輝く笑顔。今はもう喪ってしまった、大事だったアイツの笑顔。',
            '恐るべき一撃！　もう少しで命を落とすところだった……。しかし、あの技はいまだ見切れていない。',
            '幼い頃の記憶。仲の良かったあの子。そういえば、あの子は、どこに行ってしまったのだろう。もしかして……。',
            '「……ッ!!」激しい口論。ひどい別れ方をしてしまった。あんなことになると分かっていたら……。',
            '懐の中のお守りを握りしめる。アイツにもらった、大切な思い出の品。「兵糧丸」を1つ獲得する。',
          ]
        ),
        'GST' => DiceTable::Table.new(
          '戦国シーン表',
          '2D6',
          [
            '炎上する山城。人々の悲鳴や怒号がこだましている。どうやら、敵対する武将による焼き討ちらしい。今ならば、あるいは……。',
            '荒れ果てた村。カラスの不吉な鳴き声が聞こえてくる中で、やせ細った村人たちが、うつろな瞳でこちらを伺っている。',
            '人気のない山道。ただ鳥の声だけが響いている。通りがかった人を襲うのには、好都合かもしれない。',
            '乾いた骸の転がる合戦後。生き物の姿はなく、草の一本さえも生えていない。落ち武者たちの恨みがましい声が聞こえてきそうだ……。',
            '不気味な気配漂う森の中。何か得体のしれぬものが潜んでいそうだ。',
            '荒れ果てた廃寺。ネズミがカサカサと這いまわる本堂の中を、残された本尊が見下ろしている。',
            '街道沿いの宿場町。戦から逃げてきたらしい町人や、商売の種を探す商人、目つきの鋭い武士などが行き交い、賑わっている。',
            '城の天守閣のさらに上。強く吹く風が、雲を流していく。',
            '館の天井裏。この下では今、何が行われているのか……。',
            '合戦場に設けられた陣内。かがり火がたかれ、武者たちが酒宴を行っている。',
            '戦の真っただ中にある合戦場。騎馬にまたがった鎧武者が駆け抜けていく。勝者となるのは、いずれの陣営だろうか。',
          ]
        ),
        'GAST' => DiceTable::Table.new(
          '学校シーン表',
          '2D6',
          [
            '清廉な気配が漂う森の中。鳥のさえずりやそよ風が木々を通りすぎる音が聞こえる。',
            '学校のトイレ。……なんだか少しだけ怖い気がする。',
            '誰もいない体育館。バスケットボールがころころと転がっている。',
            '校舎の屋上。一陣の風が吹き、衣服をたなびかせる。',
            '校庭。体操服姿の生徒たちが走っている。',
            '廊下。休憩時間か放課後か。生徒たちが、楽しそうにはしゃいでいる。',
            '学食のカフェテリア。生徒たちがまばらに席につき、思い思い談笑している。',
            '静かな授業中の風景。しかし、忍術を使って一般生徒に気取られない会話をしている忍者たちもいる。',
            '校舎と校舎をつなぐ渡り廊下。あなた以外の気配はないが……。',
            '特別教室。音楽室や理科室にいるのってなんか楽しいよね。',
            'プール。水面が、ゆらゆら揺れている。',
          ]
        ),
        'KYST' => DiceTable::Table.new(
          '京都シーン表',
          '2D6',
          [
            '夜の街並み。神社仏閣はライトアップされ、にぎやかな酔客が通りを埋める。昼間とはまた違った景色が広がっている。',
            '京都駅ビル。その屋上は、京都市で最も高く、周囲を一望できる。',
            '旅館で一休み。……のはずが、四方山話に花が咲く。',
            '鴨川のあたりを歩いている。カップルが均等に距離を置いて座っているのが面白い。',
            '京都はどこにでもおみやげ物屋があるなぁ。さて、あいつに何を買ってやるべきか……？',
            '「神社仏閣シーン表(JBST)」で決定。',
            '新京極でお買い物。アーケードには、新旧様々な店が建ち並ぶ。',
            '大学が近くにあるのかな？　安い定食屋や古本屋、ゲームセンターなどが軒を連ねる学生街。京都はたくさん大学があるなぁ。',
            '静かな竹林。凛とした気配が漂う。',
            '祇園。時折、しずしずと歩く舞妓さんとすれ違う。雰囲気のある町並みだ。',
            '一般公開された京都御所の中を歩く。昼間だというのに人通りはあまりなく、何だか少し寂しい気持ち。',
          ]
        ),
        'JBST' => DiceTable::Table.new(
          '神社仏閣シーン表',
          '2D6',
          [
            '清明神社。一条戻り橋を越えたところにある小さな社。陰陽師に憧れる女性たちの姿が目立つ。',
            '東寺。東寺真言宗総本山。密教独特の厳しい気配が漂う。',
            '平安神宮。大鳥居を白無垢の花嫁行列がくぐり抜けていくのが見える。どうやら結婚式のようだ。',
            '慈照寺――通称、銀閣寺。室町後期の東山文化を代表する建築である。錦鏡池を囲む庭園には、物思いにふける観光客の姿が……。',
            '鹿苑寺――通称、金閣寺。室町前期の北山文化を代表する建築である。鏡湖池に映る逆さ金閣には、強力な「魔」を封印していると言うが……？',
            '三十三間堂。荘厳な本堂に立ち並ぶ千一体の千手観音像は圧巻。',
            '清水寺。清水坂を越え、仁王門を抜けると、本堂――いわゆる清水の舞台にたどり着く。そこからは、音羽の滝や子安塔が見える。',
            '八坂神社。祇園さんの名前で知られるにぎやかな神社。舞妓さんの姿もちらほら。',
            '伏見稲荷。全国約四万社の稲荷神社の総本宮。稲荷山に向かって立ち並ぶ約一万基の鳥居は、まるで異界へと続いているかのようだ……。',
            '化野念仏寺。無数の石塔、石仏が立ち並ぶ景色は、どこか荒涼としている……。',
            '六道珍皇寺。小野篁が冥界に通ったとされる井戸のある寺。この辺りは「六道の辻」と呼ばれ、不思議な伝説が数多く残っている。',
          ]
        ),
        'AKST' => DiceTable::Table.new(
          '秋空に雪舞えばシーン表',
          '2D6',
          [
            'どこから紛れ込んできたのか。シーンプレイヤーが1D6を振って3以下ならナタを持った少女、4以上なら冬篭りに備えた熊が襲ってくる。シーンに登場したキャラクターは、少女なら《刀術》・熊なら《鳥獣術》で判定し、失敗すると接近戦ダメージを1点受ける。',
            '3:暗い夜の森の中、月明かりのみが周囲を照らす。忍が動くにはいい時間だ。',
            '4:秋晴れの下、両脇で黄金色の稲穂が風に靡く道。刈り取りを控えたこの短い間にしか見る事の出来ない貴重な光景だ。',
            '5:美味しそうな果実がたわわに実っている。一つくらい取って行ってもバチは当たらないだろう…。',
            '6:山中に続く林道。勾配の厳しい道から、紅葉が浮かび流れる穏やかな川が見下ろせる。',
            '7:村の広場。山や田畑が一望できる。波打つ稲穂の絨毯、山々には紅葉。秋を感じるひと時だ。',
            '8:パチパチと爆ぜる音。どうやら籾殻で焚き火をしているらしい。少し暖まっていこうか。',
            '9:神秘的な神社。祭りの準備が進められているが、今は人がいないようだ。',
            'ひと雨きそうな午後。重たい空気にキンモクセイがつと香る。',
            '草に埋もれ、崩れかけの古い空き家。どこか物悲しさを感じる。',
            'カツーン、カツーン、誰かが丑の刻参りをしている音が聞こえる。シーンに登場したキャラクターは《呪術》で判定し、成功すると誰かに《呪い》の変調を与えることができる。失敗すると《呪い》の変調を受ける。',
          ]
        ),
        'CLST' => DiceTable::Table.new(
          '災厄シーン表',
          '1D6',
          [
            '瘴気に晒され続けたことであなたの身体が妖魔へと変貌する。《封術》の判定に失敗したシーンプレイヤーは、背景：劣勢因子と背景：魔人を獲得する。',
            '妖魔があなたに従属を強いる。やつが掲げた手の中には…。《遁走術》の判定に失敗したシーンプレイヤーは、背景：人質と兵糧丸１つを獲得する。',
            '妖魔の群れに捕まった！独力での包囲網突破のために君の体は限界を迎えようとしていた。《拷問術》の判定に失敗したシーンプレイヤーは、背景：侵食と神通丸１つを獲得する。',
            '戦いの激化はあなたの体を蝕む。《医術》の判定に失敗したシーンプレイヤーは、背景：病魔と神通丸１つを獲得する。',
            '下級妖魔を束ねたボスが、新たなる力を手に入れようとしている。シーンプレイヤーが《見敵術》の判定に失敗した場合、ボスに対してエニグマ：『秘奥義』が公開状態で追加される。',
            '力なき者が生き残ることは出来ない。ボスが新たな力を手に入れようとしている。シーンプレイヤーが《怪力》の判定に失敗した場合、ボスに対してエニグマ：『八面六臂』が公開状態で追加される。',
          ]
        ),
        'DXST' => DiceTable::Table.new(
          '出島EXシーン表',
          '2D6',
          [
            '迷宮街。いつから囚われてしまったのだろう？何重にも交差し、曲がりくねった道を歩き続ける。このシーンの登場人物は《記憶術》で判定を行わなければならない。成功すると、迷宮の果てで好きな忍具を一つ獲得する。失敗すると、行方不明の変調を受ける。',
            '幻影城。訪れた者の過去や未来の風景を見せる場所。このシーンの登場人物は、《意気》の判定を行うことができる。成功すると、自分の持っている【感情】を好きな何かに変更することができる。',
            '死者たちの行進。無念の死を遂げた者たちが、仲間を求めて彷徨らっている。このシーンの登場人物は《死霊術》で判定を行わなければならない。失敗すると、ランダムに変調を一つを受ける。',
            'スラム。かろうじて生き延びている人たちが肩を寄せ合い生きているようだ。ここなら辛うじて安心できるかも……。',
            '落書きだらけのホテル。その周囲には肌を露出させた女や男たちが、媚態を浮かべながら立ち並んでいる。',
            '立ちふさがるのは妖魔の群れ。他に道などない、真正面から突き進むほかは…災厄シーン表(CLST)を振ること。',
            '薄汚い路地裏。巨大な黒犬が何かを貪っている。あなたの気配を感じて黒犬は去るが、そこに遺されていたのは……。',
            '昏い酒場。バーテンが無言でグラスを磨き続けている。あなたの他に客の気配はないが……。',
            '地面を覆う無数の瓦礫。その隙間から暗黒の瘴気が立ち昇る。このシーンの登場人物は《生存術》で判定を行わなければならない。失敗すると、好きな【生命力】を１点失う。',
            '熱気溢れる市場。武器や薬物などを売っているようだ。商人たちの中には、渡来人の姿もある。このシーンの登場人物は、《経済力》で判定を行うことができる。成功すると、好きな忍具を一つ獲得できる。',
            '目の前に渡来人が現れる。渡来人はあなたに興味を持ち、襲い掛かってくる。このシーンの登場人物は《刀術》で判定を行わなければならない。成功すると、渡来人を倒し、好きな忍具を一つ獲得する。失敗すると、３点の接近戦ダメージを受ける。',
          ]
        ),
        'HC' => DiceTable::Table.new(
          '中忍試験シーン表',
          '2D6',
          [
            '深い闇が辺りを覆う。何度目かの夜……いつまでこの試験は続くのだろう。このシーンに登場するキャラクターは《生存術》で判定を行い、失敗すると集団戦ダメージを1点受ける。',
            '山の冷気が肉体を蝕む。このシーンに登場するキャラクターは《衣装術》で判定を行い、失敗すると射撃戦ダメージを1受ける。',
            '腹を空かせた獣が襲いかかってくる。このシーンに登場するキャラクターは、《鳥獣術》で判定を行い、失敗すると射撃戦ダメージを1点受ける。',
            '上忍の仕掛けたトラップが発動。このシーンに登場するキャラクターは《罠術》で判定を行い、失敗すると射撃戦ダメージを1点受ける。',
            '濃い霧が出てきた。視界が極端に悪くなり、不安を感じる……。',
            '清廉な気配が漂う森の中。鳥のさえずりや、そよ風が木々を通り過ぎる音が聞こえる。',
            '朽ちた山小屋を発見する。何年も使った様子はなさそうだが……。',
            '山の天気は変わりやすい。嵐がやってくる。今後、戦闘が発生したとき、戦場表を使わなかった場合、その戦場は「平地」ではなく「悪天候」として扱う。',
            'ひときわ高くなっている尾根にたどり着く。このシーンの登場するキャラクターは、《登術》で判定を行い、成功すると、好きなキャラクター1人の【居所】を獲得する。',
            '深山幽谷（しんざんゆうこく）の果てに、清涼な泉を発見する。ふう、生き返るな。このシーンに登場するキャラクターは、《意気》の判定に成功すると、【生命力】を1点回復させることができる。',
            '脱落した別のグループの忍者の死体を発見する。こいつらには、もう不要だろう。好きな忍具1つを獲得する。（何を獲得するか宣言すること）。',
          ]
        ),
        'HK' => DiceTable::Table.new(
          '影の街でシーン表',
          '2D6',
          [
            '血の臭いがあたりに充満している。何者かの戦いがあった気配。　いや？まだ戦いは続いているのだろうか？',
            'これは……夢か？　もう終わったはずの過去。しかし、それを忘れることはできない。',
            '眼下に広がる街並みを眺める。ここからなら街を一望できるが……。',
            '世界の終わりのような暗黒。暗闇の中、お前達は密やかに囁く。',
            '死者たちの行進。無念の死を遂げた者たちが、死者を求めて彷徨っている。このシーンの登場人物は《死霊術》で判定を行わなければいけない。失敗すると、ランダムに変調1つを受ける。',
            '立ち並ぶ廃墟。その影から、人とも怪物ともつかない者の影が、あなたの様子を窺っている。',
            '地面を覆う瓦礫。その隙間から暗黒の瘴気が立ち昇る。このシーンの登場人物は、《生存術》で判定を行わなければならない。失敗すると好きな【生命力】1点を失う。',
            '強い雨が降り出す。人々は、軒を求めて、大慌てて駆けだしていく。',
            '大きな風が吹き荒ぶ。髪の毛や衣服が大きく揺れる。何かが起こりそうな予感……',
            '酔っぱらいの怒号。客引きたちの呼び声。女たちの嬌声。いつもの繁華街の一幕だが。',
            '太陽の微笑みがあなたを包み込む。影の世界の住人には、あまりにまぶしすぎる。',
          ]
        ),
        'HLST' => DiceTable::Table.new(
          '斜歯ラボシーン表',
          '2D6',
          [
            '今週のびっくりどっくり斜歯開発室、1D6を振り奇数なら好きな忍具が入手できる。偶数でも好きな忍具が入手できるが、射撃戦ダメージを１点受ける。',
            'トランスポーターだ！《絡繰術》で判定すること。失敗するとどこかへ飛ばされて《行方不明》の変調を受ける。成功した場合、望む場所へ到達できる。好きな「居所」を入手すること。',
            '改造室。調整途中の下忍戦闘員たちが錯乱し、あなたに襲い掛かる。〈傀儡術〉の判定を行う。失敗すると1点の集団戦ダメージを受ける。成功すれば「居所」を持っている他のキャラクターに1点の集団戦ダメージを与えることができる。',
            'エレベーター。ただし四方八方へ移動する。行き先ボタンは無い。この箱はこれから何処へ行くのか。',
            '長く続く廊下。不気味なほどに静まり返っているが、周囲からはまとわりつくような敵意を感じる。',
            'たくさんの巨大な円筒状のガラスが立ち並び、中には様々な人間が謎の液体に浮かぶ。もちろん肝心な部分は光の反射で見えない。こいつは…まさか…！培養プラントシーン表(PLST)を振ること。',
            'ＬＥＤが視覚的にやかましいコンピュータールーム。壁一面を埋めるディスプレイがちかちか光る。斜歯の誇る超コンピュータは性能に反して古めかしい。',
            '司令室。とうとうDr.斜歯を追い詰めた。泣いて土下座するDr.斜歯……の首がバネ仕掛けで飛び出し、大爆発。影武者だ！このシーン中のファンブル値は+2される。',
            '斜歯のロボット兵器がところ狭しと並べられている。こいつらが起動したとしたら…《潜伏術》で判定し、失敗した場合ロボット兵器に見つかって1点の射撃戦ダメージを受ける。',
            '自爆装置のある中枢ルーム。《火術》で判定し、成功すると自爆させることができる。自爆させた場合、Dr.斜歯に2点の接近戦ダメージを与えることができる。',
            '部屋に置かれた実験装置によりマインドコントロールを受けてしまう。このシーンのあなたはGMの指定した行動をとらねばならない。',
          ]
        ),
        'HM' => DiceTable::Table.new(
          '密室シーン表',
          '2D6',
          [
            '……ふう。あいつらと一緒にいると、緊張で息苦しくなる。トイレにいるときだけは、少しだけ落ち着くな。',
            'パチ、パチパチ……。電灯が明滅する。ずっと薄暗い部屋にいたせいで、時間の感覚が麻痺してきた。一体、いまは何時なんだ？',
            'ガチャン！誰かが食器を落として割ってしまったようだ。落としたヤツは悪びれもせず、こっちを見て肩をすくめている。',
            '誰かがつけたテレビ。くだらないバラエティ番組が映っている。静かな部屋に作り物の笑いがむなしく響く。',
            '空調がイカれているのか、妙に暑い。じっとりと汗ばんでくる……。',
            'ぴちょん、ぴちょん、ぴちょん……静かな室内に水道から水が滴る音が響く。さっき、きっちり閉めたはずなんだが。',
            'タバコの煙が目に染みる。閉じきった部屋で吸うから、空気が悪くなってきているな。',
            '床に散乱した書類の中から、一枚の写真を見つける。この部屋の持ち主と、その恋人らしき人物が仲よさそうに写っているが……。',
            '誰かが、八つ当たり気味に壁を殴る。そんなことして、一体なんになるというのだろう？',
            'ベッドでごろんと横になる。くそ！いつになったら、ここから出られるんだ！',
            '壁のシミをぼんやりとながめていたら、それがゆっくりと人の顔の形になり、にやりと笑いかけてきた。……幻覚か。',
          ]
        ),
        'HO' => DiceTable::Table.new(
          '病院シーン表',
          '2D6',
          [
            '謎の入院患者。車椅子に座った少女が、あなたをじっと見つめている。',
            '急患入り口。サイレンの音に続いて、ストレッチャーに乗せられた救急患者が運ばれてきた。',
            '病院の屋上。巨大な病院の敷地が一望できる。',
            '診察室。机と清潔なベットが設えられている無機室な部屋。机の上にはパソコンといくつかの器具が置かれている。',
            '病院の廊下。患者の姿はなく、静まり返っている。',
            '面会用のロビーは、入院患者とその見舞客で賑わっている。だが、それに紛れて、妙な気配を感じるが……。',
            '病室。きつい消毒液の香りに混じって、死の匂いが漂っている。',
            '奇妙な囁き声。「助けてくれ……。」そんな訴えを耳元で聞いた気がしたが……？',
            'ナースステーション。数人の看護師たちが慌ただしく業務をこなしている。',
            '中庭。どこからか悲鳴が聞こえたような気がするが……？',
            '霊安室。その扉が並ぶ長い廊下には、地下特有の淀んだ空気が漂っている。なぜだか気分が悪い。',
          ]
        ),
        'HR' => DiceTable::Table.new(
          '龍動シーン表',
          '2D6',
          [
            '血の匂いが辺りに充満している。何者かの戦いがあった気配。いや？まだ戦いは続いているのだろうか？',
            'これは……夢か？もう終わったはずの過去。しかし、それを忘れることはできない。',
            '眼下に広がる街並みを眺める。ここからなら街を一望できるが……。',
            '世界の終りのような暗闇。暗闇の中、お前たちは囁く。',
            '雰囲気のある古い街並みを歩く。あの建物は見たことがあるような……。',
            '霧の中を黒い影が飛び回っている。連中か？',
            '分厚い霧が街を折っている。霧の向こうには黒い影が……。',
            '強い雨が降り出す。人々は軒を求めて、大慌てで駆け出していく。',
            '大きな風が吹き荒ぶ。髪の毛や衣服が大きく揺れる。何かが起こりそうな予感……。',
            'どこからか奇妙な歌が響く。それはまるで、邪悪な神に捧げる祈りのようにも聞こえた。',
            '無残で冒涜的な死体。犠牲者の表情は苦悶に満ちあふれ、四肢には何者かに貪り食われた痕がある。',
          ]
        ),
        'HS' => DiceTable::Table.new(
          '催眠シーン表',
          '1D6',
          [
            'あなたは心地よいベッドの中で、恋人の肌のぬくもりを感じながら微睡んでいる。恋人は「そろそろ起きる時間」とベッドからすり抜ける。目を開けると、そこには裸のナビキャラクターがいた。そして、ナビキャラクターはあなたに優しく口づけをした。柔らかな感触が、あなたの記憶を掘り起こす。',
            'あなたは一人で死体の片付けを行っている。とても恐ろしく、とても憎かったナビキャラクターを殺したのだ。ナビキャラクターの意志のない瞳を見下ろし、あなたは晴れやかな気分になる。そして、その死体の手のひらに何かが書かれているのに気が付いた。',
            'あなたはなぜかTVショーに登場している。黒いサングラスをかけた司会者と楽しくおしゃべりしていたら、友人を紹介してほしいと言われ、電話を渡された。覚えのある番号にかけてみると、受話器の向こうからナビキャラクターの声がした。声は、あなたにこう囁く……。',
            'あなたはいつの間にか子どもになって、お気に入りのアニメを見ている。夢中になってアニメを見ていると、ナビキャラクターがアニメの登場人物として現れた。ナビキャラクターは、画面から抜け出してきて、あなたをアニメの世界に引きずり込む。そして、あなたは世界の真実に気付いてしまう！',
            'あなたはレストランでお腹を空かせている。そこに給仕の姿をしたナビキャラクターが、食事を運んできた。メインディッシュの銀製の蓋を開けてみると、そこにはあなたの大好物が。食欲をそそる香りが立ちこめ、あなたは重大な事実を思い出す。',
            'あなたは膨大な数の書架が林立する無人の図書館を歩いている。何気なく一冊の本を棚から抜き出すと、その本の向こう側にナビキャラクターの顔がのぞいている。「お前の求めるものは、その本の14ページに書かれている。」その言葉に従い、恐る恐る14ページを開いてみると……。',
          ]
        ),
        'HT' => DiceTable::Table.new(
          '滅びの塔シーン表',
          '2D6',
          [
            '血の臭いがあたりに充満している。何者かの戦いがあった気配。　いや？まだ戦いは続いているのだろうか？',
            'これは……夢か？　もう終わったはずの過去。しかし、それを忘れることはできない。',
            '眼下に広がる街並みを眺める。ここからなら街を一望できるが……。',
            '世界の終わりのような暗黒。暗闇の中、お前達は密やかに囁く。',
            '優しい時間が過ぎていく。影の世界のことを忘れてしまいそうだ。',
            '凄まじい業火。このシーンの登場する者は、『器術』分野からランダムに特技１つを選び、判定を行う。失敗すると射撃戦ダメージ1点を受ける。',
            '凄まじい人混み。喧噪。影の世界のことを知らない無邪気な人々の手柄話や無駄話が騒がしい。',
            '強い雨が降り出す。人々は、軒を求めて、大慌てて駆けだしていく。',
            '大きな風が吹き荒ぶ。髪の毛や衣服が大きく揺れる。何かが起こりそうな予感……',
            '凄まじい業火。このシーンの登場する者は、『器術』分野からランダムに特技１つを選び、判定を行う。失敗すると射撃戦ダメージ1点を受ける。',
            '太陽の微笑みがあなたを包み込む。影の世界の住人には、あまりにまぶしすぎる。',
          ]
        ),
        'HY' => DiceTable::Table.new(
          '夜行列車シーン表',
          '2D6',
          [
            '車内の灯りがすべて消える。停電か？それとも……。すべてが闇に覆われる。',
            'どうやらこの車輌は喫煙席のようだ。もうもうと煙がたちこめている。しかし、あなたたち以外に、客の姿は見えないのだが……？',
            '気分を変えるために、食堂車に移動する。そこには「解体屋」を名乗る例の女性がいた。あなたにむかって、婉然とほほえみかけてくる。',
            '……はッ！？夢か？いつの間にか眠っていたようだ。何か、悪夢を見ていたようなのだが……。',
            '窓越しに通過する駅のホームが見える。しかし、その駅の名前をどうしても読むことができない。どうにも、日本語には見えないのだが……。',
            'ガタンガタンガタン……路線を走る音をぼんやりと聞いている。一体、この列車はどこに向かっているんだろう？',
            '車内を照らす白熱灯に、羽虫がたかり、それに合わせるように光が明滅する。',
            '髑髏のような細身の車掌あなたのチケットを確認すると、にたりと邪悪に微笑み、去って行った。',
            '一等車輛はコンパートメントになっているようだ。コンパートメントの中からは、楽しげな親子の話し声が聞こえてくるが……？',
            '「お弁当に、お茶……。」車内販売の少女がやってくる。しかし、そこで売られている食べ物や飲み物は、生き物の内臓のような器官やぐねぐねと蠢く触手、異様な毛の塊など異形のものばかり。《経済力》の判定に成功すると、好きな「忍具」1つを購入できる。',
            '車輌の果てを確かめるため、延々扉をくぐっているが、いつまでたっても最前列（最後尾？）にたどりつかない。今、いったい何輌目だろうか？',
          ]
        ),
        'NTST' => DiceTable::Table.new(
          '夏の終わりシーン表',
          '2D6',
          [
            'どこから紛れ込んできたのか。ナタを持った少女がこちらに迫ってくる。あっそぼうよぉ。シーンに登場したキャラクターは《刀術》で判定し、失敗すると接近戦ダメージを1点受ける。',
            '暗い夜の森の中、月明かりのみが周囲を照らす。忍が動くにはいい時間だ。',
            '鬱蒼と繁っていて少し涼しい森の中。ほんのひとときでもいい。使命を忘れて少し涼もうか。',
            'ほとんど人が出入りしない公民館。かろうじて扇風機は回っているが暑い。',
            '山の斜面に立ち並ぶ墓石。踏み固められた周囲と墓前に供えられた小さな花束。こんな山中にも日々通う人がいるのだろうか。',
            '村の広場。田畑が一望できる。夏の風物詩であるセミの鳴き声がうるさい。',
            '澄み切った清流。冷たい飛沫が気持ちいい。森の中の穴場だ。',
            '神秘的な神社。夏の終わりに向けて祭りの準備がされているが、今は人がいないようだ。',
            '無人の廃屋が並び、不気味な雰囲気が漂う。廃屋の影から息を潜める何者かの気配を感じる。',
            '村の上空。ここから眺めれば村など小さいものだ。',
            'カツーン、カツーン、誰かが丑の刻参りをしている音が聞こえる。シーンに登場したキャラクターは《呪術》で判定し、成功すると誰かに《呪い》の変調を与えることができる。失敗すると《呪い》の変調を受ける。',
          ]
        ),
        'PLST' => DiceTable::Table.new(
          '培養プラントシーン表',
          '1D6',
          [
            '培養槽。あなたそっくりの人間が謎の液体に浸かっている。あなたは本当に本物のあなただろうか？《記憶術》で判定を行い、失敗すると《忘却》の変調を受ける。',
            '巨大なガラス管の中に冒涜的な生物が蠢く実験室。《意気》で判定を行い、失敗すると《マヒ》の変調を受ける。',
            '試験管に浮かぶDr斜歯のクローン脳が大量にあるクローン施設。',
            '各流派頭領が浮かぶ試験管。ランダムな特技を決定し判定を行う。決定した特技が自分の得意分野の場合、成功すると兵糧丸を１つ入手する。得意分野でない場合、失敗すると接近戦ダメージを1点受ける。',
            '無人の実験室。中央には破壊された培養器があり、人とも獣ともつかない濡れた足跡が扉へと続いている。',
            '美少年改造プラント。このシーンに登場した者は《変装術》で判定すること。成功した場合、美少年になることができる。',
          ]
        ),
        ## 以下正忍記
        'TMT' => DiceTable::Table.new(
          '魔都東京シーン表',
          '2D6',
          [
            'お台場。臨海副都心。テレビ局や展示場など、特徴的な建造物は冒涜的な改造を施されている。',
            '靖国神社。東京の中とも思えぬ緑で満ちたその場所には、妖魔の姿も見えない。結界か何かだろうか。',
            '東京大学の本郷キャンパス。多数の机を積み重ねたバリケードと有刺鉄線によって門は塞がれている。',
            '山手線の線路の上。今はここを走る電車も存在しない。代わりに蠢く何かはいるようだが。',
            '霞が関。行政機関が集う、日本の中枢。しかし、そこは既に機能しておらず、妖魔の跳梁を許している。',
            '渋谷駅前。ひび割れて何も映していない大型野外ビジョンにざざ、とノイズが走る。',
            '夜の新宿歌舞伎町。東洋一の繁華街であるこの場所は、魔都と化した今でも盛況である。',
            '新宿都庁。摩天楼の林立するビル街の下、忍者たちが妖魔と戦っているのが見える。',
            '神田古書街。多くの古書店が軒を連ねている。そこに並ぶ本には魔書と呼ばれるものも多数存在しているようだ。',
            '町田駅前。都心から離れたここなら東京の外と繋がっているかもしれない。',
            '電波塔の上。ここからなら変貌してしまった魔都東京の姿を一望できる。そしてそれは、妖魔たちからも見つけられやすいということだ。',
          ]
        ),
        'TMG' => DiceTable::Table.new(
          '魔都学園シーン表',
          '2D6',
          [
            '瘴気が漂う森の中。時折怒号や叫び声が聞こえてくるが、それもやがて静かになる。',
            '学校のトイレ。…個室から何本も手が伸びている。',
            '誰もいない体育館。コロコロと転がっているのは人の首なのか？',
            '校舎の屋上。禍々しい髑髏が並べられ、その口からは霧状の何かが吐き出している。',
            '校庭。逃げ惑う生徒の姿が見える。',
            '廊下。作られたバリケードを緩慢な動きの妖魔が崩そうとしている。',
            '学食のカフェテリア。ぶちまけられた食べ物が散乱している。',
            '静かな授業中の風景はすでにない。教室に残る人々の顔には焦りや不安が張り付いている。',
            '校舎と校舎を繋ぐ渡り廊下。あなた以外の気配はないが…油断はできない。',
            '特別教室。音楽室や理科室に籠る人々は皆、肩を寄せ合って震えている。',
            'プール。ゆらゆらと揺れる水面の下に蠢く何かの姿が見える。',
          ]
        ),
        'TC' => DiceTable::Table.new(
          'カジノシーン表',
          '2D6',
          [
            'カジノのトイレ。窓から逃げる奴がいるんだ。ここを張っておかないわけにはいくまい。',
            '控室。運営の為の黒服や料理人といった裏方が控えている。綺羅びやかなとは程遠い、陰鬱とした空気。',
            '港。絢爛な光や音を背中に、華やかと対局にいる君たちが佇む。',
            'VIPルーム。権力者や資産家が密談をする中、君たちもまた潜む。',
            'カジノの中。人間の欲望を手招きする中、思惑という名の影が走る。',
            'カジノに併設される静謐なバー。この雰囲気を壊すような野暮な真似はしないだろう？',
            'カジノに併設されている風俗街。蠱惑的な女性が、君たちを誘う。',
            'バカラテーブル。カジノで最も高い金が動くとされるギャンブル。カードをしぼる手に、汗が滴る、鉄火場',
            'スロットゲーム。脳を麻痺させる絢爛な音が鳴り響く。',
            'リラクゼーション施設。マッサージやエステ、スパといった施設が立ち並ぶ。',
            'ジャックポット！人生を変える幸運の一撃。羨望、渇望、あらゆる嫉妬の視線が君に集まる。君はチップを一つ獲得する。',
          ]
        ),
        'TGS' => DiceTable::Table.new(
          '月天に死の咲くシーン表',
          '2D6',
          [
            '何者かの強い恨みと悪意を感じる。焼き鏝を押されたかのような激痛が走る。《呪術》で判定を行う。失敗すると接近戦ダメージ１点を受けるとともに「花印」を一つ刻まれる。',
            '目の前に、七色に光る楽園のような光景が広がっている。頭の中で継承が鳴るも、なぜか、思わずそちらに足をむけてしまう。《幻術》で判定を行う。失敗すると射撃戦ダメージを1点受けると共に、「花印」を一つ刻まれる。',
            'どこからか不思議な声が聞こえる。透き通るようなその声に、全てをゆだねたくなる……。《言霊術》で判定を行う。失敗すると、「花印」を一つ刻まれる。',
            'さあっと風が吹き、木々が揺れ、さわさわと葉が触れ合う。まるで、こちらを見ながらひそひそと会話をしているかのようだ。',
            '視線を感じる。振り向いても、そこには一凛の花があるのみだ。',
            '一息つこうと上がり込んだ建物で丸薬を見つけた。悪いが、使えるものは使わせてもらおう。兵糧丸を一つ獲得する。',
            '潜んでいた人影が、月明かりの下に現れる。自分以外のPCを一人だけシーンに登場させる。',
            '村人に出会い、忍具を渡される。お礼を言うために顔を上げると、そこには死体があるのみだった。「神通丸」を一つ獲得する。',
            '忍具の符が貼られているのを見つける。この村全体を使い、封印か結界でも張っていたのだろうか……。どのみち、この様ではもう用済みだろう。「遁甲符」を一つ獲得する。',
            '調査中、ふと、神棚に奉られた酒に目が行く。吸い寄せられるようにそれを手に取り、一息に飲み干す。身体が火照り、完備な香りが鼻の奥から少し抜ける。「花印」が一つ消える。',
            '手を引かれたような気がする。その感覚に従って歩くと、隠された細い道を見つけた。これは、村に張り巡らされた隠し通路……？《地の利》で判定を行う。成功すると、このシーンの直後に追加で自身のドラマシーンを一つ獲得する。',
          ]
        ),
        'TRM' => DiceTable::Table.new(
          'ロードムービーシーン表',
          '2D6',
          [
            '調達した車に乗って距離を稼ぐ。ラジオから電車の爆発事故のニュースが流れる。目撃者の証言として、PCたちの特徴が語られている……。',
            'どうしても、人混みを避けることができない。蝙蝠が来るといけない。せめて変装して紛れるとしよう。',
            '無理をしたのか、少し調子が悪い。そのせいか、ちょっとしたことでイライラしてしまいそうだ。',
            '人目を避け、森の中を行く。木々が揺れる音や虫の鳴き声が聞こえてくる。どこかから美味しそうな香りが漂ってくる。',
            'ここらで少し食事をとるのも悪くないかもしれない……。',
            '土砂降りの雨が、体温を奪う。どこか休める場所があるといいのだが……。以降、メインフェイズに戦闘が発生した場合、その戦場が「悪天候」になる。',
            '上空を蝙蝠が飛んでいたような気がする。敵の襲撃に気を配らねば……。',
            'どこかから流れてくる音楽。聞き覚えがある。あれは、いつのことだったろうか……。',
            '道が二つに分かれている。さて、どちらに行くべきか……?',
            'これは……夢か?もう終わったはずの過去。しかし、それを忘れることはできない。',
            '潮風が香る。海が見えてきた。波は一定のリズムで岸壁にぶつかり、白く砕けて飛び散っていく。',
          ]
        ),
        'TMC' => DiceTable::Table.new(
          'マスカレイド・キャッスルシーン表',
          '2D6',
          [
            '庭園には周囲と調和した見事な噴水がある。その水路は湖に通じているようだ。',
            '地下牢に囚人は入っていないし、看守もいない。長い間使われていないようだ。歴史的価値で残されているのだろう。',
            '立派な蔵書が並ぶ広い客間。着飾った文化人たちが活発な議論を戦わせている。部屋には酒の匂いが漂っている。',
            '遊戯室の中央ではビリヤードやポーカーが行われており、隅ではバーテンが客の望みに応じてカクテルを作っている。',
            '大広間では立食パーティーが常時開催されており、人が絶える事はない。あちこちに有名人や政治家らしき姿が見える。',
            '城の中央に位置する、この城の名物である二重螺旋階段。登りと降り、二つの階段が絡み合う見事な設計となっている。',
            '電灯が消えた廊下を行き交う召使いは蝋台を手にしている。城主の好みだろうか、 この城には電化されていない箇所が多い。',
            'ダンスホールでは楽団がゆったりとした音楽を奏で続けている。人々は踊りと休みを繰り返しながらそれぞれ楽しんでいるようだ。',
            '吹き抜ける風が心地良いバルコニー。軽食が用意され、来場客が談笑しながら食事を楽しんでいる。',
            '時計塔は古式で、据え付けられた時計は 歯車とネジで作られたものだが、驚くほど正確に時を刻んでいる',
            '屋根の上はとても静かで、真下で行われている狂騒が嘘のようだ。こんなところに登って来るのは暇を持て余した忍者ぐらいだ。',
          ]
        ),
        'TKG' => DiceTable::Table.new(
          '学校シーン表（黒星祭）',
          '2D6',
          [
            '清廉な気配が漂う森の中。鳥のさえずりやそよ風が木々を通りすぎる音が聞こえる。',
            '学校のトイレ。……なんだか少しだけ怖い気がする。',
            '体育館。多くの観客が、ステージの上で行われているパフォーマンスに夢中になっている。中には、暗いことをいいことに秘密の会話をするものも。',
            '校舎の屋上。一陣の風が吹き、衣服をたなびかせる。',
            '模擬店が多数出展している校庭。誰かの視線に振り向くと、あなたに話しかけようと、機会を伺っている生徒の姿が……。',
            '廊下。休憩時間か放課後か。生徒たちが、楽しそうにはしゃいでいる。',
            '学校のカフェテリア。多くの生徒たちが、フランクフルトやたこ焼き、クレープやチュロスなど、生徒たちがつくった食べ物に興じている。',
            '静かな授業中の風景。しかし、忍術を使って一般生徒に気取られない会話をしている忍者たちもいる。',
            '模擬店となった教室。メイド喫茶やお化け屋敷など、教室ごとに思い思いの出し物で盛り上がっているようだ。',
            '特別教室。音楽室や理科室にいるのってなんか楽しいよね。',
            'プール。水面が、ゆらゆら揺れている。',
          ]
        ),
        'TKH' => DiceTable::Table.new(
          '恋人との日々シーン表',
          '2D6',
          [
            'アカリの部屋にやってきた。 彼女は小さく笑いながらも、あなたを快く 迎えてくれる。',
            '些細なことで喧嘩してしまった。 暫く互いに口を聞かずに過ごしているが、 アカリはどこかバツの悪そうな表情をしている。',
            'アカリが料理を振る舞ってくれた。 アカリの料理の腕は如何ほどだろうか。 考えを巡らせるあなたの目前で、鍋の蓋がぼわんと湯気を出して開く。',
            '映画館にやってきた。 ホラー映画に恋愛映画にアクション映画。 明かりが落ち、映像を見つめる二人の手がそっと触れ合う。',
            '図書館にやってきた。 来るやいなや、 アカリはもくもくと、静かにページをめくっている。 彼女はどんな本を読むのだろうか。',
            '森林浴にやってきた。 森の木漏れ日が作る影が､ アカリの頬に落ちている。',
            '繁華街にやってきた。 楽しいものや美味しいもので満たされたこの場所に、彼女はいつになく上機嫌だ。',
            '遊園地にやってきた。 あれこれとアトラクションを探してあなたの手を引くアカリは、いつもより子供っぽく見えた。',
            'アカリとカフェでお茶を楽しんでいる。 目の前に座る彼女のいたずらっぽい微笑みが、 あなたの気持ちを和らげる。',
            'アカリとゲームを楽しんでいる。 アカリがあなたに対戦しようと持ちかけてきた。どうやら秘策があるようだが?',
            'あなたの部屋にやってきた。 あなたが忍者であることを感づかれないように、その足跡を覆い隠す。ついでに彼女に見てほしくないものも。',
          ]
        ),
        ## 以下流派ブック
        'OTFK' => DiceTable::Table.new(
          '不良高校シーン表',
          '2D6',
          [
            '誰かが教室に猫を連れてきた！泣く子も黙るC組の生徒といえど、猫の愛らしい表情には釘付けだ。',
            '校庭の端にある体育倉庫は、どんなことをするにもぴったりの場所だ。誰かを呼び出して締め上げるにしろ、忍者同士の秘密の会話に勤しむにしろ。',
            '夜の倉庫街。すでに人通りはなく、明かりといえばオレンジ色にちらつく街灯だけだ。',
            '下校時間の校庭。不良生徒たちを見ては、ひそひそと話す生徒たちの姿がちらりと見える。教職員ですら、こちらを見ても眉をひそめてただ通り過ぎるだけだ。',
            '夕方の校舎裏は昼間の教室では味わえない静寂に包まれている。湿ったコンクリート越しに聞こえるものといったら、カラスの鳴き声と、サッカー部の練習の掛け声ぐらいだ。',
            '荒れ放題の教室。キャッチボールに興じる生徒に喧嘩を始める生徒まで。騒ぎ声は一日中止むことはない。',
            '教室の前の廊下に、割れた窓ガラスが散乱している。吹きざらしになった窓の外からは冷たい風が吹き付けていた。',
            '通学路沿いにある橋の下。橋の上を電車が通るたびに、けたたましい線路の音が響き渡る。',
            '昼休みの食堂。人混みにまみれるここだけは、C組も他の生徒も関係ない。',
            '高校近くにある河原の土手で、草の上に寝転がって雲を眺める。どこかで響く吹奏楽の練習の音と、風の音とともに、穏やかな時間が流れていく。',
            '他校の不良生徒からの襲撃だ！校庭に集まった奴らは、釘バットを手に、C組の生徒を出せと騒ぎ立てている。'
          ]
        ),
      }.freeze
      register_prefix(RTT.prefixes.map { |k| "\\d*#{k}" }, TABLES.keys.map { |k| "\\d*#{k}" }, SCENE_TABLES.keys.map { |k| "\\d*#{k}" }, DEMON_SKILL_TABLES.keys.map { |k| "\\d*#{k}" }, DEMON_SKILL_TABLES_NEW.keys.map { |k| "\\d*#{k}" })
    end
  end
end
