Class: BCDice::GameSystem::SwordWorld2_0

Inherits:
SwordWorld show all
Defined in:
lib/bcdice/game_system/SwordWorld2_0.rb,
lib/bcdice/game_system/sword_world/transcendent_test.rb

Direct Known Subclasses

SwordWorld2_5

Defined Under Namespace

Classes: TranscendentTest

Constant Summary collapse

ID =

ゲームシステムの識別子

'SwordWorld2.0'
NAME =

ゲームシステム名

'ソードワールド2.0'
SORT_KEY =

ゲームシステム名の読みがな

'そおとわあると2.0'
HELP_MESSAGE =

ダイスボットの使い方

<<~INFO_MESSAGE_TEXT
  自動的成功、成功、失敗、自動的失敗の自動判定を行います。

  ・レーティング表 (Kx)
   "Kキーナンバー+ボーナス"の形で記入します。
   ボーナスの部分に「K20+K30」のようにレーティングを取ることは出来ません。
   また、ボーナスは複数取ることが出来ます。
   レーティング表もダイスロールと同様に、他のプレイヤーに隠れてロールすることも可能です。
   例)K20   K10+5   k30   k10+10   Sk10-1   k10+5+2

  ・クリティカル値の設定
   クリティカル値は"[クリティカル値]"で指定します。
   指定しない場合はクリティカル値10とします。
   クリティカル処理が必要ないときは13などとしてください。(防御時などの対応)
   またタイプの軽減化のために末尾に「@クリティカル値」でも処理するようにしました。
   例)K20[10]   K10+5[9]   k30[10]   k10[9]+10   k10-5@9

  ・レーティング表の半減 (HKx, KxH+N)
   レーティング表の先頭または末尾に"H"をつけると、レーティング表を振って最終結果を半減させます。
   末尾につけた場合、直後に修正ををつけることで、半減後の加減算を行うことができます。
   この際、複数の項による修正にはカッコで囲うことが必要です(カッコがないとパースに失敗します)
   クリティカル値を指定しない場合、クリティカルなしと扱われます。
   例)HK20  K20h  HK10-5@9  K10-5@9H  K20gfH  K20+8H+2  K20+8H(1+1)

  ・ダイス目の修正(運命変転やクリティカルレイ用)
   末尾に「$修正値」でダイス目に修正がかかります。
   $+1と修正表記ならダイス目に+修正、$9のように固定値ならダイス目をその出目に差し替え。
   クリティカルした場合でも固定値や修正値の適用は最初の一回だけです。
   例)K20$+1   K10+5$9   k10-5@9$+2   k10[9]+10$9

  ・首切り刀用レーティング上昇 r10
   例)K20r10 K30+24@8R10 K40+24@8$12r10

  ・グレイテストフォーチュンは末尾に gf
   例)K20gf K30+24@8GF K40+24@8$12r10gf

  ・超越判定用に2d6ロールに 2D6@10 書式でクリティカル値付与が可能に。
   例)2D6@10 2D6@10+11>=30

  ・成長 (Gr)
   末尾に数字を付加することで、複数回の成長をまとめて行えます。
   例)Gr3

  ・防御ファンブル表 (FT)
   防御ファンブル表を出すことができます。

  ・絡み効果表 (TT)
   絡み効果表を出すことができます。
INFO_MESSAGE_TEXT

Instance Attribute Summary

Attributes inherited from Base

#d66_sort_type, #default_cmp_op, #default_target_number, #randomizer, #reroll_dice_reroll_threshold, #round_type, #sides_implicit_d, #upper_dice_reroll_threshold

Instance Method Summary collapse

Methods inherited from SwordWorld

#result_2d6

Methods inherited from Base

#change_text, #check_result, command_pattern, #enable_debug, #enabled_d9?, #eval, eval, #grich_text, prefixes_pattern, register_prefix, register_prefix_from_super_class, #sort_add_dice?, #sort_barabara_dice?

Methods included from Translate

#translate

Constructor Details

#initialize(command) ⇒ SwordWorld2_0

Returns a new instance of SwordWorld2_0.



73
74
75
76
# File 'lib/bcdice/game_system/SwordWorld2_0.rb', line 73

def initialize(command)
  super(command)
  @rating_table = 2
end

Instance Method Details

#eval_game_system_specific_command(command) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/bcdice/game_system/SwordWorld2_0.rb', line 78

def eval_game_system_specific_command(command)
  case command
  when /^Gr(\d+)?/i
    if command =~ /^Gr(\d+)/i
      growth(Regexp.last_match(1).to_i)
    else
      growth
    end
  when /^2D6?@\d+/i
    transcendent_parser = Command::Parser.new(/2D6?/i, round_type: BCDice::RoundType::CEIL)
                                         .enable_critical
                                         .restrict_cmp_op_to(nil, :>=, :>)
    cmd = transcendent_parser.parse(command)

    unless cmd
      return nil
    end

    node = TranscendentTest.new(cmd.critical, cmd.modify_number, cmd.cmp_op, cmd.target_number)
    node.execute(@randomizer)
  when 'FT'
    get_fumble_table
  when 'TT'
    get_tangle_table
  else
    super(command)
  end
end

#get_ability_by_dice(dice) ⇒ Object



135
136
137
# File 'lib/bcdice/game_system/SwordWorld2_0.rb', line 135

def get_ability_by_dice(dice)
  ['器用度', '敏捷度', '筋力', '生命力', '知力', '精神力'][dice - 1]
end

#get_fumble_tableObject



139
140
141
142
143
144
145
146
147
148
149
150
# File 'lib/bcdice/game_system/SwordWorld2_0.rb', line 139

def get_fumble_table()
  table = [
    'この表を2回振り、その両方を適用する。(同じ出目による影響は累積しない)。この自動失敗により得られる経験点は、+50点される',
    'ダメージに、攻撃者を強化している「剣のかけら」の数が追加される',
    'ダメージに、攻撃者の「レベル」が追加される',
    'ダメージ決定を2回行い、より高い方を採用する',
    '合算ダメージを2倍する',
    '防護点無効'
  ]
  text, num = get_table_by_1d6(table)
  return "防御ファンブル表(#{num}) → #{text}"
end

#get_tangle_tableObject



152
153
154
155
156
157
158
159
160
161
162
163
# File 'lib/bcdice/game_system/SwordWorld2_0.rb', line 152

def get_tangle_table()
  table = [
    '頭や顔:牙や噛みつきなどにおける命中力判定及び、魔法の行使やブレスに-2のペナルティ修正を受ける',
    '武器や盾:武器の使用不可、又は盾の回避力修正及び防護点を無効化する',
    '腕や手:武器や爪などにおける命中力判定に-2のペナルティ修正、盾を持つ腕方の腕ならその盾の回避力修正及び防護点を無効化する',
    '脚や足:移動不可、更に回避力判定に-2のペナルティ修正を受ける ※両足に絡んでも累積しない',
    '胴体:生命・精神抵抗力を基準値に用いる判定を除き、あらゆる行為判定に-1のペナルティ修正を受ける',
    '特殊:尻尾や翼などに命中。絡められた部位を使用する判定において-2のペナルティ修正、またはそこが使えていたことによるボーナス修正を失う ※存在しない場合は決め直し'
  ]
  text, num = get_table_by_1d6(table)
  return "絡み効果表(#{num}) → #{text}"
end

#growth(count = 1) ⇒ Object



121
122
123
# File 'lib/bcdice/game_system/SwordWorld2_0.rb', line 121

def growth(count = 1)
  ((1..count).map { growth_step }).join " | "
end

#growth_stepObject



125
126
127
128
129
130
131
132
133
# File 'lib/bcdice/game_system/SwordWorld2_0.rb', line 125

def growth_step
  d1 = @randomizer.roll_once(6)
  d2 = @randomizer.roll_once(6)

  a1 = get_ability_by_dice(d1)
  a2 = get_ability_by_dice(d2)

  return a1 != a2 ? "[#{d1},#{d2}]->(#{a1} or #{a2})" : "[#{d1},#{d2}]->(#{a1})"
end

#rating_parserObject



107
108
109
# File 'lib/bcdice/game_system/SwordWorld2_0.rb', line 107

def rating_parser
  return RatingParser.new(version: :v2_0)
end

#rollDice(command) ⇒ Object



111
112
113
114
115
116
117
118
119
# File 'lib/bcdice/game_system/SwordWorld2_0.rb', line 111

def rollDice(command)
  unless command.greatest_fortune
    return super(command)
  end

  dice = @randomizer.roll_once(6)

  return dice * 2, "#{dice},#{dice}"
end