# frozen_string_literal: true

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

      # ゲームシステム名
      NAME = "パストフューチャーパラドックス"

      # ゲームシステム名の読みがな
      SORT_KEY = "はすとふゆうちやあはらとつくす"

      HELP_MESSAGE = <<~TEXT
        ・行為判定 PP@s#f[+m/-m]>=x 　2D6の行為判定を行う。
        　s: スペシャル値 (省略時 12)、 f: ファンブル値 (省略時 2)
        　[+m/-m]: 修正値（省略可）、 x: 目標値 (省略可)
        　例）PP, PP-1, PP@11, PP@11+2, PP@11#3, PP@11#3-1,
        　　　PP#3>=7, PP#3+2>=7, PP>=7, PP-1>=7
        ・特技表
        ランダム分野表 RCT
        ランダム特技表 RTTn（n：分野番号、省略時は全分野からランダム）
        　科学　（RTT1）、知識（RTT2）、身体（RTT3）、
        　センス（RTT4）、知恵（RTT5）、迷信（RTT6）
        ・各種表　※1D6および2D6を振る表は、末尾に=nと付けることで出目nの内容を指定可能。末尾に-n／+nと付けることで、出目に修正を付けることが可能。
        　例：SBET=2　MBET-1　TBET+2
        シーン表（2D6）
        　現代シーン表 ST4
        経歴表（D66）
        　原始時代経歴表 CT1 、古代経歴表 CT2 、中世時代経歴表 CT3
        　現代経歴表 CT4 、超情報化時代経歴表 CT5 、宇宙時代経歴表 CT6
        名前表（D66）
        　原始時代名前表（男性名） NMT1 、原始時代名前表（女性名） NFT1
        　古代名前表（男性名） NMT2 、古代名前表（女性名） NFT2 、古代名前表（姓） NLT2
        　中世時代（日本）名前表（男性名） NMT3 、中世時代（日本）名前表（女性名） NFT3 、中世時代（日本）名前表（姓） NLT3
        　中世時代（西洋）名前表（男性名） NMT3W 、中世時代（西洋）名前表（女性名） NFT3W 、中世時代（西洋）名前表（姓） NLT3W
        　現代（日本）名前表（男性名） NMT4 、現代（日本）名前表（女性名） NFT4 、現代（日本）名前表（姓） NLT4
        　現代（西洋）名前表（男性名） NMT4W 、現代（西洋）名前表（女性名） NFT4W 、現代（西洋）名前表（姓） NLT4W
        　超情報化時代名前表（男性名） NMT5 、超情報化時代名前表（女性名） NFT5 、超情報化時代名前表（姓） NLT5
        　宇宙時代名前表（男性名） NMT6 、宇宙時代名前表（女性名） NFT6 、宇宙時代名前表（姓） NLT6
        因縁種別表（D66） CTT 、ポジティブ因縁内容表（1D6） CPT 、ネガティブ因縁内容表（1D6） CNT
        バタフライエフェクト表(2D6)　※バタフライエフェクト表は-5～12までの結果を算出可能
        　重度バタフライエフェクト表 SBET 、軽度バタフライエフェクト表 MBET 、タイムトラベラー重度バタフライエフェクト表 TBET
        アクシデント表（2D6） ACT 、タイムトラベル演出表（2D6） TT 、帰還演出表（1D6） RT
        アイテム決定表（1D6） IT 、時代決定表（1D6） AGT
        ・D66ダイスあり
      TEXT

      def initialize(command)
        super(command)
        @sort_add_dice = false
        @sort_barabara_dice = false
        @d66_sort_type = D66SortType::ASC
      end

      register_prefix('PP')

      def eval_game_system_specific_command(command)
        return action_roll(command) || RTT.roll_command(@randomizer, command) || roll_tables(command, TABLES) || roll_table_command(command)
      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 roll_table_command(command)
        result = []

        m = /([A-Za-z0-9]+)(([+]|-|=)((-\d+)|\d+))?/.match(command)
        return result unless m

        command = m[1]
        operator = m[3]
        value = m[4].to_i

        result = get_table_result(command, operator, value)

        return result.join("\n")
      end

      def get_table_result(command, operator, value)
        result = []

        if !(table = TABLES_MOD_2D[command]).nil?
          result = get_table_index(table, operator, value, 2, 6)
        elsif !(table = TABLES_MOD_1D[command]).nil?
          result = get_table_index(table, operator, value, 1, 6)
        elsif !(table = TABLES_MOD_MINUS[command]).nil?
          result = get_table_minus_index(table, operator, value)
        end

        return result
      end

      def get_table_minus_index(table, operator, value)
        index = 7
        modify = 0
        dice_list = nil
        result = []

        if operator == "="

          index = value + 7
          index = index.clamp(2, 19)
          info = get_table_info(table, index)
          text = "#{info.table_name}:#{info.value - 7} ＞ #{info.value - 7}:#{info.body}"

        else

          case operator
          when "+"
            modify = value
          when "-"
            modify = value * -1
          end

          dice_list = @randomizer.roll_barabara(2, 6)
          index += dice_list.sum
          index += modify
          index = index.clamp(2, 19)
          info = get_table_info(table, index)

          if modify != 0
            text = "#{info.table_name}:#{dice_list.sum}[#{dice_list.join(',')}]#{operator}#{modify.abs} ＞ #{info.value - 7}:#{info.body}"
          else
            text = "#{info.table_name}:#{dice_list.sum}[#{dice_list.join(',')}] ＞ #{info.value - 7}:#{info.body}"
          end

        end

        result.push(text)

        return result
      end

      def get_table_index(table, operator, value, dice_count, dice_type)
        index = 0
        modify = 0
        dice_list = nil
        result = []

        if operator == "="

          index = value
          index = index.clamp(dice_count * 1, dice_count * dice_type)
          info = get_table_info(table, index)
          text = "#{info.table_name}:#{info.value} ＞ #{info.value}:#{info.body}"

        else

          case operator
          when "+"
            modify = value
          when "-"
            modify = value * -1
          end

          dice_list = @randomizer.roll_barabara(dice_count, dice_type)
          index += dice_list.sum
          index += modify
          index = index.clamp(dice_count * 1, dice_count * dice_type)
          info = get_table_info(table, index)

          if modify != 0
            text = "#{info.table_name}:#{dice_list.sum}[#{dice_list.join(',')}]#{operator}#{modify.abs} ＞ #{info.value}:#{info.body}"
          else
            text = "#{info.table_name}:#{dice_list.sum}[#{dice_list.join(',')}] ＞ #{info.value}:#{info.body}"
          end

        end

        result.push(text)

        return result
      end

      def get_table_info(table, index)
        info = table.choice(index)
        return info
      end

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

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

        dice_list = @randomizer.roll_barabara(2, 6)

        dice_total = dice_list.sum()
        total = dice_total + cmd.modify_number

        result =
          if dice_total <= cmd.fumble
            Result.fumble("ファンブル(判定失敗。改変度を1D6点増加してバタフライエフェクト発生)")
          elsif dice_total >= cmd.critical
            Result.critical("スペシャル(判定成功。疲労度を1D6点減少してバタフライエフェクト発生)")
          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_total}[#{dice_list.join(',')}]#{Format.modifier(cmd.modify_number)}",
          total,
          result.text
        ].compact

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

      TABLES = {
        'CT1' => DiceTable::D66Table.new(
          '原始時代経歴表',
          D66SortType::ASC,
          {
            11 => '狩猟者',
            12 => '石器職人',
            13 => '毛皮職人',
            14 => '骨加工職人',
            15 => '木工職人',
            16 => '木こり',
            22 => '採集者',
            23 => '法螺貝吹き',
            24 => '集落の守り手',
            25 => '食糧管理者',
            26 => '石板職人',
            33 => '部族戦士',
            34 => '恐竜騎手',
            35 => '恐竜学者',
            36 => '恐竜飼育員',
            44 => 'まじない師',
            45 => '花摘み',
            46 => '乱暴者',
            55 => '族長',
            56 => 'その日暮らし',
            66 => '長老',
          }
        ),
        'CT2' => DiceTable::D66Table.new(
          '古代経歴表',
          D66SortType::ASC,
          {
            11 => '祭司',
            12 => '陶工',
            13 => '金細工職人',
            14 => '貿易商',
            15 => '墓守',
            16 => '壁画画家',
            22 => '哲学者',
            23 => '彫刻家',
            24 => '刻印師',
            25 => 'ガラス職人',
            26 => '粘土職人',
            33 => '魔法研究者',
            34 => '神官戦士',
            35 => '木工職人',
            36 => '踊り子',
            44 => '予言者',
            45 => '墓荒らし',
            46 => 'カルト教祖',
            55 => '超科学者',
            56 => 'その日暮らし',
            66 => '薬師',
          }
        ),
        'CT3' => DiceTable::D66Table.new(
          '中世時代経歴表',
          D66SortType::ASC,
          {
            11 => '農夫',
            12 => '鍛冶屋',
            13 => '商人',
            14 => '宿屋の主人',
            15 => '盗賊',
            16 => '御者',
            22 => '騎士・武士',
            23 => '兵士・衛士',
            24 => '錬金術師',
            25 => '羊飼い',
            26 => '音楽家',
            33 => '貴族',
            34 => '画家',
            35 => '道化師',
            36 => '町医者',
            44 => '神職',
            45 => '王族',
            46 => '占い師',
            55 => '魔術師',
            56 => 'その日暮らし',
            66 => '勇者',
          }
        ),
        'CT4' => DiceTable::D66Table.new(
          '現代経歴表',
          D66SortType::ASC,
          {
            11 => '医師',
            12 => '弁護士',
            13 => '教師',
            14 => 'エンジニア',
            15 => 'ミュージシャン',
            16 => 'イラストレーター',
            22 => '経営者',
            23 => '秘書',
            24 => 'パイロット',
            25 => '銀行員',
            26 => 'テレビマン',
            33 => '営業',
            34 => '作家',
            35 => 'ジャーナリスト',
            36 => '俳優',
            44 => '警察官',
            45 => '消防士',
            46 => 'ギャンブラー',
            55 => 'ギャング',
            56 => 'その日暮らし',
            66 => '学生',
          }
        ),
        'CT5' => DiceTable::D66Table.new(
          '超情報化時代経歴表',
          D66SortType::ASC,
          {
            11 => 'ブレードランナー',
            12 => 'ドローンパイロット',
            13 => 'ロボット工学者',
            14 => 'データサイエンティスト',
            15 => 'VRゲームデザイナー',
            16 => '原子力工学技術者',
            22 => 'AIエンジニア',
            23 => '脳科学者',
            24 => '環境工学エンジニア',
            25 => 'セキュリティエンジニア',
            26 => 'オペレーター',
            33 => 'SNSインフルエンサー',
            34 => 'プログラマ',
            35 => 'ハードウェアエンジニア',
            36 => 'ネットワークエンジニア',
            44 => 'サイバネエンジニア',
            45 => 'メガコーポ役員',
            46 => '個人発信メディア運営',
            55 => 'サイバーウェアドクター',
            56 => 'その日暮らし',
            66 => 'ハッカー',
          }
        ),
        'CT6' => DiceTable::D66Table.new(
          '宇宙時代経歴表',
          D66SortType::ASC,
          {
            11 => '宇宙飛行士',
            12 => 'テラフォーミング技術者',
            13 => '軌道エレベーターガール',
            14 => '宇宙船メカニック',
            15 => '宇宙物理学者',
            16 => '超光速通信技術者',
            22 => '恒星間密輸業者',
            23 => 'ダークマター技術者',
            24 => '宇宙警察',
            25 => '宇宙ニンジャ',
            26 => '銀河レーサー',
            33 => '銀河の騎士',
            34 => '銀河スパイ',
            35 => '銀河行商人',
            36 => '銀河放浪者',
            44 => '元老院議員',
            45 => '銀河帝国機動歩兵',
            46 => '銀河皇帝',
            55 => '賞金稼ぎ',
            56 => 'その日暮らし',
            66 => '宇宙海賊',
          }
        ),
        'NMT1' => DiceTable::D66Table.new(
          '原始時代名前表（男性名）',
          D66SortType::ASC,
          {
            11 => 'ドン',
            12 => 'ヒュー',
            13 => 'ゴロゴロ',
            14 => 'ギュウ',
            15 => 'バキ',
            16 => 'カサカサ',
            22 => 'ガッシャン',
            23 => 'ピカ',
            24 => 'モグモグ',
            25 => 'ボロ',
            26 => 'ドサ',
            33 => 'ギラ',
            34 => 'モクモク',
            35 => 'ガチャ',
            36 => 'ジュワ',
            44 => 'ジャギン',
            45 => 'ゴツン',
            46 => 'ブル',
            55 => 'ギュイン',
            56 => 'ムチャ',
            66 => 'ドデカーン',
          }
        ),
        'NFT1' => DiceTable::D66Table.new(
          '原始時代名前表（女性名）',
          D66SortType::ASC,
          {
            11 => 'パチン',
            12 => 'プシュ',
            13 => 'チラチラ',
            14 => 'キャア',
            15 => 'ペラ',
            16 => 'サラサラ',
            22 => 'クルクル',
            23 => 'ハハ',
            24 => 'パタパタ',
            25 => 'ムニャ',
            26 => 'クスクス',
            33 => 'シーン',
            34 => 'ピシャ',
            35 => 'チク',
            36 => 'サク',
            44 => 'メラ',
            45 => 'ジュルリ',
            46 => 'ポチャ',
            55 => 'ピリリ',
            56 => 'ビビビ',
            66 => 'モフ',
          }
        ),
        'NMT2' => DiceTable::D66Table.new(
          '古代名前表（男性名）',
          D66SortType::ASC,
          {
            11 => 'クフ',
            12 => 'アメンホテプ',
            13 => 'セティ',
            14 => 'ホレムヘブ',
            15 => 'ネフェルカレ',
            16 => 'サルゴン',
            22 => 'ハンムラビ',
            23 => 'ナボニドゥス',
            24 => 'アシュール・ナシル',
            25 => 'ネルガル',
            26 => 'キニチ・ジャナーブ',
            33 => 'ジャサウ・チャン',
            34 => 'バラム',
            35 => 'ワクサクラフーン',
            36 => 'アトラノス',
            44 => 'ポセイドニス',
            45 => 'アクアリオン',
            46 => 'アトランテオス',
            55 => 'ゼファイロス',
            56 => 'オーシャナス',
            66 => 'サラッソス',
          }
        ),
        'NFT2' => DiceTable::D66Table.new(
          '古代名前表（女性名）',
          D66SortType::ASC,
          {
            11 => 'イシス',
            12 => 'ティエ',
            13 => 'メルネイト',
            14 => 'サティア',
            15 => 'ネフェルティティ',
            16 => 'アタリヤ',
            22 => 'ナキア',
            23 => 'シブトゥ',
            24 => 'プアビ',
            25 => 'クババ',
            26 => 'ワク',
            33 => 'ヨク',
            34 => 'タキエン',
            35 => 'イシュチャック',
            36 => 'サラッサ',
            44 => 'トリトニア',
            45 => 'ラディアンティア',
            46 => 'アトランティア',
            55 => 'ムアナ',
            56 => 'オリカルシア',
            66 => 'サフィラ',
          }
        ),
        'NLT2' => DiceTable::D66Table.new(
          '古代名前表（姓）',
          D66SortType::ASC,
          {
            11 => 'なし',
            12 => 'なし',
            13 => 'なし',
            14 => 'なし',
            15 => 'なし',
            16 => 'なし',
            22 => 'なし',
            23 => 'なし',
            24 => 'パル',
            25 => 'ウセジブ',
            26 => 'パカル',
            33 => 'カウィル',
            34 => 'アジャウ',
            35 => 'チャパット',
            36 => 'なし',
            44 => 'なし',
            45 => 'なし',
            46 => 'なし',
            55 => 'なし',
            56 => 'なし',
            66 => 'なし',
          }
        ),
        'NMT3' => DiceTable::D66Table.new(
          '中世時代（日本）名前表（男性名）',
          D66SortType::ASC,
          {
            11 => '九郎右衛門',
            12 => '弥太郎',
            13 => '光太夫（こうだゆう）',
            14 => '十兵衛',
            15 => '五十六',
            16 => '雪道',
            22 => '義元',
            23 => '長政',
            24 => '清正',
            25 => '政秀',
            26 => '隆盛',
            33 => '田三郎',
            34 => '晋作',
            35 => '鉄舟（てっしゅう）',
            36 => '昌幸',
            44 => '武蔵',
            45 => '親蓮（しんれん）',
            46 => '澄海（せいかい）',
            55 => '法鸞（ほうらん）',
            56 => '少林（しょうりん）',
            66 => '鑑禅（かんぜん）',
          }
        ),
        'NFT3' => DiceTable::D66Table.new(
          '中世時代（日本）名前表（女性名）',
          D66SortType::ASC,
          {
            11 => '静（しず）',
            12 => '市（いち）',
            13 => '初（はつ）',
            14 => '春（はる）',
            15 => '鶴（つる）',
            16 => 'とき',
            22 => 'しの',
            23 => '光（みつ）',
            24 => 'ゆき',
            25 => '京（きょう）',
            26 => 'すず',
            33 => 'さよ',
            34 => 'とせ',
            35 => 'とよ',
            36 => '幸（さち）',
            44 => '琴（こと）',
            45 => '美濃（みの）',
            46 => '千（せん）',
            55 => '松（まつ）',
            56 => '淀（よど）',
            66 => '月（つき）',
          }
        ),
        'NLT3' => DiceTable::D66Table.new(
          '中世時代（日本）名前表（姓）',
          D66SortType::ASC,
          {
            11 => '石田',
            12 => '今川',
            13 => '上杉',
            14 => '武田',
            15 => '大友',
            16 => '真田',
            22 => '北条',
            23 => '宮本',
            24 => '山岡',
            25 => '井伊',
            26 => '柳生',
            33 => '樋口',
            34 => '本間',
            35 => '尾高',
            36 => '大黒屋',
            44 => '森',
            45 => 'なし',
            46 => 'なし',
            55 => 'なし',
            56 => 'なし',
            66 => 'なし',
          }
        ),
        'NMT3W' => DiceTable::D66Table.new(
          '中世時代（西洋）名前表（男性名）',
          D66SortType::ASC,
          {
            11 => 'ソルガー',
            12 => 'アルデン',
            13 => 'エイモン',
            14 => 'ヴァリス',
            15 => 'ロリック',
            16 => 'セイン',
            22 => 'エルリック',
            23 => 'オズリック',
            24 => 'ジャレス',
            25 => 'エレンディル',
            26 => 'エルドレッド',
            33 => 'エリック',
            34 => 'ケルドーン',
            35 => 'ダーリン',
            36 => 'ラダガスト',
            44 => 'ダゴン',
            45 => 'エッダード',
            46 => 'アラン',
            55 => 'ジハード',
            56 => 'ライアン',
            66 => 'バルバトス',
          }
        ),
        'NFT3W' => DiceTable::D66Table.new(
          '中世時代（西洋）名前表（女性名）',
          D66SortType::ASC,
          {
            11 => 'セラフィン',
            12 => 'エリシア',
            13 => 'エララ',
            14 => 'ミリ',
            15 => 'アルテア',
            16 => 'サリエル',
            22 => 'アストリッド',
            23 => 'エルウィン',
            24 => 'モルガナ',
            25 => 'シルヴァ',
            26 => 'タリア',
            33 => 'オデッサ',
            34 => 'カサンドラ',
            35 => 'アイリス',
            36 => 'ガラドリエル',
            44 => 'ダフネ',
            45 => 'ネリダ',
            46 => 'ルーシェン',
            55 => 'フィオラ',
            56 => 'キーラ',
            66 => 'エリノラ',
          }
        ),
        'NLT3W' => DiceTable::D66Table.new(
          '中世時代（西洋）名前表（姓）',
          D66SortType::ASC,
          {
            11 => 'アイアンハンド',
            12 => 'ストームライダー',
            13 => 'ウィンドウォーカー',
            14 => 'シャドウクローク',
            15 => 'ドラゴンベイン',
            16 => 'アースシェイカー',
            22 => 'ウルフハート',
            23 => 'ハンマーフィスト',
            24 => 'ベアクロー',
            25 => 'フロストビアード',
            26 => 'ストームフォージ',
            33 => 'ムーンシャドウ',
            34 => 'スターウィスパー',
            35 => 'ストームダンサー',
            36 => 'ライトフット',
            44 => 'スターフォール',
            45 => 'ムーンビーム',
            46 => 'ホワイトソーン',
            55 => 'なし',
            56 => 'なし',
            66 => 'なし',
          }
        ),
        'NMT4' => DiceTable::D66Table.new(
          '現代（日本）名前表（男性名）',
          D66SortType::ASC,
          {
            11 => '明',
            12 => '隆',
            13 => '優',
            14 => '謙',
            15 => '直樹',
            16 => '真一',
            22 => '健一',
            23 => '純一',
            24 => '良太',
            25 => '達也',
            26 => '悠',
            33 => '龍一',
            34 => '一真',
            35 => '虎之介',
            36 => '流星',
            44 => '慎之介',
            45 => '大和',
            46 => '大輝',
            55 => '瑛人',
            56 => '義人',
            66 => '海斗',
          }
        ),
        'NFT4' => DiceTable::D66Table.new(
          '現代（日本）名前表（女性名）',
          D66SortType::ASC,
          {
            11 => '麻美',
            12 => '美紀',
            13 => '真理子',
            14 => '香織',
            15 => '美穂',
            16 => '恵美',
            22 => '佳子',
            23 => '雅子',
            24 => '真由美',
            25 => '彩',
            26 => '千沙',
            33 => '菜々子',
            34 => '真理',
            35 => '桜',
            36 => '美月',
            44 => '美優',
            45 => '麗華',
            46 => '真緒',
            55 => '陽菜',
            56 => '聖華',
            66 => '愛梨',
          }
        ),
        'NLT4' => DiceTable::D66Table.new(
          '現代（日本）名前表（姓）',
          D66SortType::ASC,
          {
            11 => '佐藤',
            12 => '鈴木',
            13 => '高橋',
            14 => '田中',
            15 => '渡辺',
            16 => '伊藤',
            22 => '山本',
            23 => '中村',
            24 => '小林',
            25 => '吉田',
            26 => '山田',
            33 => '佐々木',
            34 => '斎藤',
            35 => '木村',
            36 => '長谷部',
            44 => '井上',
            45 => '山口',
            46 => '藤井',
            55 => '櫻井',
            56 => '百瀬',
            66 => '十文字',
          }
        ),
        'NMT4W' => DiceTable::D66Table.new(
          '現代（西洋）名前表（男性名）',
          D66SortType::ASC,
          {
            11 => 'ジェームズ',
            12 => 'ジョン',
            13 => 'ロバート',
            14 => 'マイケル',
            15 => 'ウィリアム',
            16 => 'デイビッド',
            22 => 'リチャード',
            23 => 'ジョセフ',
            24 => 'トーマス',
            25 => 'チャールズ',
            26 => 'クリストファー',
            33 => 'ダニエル',
            34 => 'マシュー',
            35 => 'マーク',
            36 => 'ポール',
            44 => 'スティーブン',
            45 => 'アンドリュー',
            46 => 'ジョシュア',
            55 => 'レオナルド',
            56 => 'マクシマス',
            66 => 'マーティ',
          }
        ),
        'NFT4W' => DiceTable::D66Table.new(
          '現代（西洋）名前表（女性名）',
          D66SortType::ASC,
          {
            11 => 'メアリー',
            12 => 'ジェニファー',
            13 => 'リンダ',
            14 => 'パトリシア',
            15 => 'エリザベス',
            16 => 'スーザン',
            22 => 'ジェシカ',
            23 => 'サラ',
            24 => 'カレン',
            25 => 'ナンシー',
            26 => 'リサ',
            33 => 'マーガレット',
            34 => 'ベティ',
            35 => 'サンドラ',
            36 => 'アシュリー',
            44 => 'ドロシー',
            45 => 'キム',
            46 => 'エミリー',
            55 => 'ドナ',
            56 => 'ミシェル',
            66 => 'ジェニファー',
          }
        ),
        'NLT4W' => DiceTable::D66Table.new(
          '現代（西洋）名前表（姓）',
          D66SortType::ASC,
          {
            11 => 'スミス',
            12 => 'ジョンソン',
            13 => 'ウィリアムズ',
            14 => 'ブラウン',
            15 => 'ジョーンズ',
            16 => 'ミラー',
            22 => 'デイビス',
            23 => 'マルティネス',
            24 => 'ロドリゲス',
            25 => 'ウィルソン',
            26 => 'リーブ',
            33 => 'ムーア',
            34 => 'ジャクソン',
            35 => 'トンプソン',
            36 => 'アンダーソン',
            44 => 'テイラー',
            45 => 'マーチン',
            46 => 'ホワイト',
            55 => 'ハリス',
            56 => 'ジョイ',
            66 => 'マクフライ',
          }
        ),
        'NMT5' => DiceTable::D66Table.new(
          '超情報化時代名前表（男性名）',
          D66SortType::ASC,
          {
            11 => 'ゼファー',
            12 => 'オリオン',
            13 => 'カシウス',
            14 => 'アトラス',
            15 => 'シリウス',
            16 => 'ソル',
            22 => 'ドラコ',
            23 => 'ヴェガ',
            24 => 'マーキュリー',
            25 => 'ハレー',
            26 => 'リゲル',
            33 => 'アスター',
            34 => 'クェーサー',
            35 => 'ノヴァ',
            36 => 'ヘリオス',
            44 => 'ゲイレン',
            45 => 'ネビュラ',
            46 => 'パルサー',
            55 => 'トーラス',
            56 => 'ファン',
            66 => 'ヨリノブ',
          }
        ),
        'NFT5' => DiceTable::D66Table.new(
          '超情報化時代名前表（女性名）',
          D66SortType::ASC,
          {
            11 => 'リラ',
            12 => 'ヴィーナス',
            13 => 'アウロラ',
            14 => 'ステラ',
            15 => 'セレネ',
            16 => 'ヴェラ',
            22 => 'ジルナ',
            23 => 'ヴェガ',
            24 => 'セレスト',
            25 => 'クリサンセマ',
            26 => 'フクシア',
            33 => 'サファイア',
            34 => 'アザレア',
            35 => 'ノヴァ',
            36 => 'ベゴニア',
            44 => 'カメリア',
            45 => 'マグノリア',
            46 => 'ハイビス',
            55 => 'フリージア',
            56 => 'マリーゴールド',
            66 => 'ハナコ',
          }
        ),
        'NLT5' => DiceTable::D66Table.new(
          '超情報化時代名前表（姓）',
          D66SortType::ASC,
          {
            11 => 'ヤマモト',
            12 => 'ンコシ',
            13 => 'パテル',
            14 => 'ジェン',
            15 => 'クリシュナン',
            16 => 'シン',
            22 => 'タボ',
            23 => 'ワン',
            24 => 'クォン',
            25 => 'ウー',
            26 => 'ウォン',
            33 => 'ミヤザキ',
            34 => 'ファン',
            35 => 'セロン',
            36 => 'バティア',
            44 => 'スズキ',
            45 => 'ホー',
            46 => 'ウィズ',
            55 => 'カウル',
            56 => 'グプタ',
            66 => 'アラサカ',
          }
        ),
        'NMT6' => DiceTable::D66Table.new(
          '宇宙時代名前表（男性名）',
          D66SortType::ASC,
          {
            11 => 'アルタイア',
            12 => 'コメット',
            13 => 'フェニックス',
            14 => 'アストラ',
            15 => 'ソラス',
            16 => 'スタリオン',
            22 => 'スカイゲイザー',
            23 => 'ハイペリオン',
            24 => 'ソラリウス',
            25 => 'プラズマ',
            26 => 'スペクトル',
            33 => 'クラスター',
            34 => 'ヴォイド',
            35 => 'アストロノーム',
            36 => 'インフィニティ',
            44 => 'スパイラル',
            45 => 'センチュリオン',
            46 => 'パラダイム',
            55 => 'スターフィールド',
            56 => 'ニュートロン',
            66 => 'メテオライト',
          }
        ),
        'NFT6' => DiceTable::D66Table.new(
          '宇宙時代名前表（女性名）',
          D66SortType::ASC,
          {
            11 => 'カシオペア',
            12 => 'ルナ',
            13 => 'ソラナ',
            14 => 'アンドラ',
            15 => 'ギャレナ',
            16 => 'セレスティア',
            22 => 'スターライト',
            23 => 'ガラクシア',
            24 => 'メテオラ',
            25 => 'エクリプス',
            26 => 'ルナリス',
            33 => 'サテライト',
            34 => 'プレアデス',
            35 => 'サンフラワー',
            36 => 'ホライゾン',
            44 => 'フェノメナ',
            45 => 'アストリッド',
            46 => 'ミレニアム',
            55 => 'ヴォルテックス',
            56 => 'フュージョン',
            66 => 'マトリクス',
          }
        ),
        'NLT6' => DiceTable::D66Table.new(
          '宇宙時代名前表（姓）',
          D66SortType::ASC,
          {
            11 => 'スターボーン',
            12 => 'ネブラ',
            13 => 'ギャラクソス',
            14 => 'オリオニス',
            15 => 'スターウィーバー',
            16 => 'ライトイヤー',
            22 => 'スターダスト',
            23 => 'スカイドリーム',
            24 => 'ギャラクシオン',
            25 => 'スターファイア',
            26 => 'ラプソディ',
            33 => 'アポロ',
            34 => 'ガリレオ',
            35 => 'オービット',
            36 => 'ステラート',
            44 => 'アストラル',
            45 => 'シグマ',
            46 => 'アーク',
            55 => 'オメガ',
            56 => 'エンデバー',
            66 => 'リープ',
          }
        ),
        'CTT' => DiceTable::D66Table.new(
          '因縁種別表（因縁種別／因縁強度）',
          D66SortType::ASC,
          {
            11 => '実の父・母／6',
            12 => '養父・養母／4',
            13 => '養子／4',
            14 => 'ペット／4',
            15 => '親友／3',
            16 => '友人／2',
            22 => '実の兄弟・姉妹／6',
            23 => '義理の兄弟・姉妹／4',
            24 => '同僚／3',
            25 => '隣人／1',
            26 => 'お客さんor君のファン／1',
            33 => '実の祖父母／5',
            34 => 'クラスメイト／2',
            35 => '先輩／2',
            36 => '後輩／2',
            44 => '実の子／6',
            45 => '上司or師／3',
            46 => '部下or生徒／3',
            55 => '異性の配偶者／5',
            56 => '同性の配偶者／4',
            66 => '恋人／3',
          }
        ),
      }.freeze
      TABLES_MOD_2D = {
        'ACT' => DiceTable::Table.new(
          'アクシデント表',
          '2D6',
          [
            '一匹の蝶の羽ばたきが、地球の裏側では竜巻を巻き起こす。あなたは目の前にある他愛のない何かを拾って、置き直した。GMはランダムに指定特技を決定する。シーンに登場しているPCは全員その指定特技で判定する。判定に成功すれば何も起こらない。判定に失敗すると自分を対象としてバタフライエフェクトが発生する。その際の対象の因縁強度は6として処理する。',
            '目の前で大事故が発生する。事故に巻き込まれた人を助けなければ。シーンプレイヤーのPCは《医療》《労働》《持ち上げる》《倫理》《応急処置》《魔除け》のいずれかを指定特技として判定を行う。判定に成功すると、目の前の人を助けることができる。PCの［疲労度］が1D6点減少する。だがその人物は本来はここで死ぬべき運命だったようだ。自分の【因縁】からランダムに選んだキャラクターを対象としてバタフライエフェクトが発生する。判定に失敗するとPCの［疲労度］が1D6点増加する。',
            'あなたの出身時代では知りえない情報を知ってしまう。その情報をあなたが覚えている限り歴史に重大な影響をもたらすだろう。シーンプレイヤーのPCは《記憶力》の判定を行う。判定に失敗すると自分の【因縁】のうちの好きなキャラクターを対象としてバタフライエフェクトが発生する。',
            '誰かと出会い頭に衝突しそうになる。シーンプレイヤーは舞台となっている時代の名前表と経歴表を使用し、年齢は8D6を振って、相手の設定概要を決める。TAはその相手の設定に従って、最適な指定特技を決定する。シーンプレイヤーのPCはその指定特技で判定を行う。判定に失敗すると、相手とぶつかってしまい、シーンプレイヤーのPCの［改変度］が1D6増加する。',
            '困っている人がいる。シーンプレイヤーは舞台となっている時代の名前表と経歴表を使用し、年齢は8D6を振って、相手の設定概要を決める。TAはその相手の設定に従って、最適な指定特技を決定する。シーンプレイヤーのPCはその指定特技で判定を行う。判定に成功すれば、［改変度］が1点増加しつつも困りごとを解決してあげることができる。シーンプレイヤーのPCはお礼として好きな【アイテム】1つを獲得する。',
            'シーンプレイヤーは好きなPCを登場させることができる。そしてシーンプレイヤーはシーンに登場しているキャラクター一人を選び、二人で何かしらひと時を過ごす。シーンプレイヤーのPCは好きな指定特技で判定を行う。判定に成功すれば、選んだキャラクターを新たな【因縁】として獲得できる。相手のPCもシーンプレイヤーのPCを新たな【因縁】として獲得できる。因縁種別は「タイムトラベル仲間／因縁強度6」となる。因縁内容は状況にふさわしいものをポジティブ因縁内容表もしくはネガティブ因縁内容表から選択する。',
            '運命的な出会い。シーンプレイヤーのPCは好きな指定特技で判定を行う。判定に成功すれば、シーンプレイヤーはセッションの舞台となっている時代/ELの新たな【因縁】を獲得する。因縁内容表を用いて【因縁】を作成する。1D6を振って奇数が出ればポジティブ因縁内容表、偶数が出ればネガティブ因縁内容表を使用する。ただし因縁種別は「親友／因縁強度3」もしくは「恋人／因縁強度4」のいずれかから選択する。細かい設定は名前表や経歴表を振って決めること。',
            '遠く離れて、思い起こされる人物。シーンプレイヤーのPCは好きな指定特技で判定を行う。判定に成功すれば、自分の出身時代/ELの新たな【因縁】を獲得する。初期作成時と同じく、因縁種別表と因縁内容表を用いて【因縁】を作成する。1D6を振って奇数が出ればポジティブ因縁内容表、偶数が出ればネガティブ因縁内容表を使用する。細かい設定は名前表や経歴表を振って決めること。',
            'シーンプレイヤーは好きなPCを登場させることができる。宇宙開闢の女神があなたに微笑みかける。これを成功させれば歴史改変を修正できる、という理路が導き出される。シーンプレイヤーのPCはランダムに決定した指定特技の判定を行う。判定に成功すれば、登場しているPCのうち好きな一人の［改変度］が1D6点減少する。',
            'シーンプレイヤーは好きなPCを登場させることができる。この時代にも心を落ち着けることができる場所を見つけることができた。何をして疲れを癒そう。シーンプレイヤーのPCはランダムに決定した指定特技で判定を行う。判定に成功すれば、シーンに登場しているPC全員の［疲労度］が1D6点減少する。',
            'シーンプレイヤーは好きなPCを登場させることができる。宇宙開闢の女神があなたたちを抱擁する。これを成功させれば大幅に歴史改変を修正できる、という理路が導き出される。シーンプレイヤーのPCはランダムに決定した指定特技の判定を行う。判定に成功すれば、シーンに登場しているPC全員の［改変度］が1D6点減少する。'
          ]
        ),
        'ST4' => DiceTable::Table.new(
          '現代シーン表',
          '2D6',
          [
            '鳴り響く雷鳴と土砂降りの雨。嵐の路地でなすべきことをしろ。',
            'その地域の有名観光地。旅行者たちが自撮りにいそしんでいる。気楽なものだ。',
            'ブロックバスター映画のポスターが飾られた映画館。この時代の文化を知るには役に立つだろうか。',
            'ノートPCを開く人々でひしめき合う、有名コーヒーチェーン店。ひとまず落ち着こう。焦ってもいいことはない。',
            '古びた公園。撤去された遊具の支柱だけがさびたままに放置されており、少し寂しげだ。',
            '駅前のショッピングビル。この建物だけで欲しいものが全て手に入る。なんて便利な時代なんだ。',
            '鮮やかなネオンが照らす夜の繁華街。若者たちが新型の携帯通信端末を振り回しながら往来している。この時代が平和な証拠だろう。',
            '様々なテナントが軒を連ねる大型ショッピングモール。物質にあふれたこの時代に心の安らぎはあるのか。',
            'ヴィーガンメニューが並ぶスタイリッシュなレストラン。野菜だけを食べる習慣。この時代に流行りの多様性ってやつか。',
            '旅行者で賑わう空港のラウンジ。離着陸する飛行機は流体力学を利用した単純な作りだが、安全性は高いらしい。',
            'おだやかな風が通り抜ける。自然あふれるこんな場所も、この時代にあったのだな。'
          ]
        ),
        'TT' => DiceTable::Table.new(
          'タイムトラベル演出表',
          '2D6',
          [
            '科学者の実験で発生した七色の光を浴びてしまい、あなたの身体は分解され、違う時代で再構成された。',
            '科学者が作った物の大きさを自在に変化させる量子物質に触れてしまい、あなたの体は微小レベルまで縮んでしまった。量子世界をしばらくさまよったあと、運よく元の大きさに戻れたが別の時代へと移動してしまっていた。',
            'あなたは偶然手に入れた腕時計を気まぐれで腕に装着した。時刻を合わせようとをリューズを回すと、時空にゆがみが生じ、タイムトラベルしてしまった。腕時計はその力を使い果たし粉々にくだけた。',
            'あなたの乗った乗物が突如超高速で走り始めた。それは光速に近づきつつあった。いや、すでに光速を超えているかもしれない。光速に限りなく近い速度なら未来に、光速を超えたスピードなら過去に移動してしまうだろう。',
            '科学者が試乗をしてくれというので、乗り込んだ車が怪しげなメカが搭載されたタイムマシンだった。帰りの分の燃料は当然ない。',
            '雷に打たれ、気を失った。そして目を覚ますと、あなたがもといた時代とは、違う時代へ来てしまっていた。',
            'あなたの目の前に偶然ワームホールが出現する。ワームホールから放たれる引力には抗えず、あなたは時空を超えてしまう。',
            '緑色に光る怪しげな石を見つけたあなたは、その美しさに魅入られてしまう。どれくらい時がたっただろうか。気づけはあなたは違う時代にいた。',
            '偶然手に入れた謎の書物に書かれた呪文を読み上げた瞬間、あなたの身体は光に包まれ、違う時代へと転送されてしまった。',
            'あなたは黒ずくめの服を着た謎の組織に拘束され、怪しげなクスリを飲まされてしまった。気づけばそこは違う時代だった。',
            '自宅の机の引き出しを開けると、そこは混沌の空間が広がっていた。青い腕の先についた指のない白い手があなたを掴み（指がないにも関わらず、だ）、怪しげな板にあなたを乗せた。正体不明の青いずんぐりとしたフォルムの存在はその板に設置された操縦桿を操り、混沌の中を進んだ。しばらくしてあなたはもといた時代とは全く別の場所へ放り出された。'
          ]
        ),
      }.freeze
      TABLES_MOD_1D = {
        'RT' => DiceTable::Table.new(
          '帰還演出表',
          '1D6',
          [
            'この時代に来た方法と同じ演出で帰還できる。',
            'この時代に来た方法と同じ演出で帰還できる。',
            'この時代に来た方法と同じ演出で帰還できる。',
            '少し目を閉じて、故郷へ想いを馳せる。眼を開けると懐かしい景色が広がっている。元の時代へ戻って来たのだ。',
            '目の前の空間に別時代へのポータルが開く。それをくぐればあなたの住んでいた元の時代だ。',
            '天から神々しい光が降りそそぐ。宇宙開闢の女神が微笑みかけると、あなたは強い光に包まれる。その光はあなたを元の時代へと導く。',
          ]
        ),
        'CPT' => DiceTable::Table.new(
          'ポジティブ因縁内容表',
          '1D6',
          [
            '共存。一緒にいて自然な関係だ。',
            '互助。つらい時にはいつでもそばにいた。',
            '同志。共に道を歩むかけがえのない仲間だ。',
            '片愛。あなたは、相手のことが大好きだ。',
            '相愛。お互いのことが大好きだ。',
            '理解。何も言わなくても相手のことならなんでもわかる。',
          ]
        ),
        'CNT' => DiceTable::Table.new(
          'ネガティブ因縁内容表',
          '1D6',
          [
            '邪魔。なぜかいつも視界の端にいる。',
            '不快。一緒にいるとちょっとイラつく。',
            '厄介。関わりたくもないのに、いつもちょっかいを出してくる。',
            '嫌悪。やることなすことすべてが気に食わない。',
            '憎悪。過去の恨みか、激しい感情を持っている。',
            '天敵。不倶戴天の敵、いつでも対立して喧嘩ばかりしている。',
          ]
        ),
        'IT' => DiceTable::Table.new(
          'アイテム決定表',
          '1D6',
          [
            '癒しの品。いつでも使用可能。好きなキャラクター（自身含む）の［疲労度］を1D6点減少させることができる。使用すると失われる。',
            '癒しの品。いつでも使用可能。好きなキャラクター（自身含む）の［疲労度］を1D6点減少させることができる。使用すると失われる。',
            '幸運の品。誰か（自身含む）の判定のサイコロを振った直後に使用可能。自身の［改変度］を1点増加すれば、その判定にプラス1の修正をつけることができる。使用すると失われる。',
            '幸運の品。誰か（自身含む）の判定のサイコロを振った直後に使用可能。自身の［改変度］を1点増加すれば、その判定にプラス1の修正をつけることができる。使用すると失われる。',
            '運命の品。誰か（自身含む）がシステムおよびシナリオで用意された表を使用してダイスを振った直後に使用可能。ダイスの結果を±1ずらすことができる。ただしその表に設定されていない値にずらすことはできない。使用すると失われる。',
            '運命の品。誰か（自身含む）がシステムおよびシナリオで用意された表を使用してダイスを振った直後に使用可能。ダイスの結果を±1ずらすことができる。ただしその表に設定されていない値にずらすことはできない。使用すると失われる。',
          ]
        ),
        'AGT' => DiceTable::Table.new(
          '時代決定表',
          '1D6',
          [
            '原始時代／EL1',
            '古代／EL2',
            '中世時代／EL3',
            '現代／EL4',
            '超情報化時代／EL5',
            '宇宙時代／EL6',
          ]
        ),
      }.freeze
      TABLES_MOD_MINUS = {
        'SBET' => DiceTable::Table.new(
          '重度バタフライエフェクト表',
          '2D6',
          [
            '消失。対象の存在自体が時空連続体から完全に消失する。対象を【因縁】としていた全てのPCはその【因縁】の消失欄にチェックを入れ、その対象との【因縁】内容がネガティブなら［疲労度］が「対象の因縁強度+3」点減少、ポジティブなら［疲労度］と［改変度］が「対象の因縁強度+3」点ずつ増加する。',
            '消失。対象の存在自体が時空連続体から完全に消失する。対象を【因縁】としていた全てのPCはその【因縁】の消失欄にチェックを入れ、その対象との【因縁】内容がネガティブなら［疲労度］が「対象の因縁強度+3」点減少、ポジティブなら［疲労度］と［改変度］が「対象の因縁強度+3」点ずつ増加する。',
            '消失の可能性。対象の存在自体があいまいになってしまう。表をふったプレイヤーはランダムに選んだ特技を指定特技として判定する。判定に失敗すると対象の存在は消失する。対象を【因縁】としていた全てのPCは対象の【因縁】の消失欄にチェックを入れ、その対象との因縁内容がネガティブなら［疲労度］が「対象の因縁強度+2」点減少、ポジティブなら［疲労度］と［改変度］が「対象の因縁強度+2」点ずつ増加する。',
            '消失の可能性。対象の存在自体があいまいになってしまう。表をふったプレイヤーはランダムに選んだ特技を指定特技として判定する。判定に失敗すると対象の存在は消失する。対象を【因縁】としていた全てのPCは対象の【因縁】の消失欄にチェックを入れ、その対象との因縁内容がネガティブなら［疲労度］が「対象の因縁強度+2」点減少、ポジティブなら［疲労度］と［改変度］が「対象の因縁強度+2」点ずつ増加する。',
            '時代変更。対象の存在している時代が変わってしまう。存在する時代が変わってしまえば、もはやPCのことは覚えていないだろう。表を振ったプレイヤーは時代決定表を振って、変更先の時代を決定する。現在と同じ時代となれば、何も起こらない。違う時代になってしまったら、対象を【因縁】としていた全てのPCは対象の【因縁】の消失欄にチェックを入れ、その対象との因縁内容がネガティブなら［疲労度］が「対象の因縁強度+1」点減少、ポジティブなら［疲労度］と［改変度］が「対象の因縁強度+1」点ずつ増加する。',
            '時代変更。対象の存在している時代が変わってしまう。存在する時代が変わってしまえば、もはやPCのことは覚えていないだろう。表を振ったプレイヤーは時代決定表を振って、変更先の時代を決定する。現在と同じ時代となれば、何も起こらない。違う時代になってしまったら、対象を【因縁】としていた全てのPCは対象の【因縁】の消失欄にチェックを入れ、その対象との因縁内容がネガティブなら［疲労度］が「対象の因縁強度+1」点減少、ポジティブなら［疲労度］と［改変度］が「対象の因縁強度+1」点ずつ増加する。',
            '死亡。対象は死亡してしまう。対象を【因縁】としていた全てのPCは対象の【因縁】の死亡欄にチェックを入れ、［疲労度］と［改変度］が「対象の因縁強度」点ずつ増加する。',
            '死亡。対象は死亡してしまう。対象を【因縁】としていた全てのPCは対象の【因縁】の死亡欄にチェックを入れ、［疲労度］と［改変度］が「対象の因縁強度」点ずつ増加する。',
            '別人化。対象はあなたとの因縁種別は維持したまま、完全な別人になってしまう。表を振ったプレイヤーは名前表、経歴表を用いて新たな設定を決め直すこと。年齢・性別は変化しない。対象を【因縁】としていた全てのPCは［改変度］が「対象の因縁強度」点ずつ増加する。',
            '因縁種別変化。対象との因縁種別が変わってしまう。表を振ったプレイヤ―は因縁種別表を使用して新たな因縁種別を決定する。その結果、元の因縁種別と違うものになったら、表を振ったプレイヤーのPCは［改変度］が「元の因縁強度」点だけ増加する。',
            '忘却。対象はあなたのことを忘れてしまう。表を振ったプレイヤーのPCはその対象との因縁内容がネガティブなら［疲労度］が「対象の因縁強度」点減少、ポジティブなら［疲労度］が「対象の因縁強度」点増加する。',
            '困窮。対象は経済的に困窮してしまい、その生活は荒れ果ててしまう。その対象との因縁内容がポジティブだった場合、表を振ったプレイヤーのPCは《経済》もしくは《心理》を指定特技として判定を行うことができる。判定に失敗した場合、そのPCは［疲労度］を「対象の因縁強度」点増加させたうえ、ネガティブ因縁内容表を使用して新たに決定し直さなければならない。もともと因縁内容がネガティブだった場合は何も起こらない。',
            '病。対象は不治の病に侵されてしまう。表を振ったプレイヤーのPCは《医療》《漢方》《縁起》のいずれかを指定特技として判定を行うことができる。判定に失敗すると対象は不治の病により死亡してしまう。この表の出目「1or2」の効果を適用すること。',
            '年齢変化。対象の年齢が変わってしまう。表を振ったプレイヤーはまず1D6を振る。奇数なら年齢は減り、偶数なら年齢は増えてしまう。何歳変化するかは1D6を振って決定する。ただし、6の目が出た場合は追加で1D6を振る。6が出るたびにこれを繰り返す。最終的に全ての出目の合計だけ年齢が変化する。変化後の年齢が0才未満になってしまった場合は、対象の存在が消えてしまう。この表の出目「-5or-4」の効果を適用すること。一方、変化後の年齢が「寿命＝30+(対象のEL×10)歳」以上になった場合は、寿命を迎えて死亡していないかどうかを決めるため、ランダムに決定した指定特技で判定する。判定に失敗すると対象は死亡してしまう。この表の出目「1or2」の効果を適用すること。また、対象の存在が消えるもしくは死亡しなかった場合でも、結果が矛盾した状態（パラドックス）になったとTAが判断した場合、そのPCの［改変度］が「対象の因縁強度」点増加する。',
            '性別反転。対象の性別が反転してしまう。現在の因縁種別が性別を含むものであれば変更する。例えば次のような形。「実の父親」←→「実の母親」、「実の兄弟」←→「実の姉妹」、「実の祖父」←→「実の祖母」、「養父」←→「養母」、「同性の配偶者」←→「異性の配偶者」など。対象を【因縁】としていた全てのPCのプレイヤーがこの変化を受け入れるのであれば他には何も起こらない。受け入れられないのであれば、そのPCの［疲労度］が「対象の因縁強度」点増加する。また、結果が矛盾した状態（パラドックス）になったとTAが判断した場合、そのPCの［改変度］が「対象の因縁強度」点増加する。',
            '性格反転。対象の性格が反転する。その対象との今の因縁内容がネガティブなら、ポジティブ因縁内容表を使用して決定し直す。今の因縁内容がポジティブなら、ネガティブ因縁内容表を使用して因縁内容を決め直すこと。表を振ったプレイヤーがこの変化を受け入れるのであれば他には何も起こらない。受け入れられないのであれば、そのPCの［疲労度］が「対象の因縁強度」点増加する。',
            '因縁内容変化。対象との因縁内容が変わってしまう。その対象との因縁内容がポジティブだった場合、ポジティブ因縁内容表を、ネガティブだった場合、ネガティブ因縁内容表を使用して因縁内容を決め直すこと。表を振ったプレイヤーがこの変化を受け入れるのであれば他には何も起こらない。受け入れられないのであれば、そのPCの［疲労度］が「対象の因縁強度」点増加する。',
            '宇宙開闢の女神が微笑む。何も変化は起こらなかった。',
          ]
        ),
        'MBET' => DiceTable::Table.new(
          '軽度バタフライエフェクト表',
          '2D6',
          [
            '激痛。耐え難い激しい痛みが全身を襲う。対象の［疲労度］が「対象の因縁強度」点、［改変度］が「対象の因縁強度+2D6」点増加する。',
            '激痛。耐え難い激しい痛みが全身を襲う。対象の［疲労度］が「対象の因縁強度」点、［改変度］が「対象の因縁強度+2D6」点増加する。',
            '吐血。激しいせき込みの末、吐血してしまう。対象の［疲労度］が「対象の因縁強度」点、［改変度］が「対象の因縁強度+2D6-1」点増加する。',
            '吐血。激しいせき込みの末、吐血してしまう。対象の［疲労度］が「対象の因縁強度」点、［改変度］が「対象の因縁強度+2D6-1」点増加する。',
            '頭痛。頭が割れるような激しい頭痛に襲われる。対象の［疲労度］が「対象の因縁強度の半分」点増加、［改変度］が「対象の因縁強度と同じ値+1D6」点増加する。',
            '頭痛。頭が割れるような激しい頭痛に襲われる。対象の［疲労度］が「対象の因縁強度の半分」点増加、［改変度］が「対象の因縁強度と同じ値+1D6」点増加する。',
            '時間結晶化。身体の一部が時間結晶化する。対象の［改変度］が「対象の因縁強度の半分」点増加する。また、対象がPCだった場合、このセッションの間、好きな【タイムトラベラースキル】を1つだけ追加で修得できる。この【タイムトラベラースキル】はセッション終了時に失われる。',
            '前兆。軽いめまいを感じる。嫌な前兆だ。対象の［疲労度］が1点、対象の［改変度］が「対象の因縁強度の半分」点増加する。',
            '遭遇。自分自身に出会ってしまい時空連続体に亀裂が生じる。何かの事情でこの時代に訪れた別時間軸の自分だろうか。対象の［改変度］が「対象の因縁強度」点増加する。',
            '半透明化。身体がはっきりと半透明になってきた。対象の［改変度］が「対象の因縁強度の半分」点増加する。',
            '外見変化。表を振ったプレイヤーは時代決定表を使用して時代を一つ決定し、その時代の経歴表を使用する。対象はその結果に合った外見・服装に見た目が変化してしまう。対象の［改変度］が「対象の因縁強度の半分」点増加する。',
            '記憶喪失。記憶が混濁し失われていく。対象がPCだった場合、修得している【スキル】のうち、ランダムに選択した【クラススキル】1つがこのセッションの間、使用不能になる。クライマックスフェイズでこのバタフライエフェクトを発生させたPCの【バタフライエフェクト問題】が解決されれば、この効果で使用不能になった【クラススキル】は即座に使用可能になる。対象の［改変度］が「対象の因縁強度の半分」点増加する。',
            '半透明化の兆し。身体が半透明になってきた気がする。対象の［改変度］が1点増加する。',
            '年齢変化。急激に対象の年齢が変化する。表を振ったプレイヤーはまず1D6を振る。奇数なら1D6才若返り、偶数なら1D6才年を取ってしまう。対象の［改変度］が1点増加する。',
            '過去改変。自身の過去が少しだけ書き換わる。対象は新たな経歴を自分の出身時代の経歴表を振って決め直すこと。対象の［改変度］が1点増加する。また、対象がPCだった場合、修得している【クラススキル】を自分のクラスの別の【クラススキル】に変更することができる。',
            '郷愁。ふと意識が宙に浮かび、目の前に故郷の風景が広がる。誰でも郷愁を感じるだろう。対象の［改変度］が1点増加する。',
            '不安。落ち着かない気分になる。対象の［改変度］が1点増加する。',
            '宇宙開闢の女神が微笑む。何も変化は起こらなかった。',
          ]
        ),
        'TBET' => DiceTable::Table.new(
          'タイムトラベラー重度バタフライエフェクト表',
          '2D6',
          [
            '消失。PCの存在自体が時空連続体から完全に消失する。PCはロストする。',
            '消失。PCの存在自体が時空連続体から完全に消失する。PCはロストする。',
            '消失の可能性。PCの存在自体があいまいになってしまう。ランダムに選んだ指定特技で判定を行う。判定に失敗すると対象のPCは消失する。PCはロストする。',
            '消失の可能性。PCの存在自体があいまいになってしまう。ランダムに選んだ指定特技で判定を行う。判定に失敗すると対象のPCは消失する。PCはロストする。',
            '時代変更。PCの存在している時代が変わってしまう。時代決定表を振って、新たな出身時代を決定する。違う時代になってしまったら、全ての【因縁】の消失欄にチェックを入れる。また、取得している【クラススキル】を全て失うが、同じ数だけ新たな出身時代の【クラススキル】を取得する。',
            '時代変更。PCの存在している時代が変わってしまう。時代決定表を振って、新たな出身時代を決定する。違う時代になってしまったら、全ての【因縁】の消失欄にチェックを入れる。また、取得している【クラススキル】を全て失うが、同じ数だけ新たな出身時代の【クラススキル】を取得する。',
            '永続時間結晶化。PCの身体の一部が永続的に時間結晶化する。タイムトラベラー特有の能力が強化される。好きな【タイムトラベラースキル】を追加で修得できる。この【スキル】は次回以降のセッションでも修得したままとなる。',
            '死亡。PCは死亡してしまう。PCはロストする。',
            '忘却。PCは記憶を失う。全ての【因縁】の消失欄にチェックを入れる。',
            '改変体質。宇宙開闢の加護の効果が薄まり、PCは歴史改変を受けやすい性質を得てしまう。今後、PCの［改変度］が増加する値が常にプラス1されてしまう。タイムトラベラースキル【時間盾】などによる［改変度］増加量を減少させる効果の前に適用される。',
            'コミュニケーション障害。宇宙開闢の加護の効果が薄まり、PCはタイムトラベル先の言語を理解しにくくなってしまう。今後、PCが行う接近判定に常にマイナス1の修正が付いてしまう。',
            '病。PCは病に侵されてしまう。病が治るまで（次回から3セッションの間）、セッション開始時の［疲労度］が3になり、セッション中も3より小さい値にならない。',
            '年齢変化。急激にPCの年齢が変化する。まず1D6を振る。奇数なら1D6才若返り、偶数なら1D6才年を取ってしまう。',
            '経歴変化。PCの経歴が変化してしまう。自分の時代の経歴表を振って、新しい経歴を決め直すこと。',
            '性別反転。PCの性別が反転してしまう。',
            '語尾変化。PCは時代特有の語尾が口をついて出てしまうようになる。語尾はセッションの舞台となった時代ごとに下記の通り。原始時代：「ウホ」、古代：「であ～る」、中世時代：「ゴザル」、現代：「じゃん」、超情報化時代：「ゼ」、宇宙時代：「ペモ」。',
            '時代侵食。PCの過去に別の時代が少しだけ侵食する。修得している【クラススキル】1つを自分のクラスとは別のクラスの【クラススキル】に変更することができる。',
            '宇宙開闢の女神が微笑む。何も変化は起こらなかった。',
          ]
        ),
      }.freeze
      register_prefix(RTT.prefixes, TABLES.keys, TABLES_MOD_2D.keys, TABLES_MOD_1D.keys, TABLES_MOD_MINUS.keys)
    end
  end
end
