bcdice/BCDice

View on GitHub
lib/bcdice/game_system/Torg1_5.rb

Summary

Maintainability
A
2 hrs
Test Coverage
A
91%
# frozen_string_literal: true

require 'bcdice/game_system/Torg'

module BCDice
  module GameSystem
    class Torg1_5 < Torg
      # ゲームシステムの識別子
      ID = 'Torg1.5'

      # ゲームシステム名
      NAME = 'トーグ1.5版'

      # ゲームシステム名の読みがな
      SORT_KEY = 'とおく1.5'

      register_prefix(Torg.prefixes)

      # 一般結果表 成功度
      def get_torg_success_level(value)
        success_table = [
          [0, "ぎりぎり"],
          [1, "ふつう"],
          [3, "まあよい"],
          [7, "かなりよい"],
          [12, "すごい"]
        ]

        return get_torg_table_result(value, success_table)
      end

      # 対人行為結果表
      # 威圧/威嚇(intimidate/Test)
      def get_torg_interaction_result_intimidate_test(value)
        interaction_results_table = [
          [0, "萎縮"],
          [5, "技能なし"],
          [10, "逆転負け"],
          [15, "モラル崩壊"],
          [17, "プレイヤーズコール"]
        ]

        return get_torg_table_result(value, interaction_results_table)
      end

      # 挑発/トリック(Taunt/Trick)
      def get_torg_interaction_result_taunt_trick(value)
        interaction_results_table = [
          [0, "萎縮"],
          [5, "技能なし"],
          [10, "逆転負け"],
          [15, "高揚/逆転負け"],
          [17, "プレイヤーズコール"]
        ]

        return get_torg_table_result(value, interaction_results_table)
      end

      # 間合い(maneuver)
      def get_torg_interaction_result_maneuver(value)
        interaction_results_table = [
          [0, "疲労"],
          [5, "萎縮"],
          [10, "技能なし"],
          [15, "逆転負け/疲労"],
          [17, "プレイヤーズコール"]
        ]

        return get_torg_table_result(value, interaction_results_table)
      end

      # オーズダメージチャート
      def get_torg_damage_ords(value)
        damage_table_ords = [
          [0, "1"],
          [1, "O1"],
          [2, "K1"],
          [3, "O2"],
          [4, "K2"],
          [5, "転倒 O3"],
          [6, "転倒 K3"],
          [7, "転倒 K/O4"],
          [8, "1レベル負傷  KO4"],
          [9, "1レベル負傷  K/O5"],
          [10, "1レベル負傷  KO5"],
          [11, "2レベル負傷  K/O6"],
          [12, "2レベル負傷  KO6"],
          [13, "3レベル負傷  K/O7"],
          [14, "3レベル負傷  KO7"],
          [15, "4レベル負傷  KO8"]
        ]

        return get_torg_damage(value, 4, 8, damage_table_ords)
      end

      # ポシビリティー能力者ダメージチャート
      def get_torg_damage_posibility(value)
        damage_table_posibility = [
          [0, "1"],
          [1, "1"],
          [2, "O1"],
          [3, "K1"],
          [4, "2"],
          [5, "O2"],
          [6, "転倒 K2"],
          [7, "転倒 O3"],
          [8, "転倒 K3"],
          [9, "転倒 K/O3"],
          [10, "1レベル負傷  K/O4"],
          [11, "1レベル負傷  K/O4"],
          [12, "1レベル負傷  KO4"],
          [13, "2レベル負傷  K/O5"],
          [14, "2レベル負傷  KO5"],
          [15, "3レベル負傷  KO5"]
        ]

        return get_torg_damage(value, 3, 5, damage_table_posibility)
      end

      def get_torg_damage(value, max_damage, max_shock, damage_table)
        if value < 0
          return '1'
        end

        table_max_value = damage_table.length - 1

        if value <= table_max_value
          return get_torg_table_result(value, damage_table)
        end

        over_kill_value = ((value - table_max_value) / 2).to_i
        over_kill_damage = max_damage + over_kill_value * 1
        over_kill_shock = max_shock + over_kill_value * 1

        return "#{over_kill_damage}レベル負傷  KO#{over_kill_shock}"
      end
    end
  end
end