bcdice 3.13.0 → 3.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +45 -0
  3. data/i18n/Arianrhod/ko_kr.yml +3 -0
  4. data/i18n/Cthulhu/en_us.yml +11 -0
  5. data/i18n/CyberpunkRed/ja_jp.yml +389 -0
  6. data/i18n/FinalFantasyXIV/en_us.yml +4 -0
  7. data/i18n/FinalFantasyXIV/ja_jp.yml +4 -0
  8. data/i18n/FutariSousa/ja_jp.yml +158 -1
  9. data/i18n/KizunaBullet/ja_jp.yml +653 -0
  10. data/i18n/MonotoneMuseum/ja_jp.yml +246 -14
  11. data/i18n/SkynautsBouken/ja_jp.yml +114 -0
  12. data/i18n/TensaiGunshiNiNaro/ja_jp.yml +126 -0
  13. data/i18n/UnsungDuet/ja_jp.yml +62 -0
  14. data/i18n/UnsungDuet/ko_kr.yml +62 -0
  15. data/i18n/en_us.yml +5 -0
  16. data/lib/bcdice/dice_table/range_table.rb +24 -0
  17. data/lib/bcdice/game_system/Agnostos.rb +248 -0
  18. data/lib/bcdice/game_system/AniMalus.rb +99 -59
  19. data/lib/bcdice/game_system/Arianrhod_Korean.rb +30 -0
  20. data/lib/bcdice/game_system/BlackJacket.rb +244 -0
  21. data/lib/bcdice/game_system/ConvictorDrive.rb +5 -4
  22. data/lib/bcdice/game_system/Cthulhu_English.rb +59 -0
  23. data/lib/bcdice/game_system/CyberpunkRed.rb +14 -4
  24. data/lib/bcdice/game_system/DivineCharger.rb +841 -0
  25. data/lib/bcdice/game_system/FinalFantasyXIV.rb +115 -0
  26. data/lib/bcdice/game_system/FinalFantasyXIV_English.rb +39 -0
  27. data/lib/bcdice/game_system/FullFace.rb +39 -10
  28. data/lib/bcdice/game_system/FutariSousa.rb +88 -8
  29. data/lib/bcdice/game_system/Insane_Korean.rb +1 -1
  30. data/lib/bcdice/game_system/InvisibleLiar.rb +79 -0
  31. data/lib/bcdice/game_system/KizunaBullet.rb +240 -0
  32. data/lib/bcdice/game_system/KyokoShinshoku.rb +51 -8
  33. data/lib/bcdice/game_system/MonotoneMuseum.rb +14 -1
  34. data/lib/bcdice/game_system/NRR.rb +2 -2
  35. data/lib/bcdice/game_system/ShuumatsuBargainWars.rb +203 -0
  36. data/lib/bcdice/game_system/SkynautsBouken.rb +45 -130
  37. data/lib/bcdice/game_system/SwordWorld.rb +1 -1
  38. data/lib/bcdice/game_system/TensaiGunshiNiNaro.rb +228 -0
  39. data/lib/bcdice/game_system/TheOneRing2nd.rb +406 -0
  40. data/lib/bcdice/game_system/TheUnofficialHollowKnightRPG.rb +185 -0
  41. data/lib/bcdice/game_system/TrailOfCthulhu.rb +139 -0
  42. data/lib/bcdice/game_system/UnsungDuet.rb +17 -75
  43. data/lib/bcdice/game_system/UnsungDuet_Korean.rb +41 -0
  44. data/lib/bcdice/game_system/Utakaze.rb +55 -2
  45. data/lib/bcdice/game_system/Warhammer4.rb +124 -3
  46. data/lib/bcdice/game_system/Yotabana.rb +62 -0
  47. data/lib/bcdice/game_system/cyberpunk_red/tables.rb +111 -473
  48. data/lib/bcdice/game_system/kizuna_bullet/tables.rb +171 -0
  49. data/lib/bcdice/game_system.rb +16 -0
  50. data/lib/bcdice/version.rb +1 -1
  51. metadata +30 -2
@@ -0,0 +1,115 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class FinalFantasyXIV < Base
6
+ # ゲームシステムの識別子
7
+ ID = "FinalFantasyXIV"
8
+
9
+ # ゲームシステム名
10
+ NAME = "FINAL FANTSY XIV TTRPG"
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = "ふあいなるふあんたしい14TTRPG"
14
+
15
+ HELP_MESSAGE = <<~TEXT
16
+ ・アビリティ判定 nAB+m>=x
17
+ d20のアビリティ判定を行う。ダイス数が指定された場合、大きい出目1個を採用する。
18
+ n: ダイス数(省略時 1)
19
+ m: 修正値(省略可)
20
+ x: 目標値(省略可)
21
+ 基本効果のみ、ダイレクトヒット、クリティカルを自動判定。
22
+ 例)AB, AB+5, AB+5>=14, 2AB+5>=14
23
+ ・行為判定 nDC+m>=x
24
+ アビリティ判定と同様。
25
+ 失敗、成功を自動判定。
26
+ TEXT
27
+
28
+ register_prefix('\d*AB', '\d*DC')
29
+
30
+ def eval_game_system_specific_command(command)
31
+ return abirity_roll(command) || action_roll(command)
32
+ end
33
+
34
+ private
35
+
36
+ def abirity_roll(command)
37
+ parser = Command::Parser.new("AB", round_type: round_type)
38
+ .enable_prefix_number()
39
+ .restrict_cmp_op_to(:>=, nil)
40
+ cmd = parser.parse(command)
41
+ return nil unless cmd
42
+
43
+ times = cmd.prefix_number || 1
44
+
45
+ dice_list_full = @randomizer.roll_barabara(times, 20).sort
46
+ dice_list_full_str = "[#{dice_list_full.join(',')}]" if times > 1
47
+
48
+ dice_list = dice_list_full[-1, 1]
49
+ dice_result = dice_list[0]
50
+
51
+ total = dice_result + cmd.modify_number
52
+
53
+ result =
54
+ if dice_result == 20
55
+ Result.critical(translate("critical"))
56
+ elsif cmd.cmp_op.nil?
57
+ Result.new
58
+ elsif total >= cmd.target_number
59
+ Result.success(translate("FinalFantasyXIV.directhit"))
60
+ else
61
+ Result.failure(translate("FinalFantasyXIV.normalhit"))
62
+ end
63
+
64
+ sequence = [
65
+ "(#{cmd.to_s(:after_modify_number)})",
66
+ dice_list_full_str,
67
+ "#{dice_result}[#{dice_list.join(',')}]#{Format.modifier(cmd.modify_number)}",
68
+ total,
69
+ result.text
70
+ ].compact
71
+
72
+ result.text = sequence.join(" > ")
73
+ result
74
+ end
75
+
76
+ def action_roll(command)
77
+ parser = Command::Parser.new("DC", round_type: round_type)
78
+ .enable_prefix_number()
79
+ .restrict_cmp_op_to(:>=, nil)
80
+ cmd = parser.parse(command)
81
+ return nil unless cmd
82
+
83
+ times = cmd.prefix_number || 1
84
+
85
+ dice_list_full = @randomizer.roll_barabara(times, 20).sort
86
+ dice_list_full_str = "[#{dice_list_full.join(',')}]" if times > 1
87
+
88
+ dice_list = dice_list_full[-1, 1]
89
+ dice_result = dice_list[0]
90
+
91
+ total = dice_result + cmd.modify_number
92
+
93
+ result =
94
+ if cmd.cmp_op.nil?
95
+ Result.new
96
+ elsif total >= cmd.target_number
97
+ Result.success(translate("success"))
98
+ else
99
+ Result.failure(translate("failure"))
100
+ end
101
+
102
+ sequence = [
103
+ "(#{cmd.to_s(:after_modify_number)})",
104
+ dice_list_full_str,
105
+ "#{dice_result}[#{dice_list.join(',')}]#{Format.modifier(cmd.modify_number)}",
106
+ total,
107
+ result.text
108
+ ].compact
109
+
110
+ result.text = sequence.join(" > ")
111
+ result
112
+ end
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bcdice/game_system/FinalFantasyXIV"
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class FinalFantasyXIV_English < FinalFantasyXIV
8
+ # ゲームシステムの識別子
9
+ ID = "FinalFantasyXIV:English"
10
+
11
+ # ゲームシステム名
12
+ NAME = "FINAL FANTSY XIV TTRPG(English)"
13
+
14
+ # ゲームシステム名の読みがな
15
+ SORT_KEY = "国際化:English:FINAL FANTASY XIV TTRPG"
16
+
17
+ HELP_MESSAGE = <<~TEXT
18
+ Ability Checks nAB+m>=CR
19
+ Perform a d20 ability check. If a die count is specified, the highest roll is adopted.
20
+ n: die count(optional)
21
+ m: modifiy number(optional)
22
+ CR: Challenge Ratting(optional)
23
+ Base Effect only, Direct hit and Critical are automatically evaluated.
24
+ Example: AB, AB+5, AB+5>=14, 2AB+5>=14
25
+ Making checks nDC+m>=CR
26
+ Same as ability check.
27
+ Success and Failure ar automatically evaluated.
28
+ TEXT
29
+
30
+ register_prefix_from_super_class()
31
+
32
+ def initialize(command)
33
+ super(command)
34
+
35
+ @locale = :en_us
36
+ end
37
+ end
38
+ end
39
+ end
@@ -14,43 +14,54 @@ module BCDice
14
14
 
15
15
  # ダイスボットの使い方
16
16
  HELP_MESSAGE = <<~INFO_MESSAGETEXT
17
- ■判定 x+bFF<=t x:ヒート(省略時は3) b:判定修正 t:能力値
17
+ ■判定 x+bFF<=a[,t][&d] x:ヒート(省略時は3) b:判定修正 a:能力値 t:難易度(省略可) d:基本ダメージ(省略可)
18
+
19
+ 例)FF<=2: 能力値2で判定し、その結果(成功数,1の目の数,6の目の数,バースト)を表示。
20
+ 6FF<=3: ヒート6,能力値3で戦闘判定し、その結果( 〃 )を表示。
21
+ 8+2FF<=3: ヒート8,判定修正+2,能力値3で戦闘判定し、その結果( 〃 )を表示。
22
+ FF<=2,1: 能力値2,難易度1で判定し、その結果(成功数,1の目の数,6の目の数,成功・失敗,バースト)を表示。
23
+ 6FF<=3,2&1:ヒート6,能力値3,難易度2,基本ダメージ1で戦闘判定し、その結果(成功数,1の目の数,6の目の数,ダメージ,バースト)を表示。
18
24
 
19
- 例)FF<=2: 能力値2で判定し、その結果(成功数,1の目の数,バースト)を表示。
20
- 6FF<=3: ヒート6,能力値3で戦闘判定し、その結果( 〃 )を表示。
21
- 8+2FF<=3:ヒート8,判定修正+2,能力値3で戦闘判定し、その結果( 〃 )を表示。
22
25
  INFO_MESSAGETEXT
23
26
 
24
27
  register_prefix('([+\d]+)*FF')
25
28
 
29
+ def initialize(command)
30
+ super(command)
31
+
32
+ @sort_barabara_dice = true # バラバラロール(Bコマンド)でソート有
33
+ end
34
+
26
35
  def eval_game_system_specific_command(command)
27
36
  resolute_action(command)
28
37
  end
29
38
 
30
39
  private
31
40
 
32
- # 技能判定
41
+ # 戦闘判定
33
42
  # @param [String] command
34
43
  # @return [Result]
35
44
  def resolute_action(command)
36
- m = /^(\d*)([+\d]+)*FF<=(\d)$/.match(command)
45
+ m = /^(\d*)([+\d]+)*FF<=(\d)(,(\d))?(&(\d))?$/.match(command)
37
46
  return nil unless m
38
47
 
39
48
  heat_level = m[1].to_i
40
49
  heat_level = 3 if heat_level == 0
41
50
  modify = Arithmetic.eval("0#{m[2]}", @round_type)
42
51
  status_no = m[3].to_i
52
+ target_no = m[5].to_i
53
+ damage_no = m[7].to_i
43
54
 
44
55
  dice_array = []
45
56
 
46
- dice = @randomizer.roll_barabara(heat_level, 6)
57
+ dice = @randomizer.roll_barabara(heat_level, 6).sort
47
58
  ones = dice.count(1)
48
59
  sixs = dice.count(6)
49
60
  success_num = dice.count { |val| val <= status_no }
50
61
  dice_array.push(dice.join(","))
51
62
 
52
63
  if modify > 0
53
- dice = @randomizer.roll_barabara(modify, 6)
64
+ dice = @randomizer.roll_barabara(modify, 6).sort
54
65
  ones += dice.count(1)
55
66
  success_num += dice.count { |val| val <= status_no }
56
67
  dice_array.push(dice.join(","))
@@ -58,7 +69,7 @@ module BCDice
58
69
  ones_total = ones
59
70
 
60
71
  while ones > 0
61
- dice = @randomizer.roll_barabara(ones, 6)
72
+ dice = @randomizer.roll_barabara(ones, 6).sort
62
73
  ones = dice.count(1)
63
74
  ones_total += ones
64
75
  success_num += dice.count { |val| val <= status_no }
@@ -66,6 +77,7 @@ module BCDice
66
77
  end
67
78
 
68
79
  return Result.new.tap do |result|
80
+ command_out = "(#{heat_level}#{Format.modifier(modify)}FF<=#{status_no}"
69
81
  if sixs >= 2
70
82
  result.fumble = true
71
83
  result.condition = false
@@ -76,10 +88,27 @@ module BCDice
76
88
  result_txt = []
77
89
  result_txt.push("成功度(#{success_num})")
78
90
  result_txt.push("1の目(#{ones_total})") if ones_total > 0
91
+ result_txt.push("6の目(#{sixs})") if sixs > 0
92
+ if target_no > 0
93
+ command_out += ",#{target_no}"
94
+ if success_num >= target_no
95
+ result_txt.push("成功")
96
+ result.condition = true
97
+ else
98
+ result_txt.push("失敗")
99
+ result.condition = false
100
+ end
101
+ end
102
+ if damage_no > 0
103
+ command_out += "&#{damage_no}"
104
+ damage = damage_no + ones_total
105
+ result_txt.push("ダメージ(#{damage})")
106
+ end
79
107
  result_txt.push("バースト") if result.fumble?
108
+ command_out += ")"
80
109
 
81
110
  sequence = [
82
- "(#{heat_level}#{Format.modifier(modify)}FF<=#{status_no})",
111
+ command_out,
83
112
  dice_array.join('+').to_s,
84
113
  result_txt.join(',').to_s,
85
114
  ].compact
@@ -21,15 +21,17 @@ module BCDice
21
21
  【セッション時】
22
22
  異常な癖決定表      SHRD/新・異常な癖決定表   SHND
23
23
  普通の?・異常な癖決定表 SHAD/ケイジ異常な癖決定表  SHKD
24
+ 超探偵向け異常な癖表   SHLD
24
25
   口から出る表    SHFM/強引な捜査表      SHBT/すっとぼけ表       SHPI
25
-  事件に夢中表    SHEG/パートナーと……表   SHWP/何かしている表      SHDS
26
+  事件に夢中表    SHEG/パートナーと……表    SHWP/何かしている表      SHDS
26
27
   奇想天外表     SHFT/急なひらめき表     SHIN/喜怒哀楽表        SHEM
27
28
   人間エミュレート表 SHHE/人間エミュレート失敗表 SHHF/パートナーへのいたずら表 SHMP
28
29
   思わせぶり表    SHSB/もどかしい表      SHFR/突然どうした表      SHIS
29
30
   わがままを言う表  SHSE/普通に見える表     SHLM/嫉妬に狂う表       SHJS
30
31
   傲慢な態度表    SHAR/比較的軽度なもの表   SHRM/ノータイム表       SHNT
31
32
   捜査のやり方表   SHIM/貴族表         SHNO/説明しない表       SHNE
32
-  刑事としての癖表  SHHD
33
+  刑事としての癖表  SHHD/名誉ある探偵表     SHGD/超すごい表        SHSA
34
+  超事件に夢中表   SHEP/超パートナーと……表   SHXP
33
35
  イベント表
34
36
   現場にて  EVS/なぜ?  EVW/協力者と共に EVN
35
37
   向こうから EVC/VS容疑者 EVV
@@ -38,7 +40,8 @@ module BCDice
38
40
   思わぬヒント EVH/実験をしてみよう EVX/ゲスト捜査 EVG
39
41
   ケイジ聞き込み捜査    EVQ/ケイジ大規模捜査      EVM/こっそり情報の受け渡し EVP
40
42
   同僚たちと一緒に捜査する EVO/頻染みの店シチュエーション EVF/ハードBデカアクション EVB
41
-  探偵を大人しくさせる捜査 EVL/伝統的捜査 EVZ/原始的捜査 EVR
43
+  探偵を大人しくさせる捜査 EVL/伝統的捜査         EVZ/原始的捜査       EVR
44
+  超探偵調査       EV6S/神速捜査         EV6F
42
45
  感情表
43
46
   感情表A/B   FLT66・FLT10
44
47
   気に入っているところ  FLTL66 /気に入らないところ  FLTD66
@@ -131,10 +134,70 @@ module BCDice
131
134
 
132
135
  def translate_tables(locale)
133
136
  {
134
- "SHRD" => DiceTable::Table.from_i18n("FutariSousa.table.SHRD", locale),
135
- "SHND" => DiceTable::Table.from_i18n("FutariSousa.table.SHND", locale),
136
- "SHAD" => DiceTable::Table.from_i18n("FutariSousa.table.SHAD", locale),
137
- "SHKD" => DiceTable::Table.from_i18n("FutariSousa.table.SHKD", locale),
137
+ "SHRD" => DiceTable::ChainTable.new(
138
+ I18n.translate("FutariSousa.table.SHRD.name", locale: locale),
139
+ "1D10",
140
+ [
141
+ DiceTable::Table.from_i18n("FutariSousa.table.SHFM", locale),
142
+ DiceTable::Table.from_i18n("FutariSousa.table.SHBT", locale),
143
+ DiceTable::Table.from_i18n("FutariSousa.table.SHPI", locale),
144
+ DiceTable::Table.from_i18n("FutariSousa.table.SHEG", locale),
145
+ DiceTable::Table.from_i18n("FutariSousa.table.SHWP", locale),
146
+ DiceTable::Table.from_i18n("FutariSousa.table.SHDS", locale),
147
+ DiceTable::Table.from_i18n("FutariSousa.table.SHIN", locale),
148
+ DiceTable::Table.from_i18n("FutariSousa.table.SHEM", locale),
149
+ DiceTable::Table.from_i18n("FutariSousa.table.SHFT", locale),
150
+ I18n.translate("FutariSousa.table.SHRD.items", locale: locale)[9],
151
+ ]
152
+ ),
153
+ "SHND" => DiceTable::ChainTable.new(
154
+ I18n.translate("FutariSousa.table.SHND.name", locale: locale),
155
+ "1D6",
156
+ [
157
+ DiceTable::Table.from_i18n("FutariSousa.table.SHHE", locale),
158
+ DiceTable::Table.from_i18n("FutariSousa.table.SHHF", locale),
159
+ DiceTable::Table.from_i18n("FutariSousa.table.SHMP", locale),
160
+ DiceTable::Table.from_i18n("FutariSousa.table.SHSB", locale),
161
+ DiceTable::Table.from_i18n("FutariSousa.table.SHFR", locale),
162
+ DiceTable::Table.from_i18n("FutariSousa.table.SHIS", locale),
163
+ ]
164
+ ),
165
+ "SHAD" => DiceTable::ChainTable.new(
166
+ I18n.translate("FutariSousa.table.SHAD.name", locale: locale),
167
+ "1D6",
168
+ [
169
+ DiceTable::Table.from_i18n("FutariSousa.table.SHSE", locale),
170
+ DiceTable::Table.from_i18n("FutariSousa.table.SHLM", locale),
171
+ DiceTable::Table.from_i18n("FutariSousa.table.SHJS", locale),
172
+ DiceTable::Table.from_i18n("FutariSousa.table.SHAR", locale),
173
+ DiceTable::Table.from_i18n("FutariSousa.table.SHRM", locale),
174
+ DiceTable::Table.from_i18n("FutariSousa.table.SHNT", locale),
175
+ ]
176
+ ),
177
+ "SHKD" => DiceTable::ChainTable.new(
178
+ I18n.translate("FutariSousa.table.SHKD.name", locale: locale),
179
+ "1D6",
180
+ [
181
+ DiceTable::Table.from_i18n("FutariSousa.table.SHIM", locale),
182
+ DiceTable::Table.from_i18n("FutariSousa.table.SHNO", locale),
183
+ DiceTable::Table.from_i18n("FutariSousa.table.SHNE", locale),
184
+ DiceTable::Table.from_i18n("FutariSousa.table.SHHD", locale),
185
+ I18n.translate("FutariSousa.table.SHKD.items", locale: locale)[4],
186
+ I18n.translate("FutariSousa.table.SHKD.items", locale: locale)[5],
187
+ ]
188
+ ),
189
+ "SHLD" => DiceTable::ChainTable.new(
190
+ I18n.translate("FutariSousa.table.SHLD.name", locale: locale),
191
+ "1D6",
192
+ [
193
+ DiceTable::Table.from_i18n("FutariSousa.table.SHGD", locale),
194
+ DiceTable::Table.from_i18n("FutariSousa.table.SHSA", locale),
195
+ DiceTable::Table.from_i18n("FutariSousa.table.SHEP", locale),
196
+ DiceTable::Table.from_i18n("FutariSousa.table.SHXP", locale),
197
+ I18n.translate("FutariSousa.table.SHLD.items", locale: locale)[4],
198
+ I18n.translate("FutariSousa.table.SHLD.items", locale: locale)[5],
199
+ ]
200
+ ),
138
201
  "SHFM" => DiceTable::Table.from_i18n("FutariSousa.table.SHFM", locale),
139
202
  "SHBT" => DiceTable::Table.from_i18n("FutariSousa.table.SHBT", locale),
140
203
  "SHPI" => DiceTable::Table.from_i18n("FutariSousa.table.SHPI", locale),
@@ -160,6 +223,10 @@ module BCDice
160
223
  "SHNO" => DiceTable::Table.from_i18n("FutariSousa.table.SHNO", locale),
161
224
  "SHNE" => DiceTable::Table.from_i18n("FutariSousa.table.SHNE", locale),
162
225
  "SHHD" => DiceTable::Table.from_i18n("FutariSousa.table.SHHD", locale),
226
+ "SHGD" => DiceTable::Table.from_i18n("FutariSousa.table.SHGD", locale),
227
+ "SHSA" => DiceTable::Table.from_i18n("FutariSousa.table.SHSA", locale),
228
+ "SHEP" => DiceTable::Table.from_i18n("FutariSousa.table.SHEP", locale),
229
+ "SHXP" => DiceTable::Table.from_i18n("FutariSousa.table.SHXP", locale),
163
230
  "EVS" => DiceTable::Table.from_i18n("FutariSousa.table.EVS", locale),
164
231
  "EVW" => DiceTable::Table.from_i18n("FutariSousa.table.EVW", locale),
165
232
  "EVN" => DiceTable::Table.from_i18n("FutariSousa.table.EVN", locale),
@@ -181,6 +248,8 @@ module BCDice
181
248
  "EVL" => DiceTable::Table.from_i18n("FutariSousa.table.EVL", locale),
182
249
  "EVZ" => DiceTable::Table.from_i18n("FutariSousa.table.EVZ", locale),
183
250
  "EVR" => DiceTable::Table.from_i18n("FutariSousa.table.EVR", locale),
251
+ "EV6S" => DiceTable::Table.from_i18n("FutariSousa.table.EV6S", locale),
252
+ "EV6F" => DiceTable::Table.from_i18n("FutariSousa.table.EV6F", locale),
184
253
  "OBT" => DiceTable::D66Table.from_i18n("FutariSousa.table.OBT", locale),
185
254
  "ACT" => DiceTable::Table.from_i18n("FutariSousa.table.ACT", locale),
186
255
  "EWT" => DiceTable::Table.from_i18n("FutariSousa.table.EWT", locale),
@@ -206,7 +275,18 @@ module BCDice
206
275
  "FLT10" => DiceTable::Table.from_i18n("FutariSousa.table.FLT10", locale),
207
276
  "FLTL66" => DiceTable::D66Table.from_i18n("FutariSousa.table.FLTL66", locale),
208
277
  "FLTD66" => DiceTable::D66Table.from_i18n("FutariSousa.table.FLTD66", locale),
209
- "FLTRA" => DiceTable::Table.from_i18n("FutariSousa.table.FLTRA", locale),
278
+ "FLTRA" => DiceTable::ChainTable.new(
279
+ I18n.translate("FutariSousa.table.FLTRA.name", locale: locale),
280
+ "1D6",
281
+ [
282
+ DiceTable::D66Table.from_i18n("FutariSousa.table.FLTF66", locale),
283
+ DiceTable::D66Table.from_i18n("FutariSousa.table.FLTB66", locale),
284
+ DiceTable::D66Table.from_i18n("FutariSousa.table.FLTH66", locale),
285
+ DiceTable::D66Table.from_i18n("FutariSousa.table.FLTS66", locale),
286
+ DiceTable::D66Table.from_i18n("FutariSousa.table.FLTA66", locale),
287
+ DiceTable::D66Table.from_i18n("FutariSousa.table.FLTW66", locale),
288
+ ]
289
+ ),
210
290
  "FLTF66" => DiceTable::D66Table.from_i18n("FutariSousa.table.FLTF66", locale),
211
291
  "FLTB66" => DiceTable::D66Table.from_i18n("FutariSousa.table.FLTB66", locale),
212
292
  "FLTH66" => DiceTable::D66Table.from_i18n("FutariSousa.table.FLTH66", locale),
@@ -19,7 +19,7 @@ module BCDice
19
19
  ・판정
20
20
  스페셜/펌블/성공/실패를 판정
21
21
  ・각종표
22
- 씬표   ST
22
+ 장면표   ST
23
23
   사실은 무서운 현대 일본 장면표 HJST/광란의 20년대 장면표 MTST
24
24
   빅토리아의 어둠 장면표 DVST
25
25
  형용표    DT
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class InvisibleLiar < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'InvisibleLiar'
8
+
9
+ # ゲームシステム名
10
+ NAME = 'インビジブルライアー'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'いんひしふるらいああ'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~HELP
17
+ ■ 採取表
18
+ WOODSn 森
19
+ PRAIRIEn 草原
20
+ LAKEn 湖
21
+ RIVERn 川辺
22
+ SWAMPn 沼地
23
+ CAVEn 洞窟
24
+ ROCKYn 岩場
25
+ MOUNTAINn 山岳
26
+ n: 採取時間(1〜5)
27
+ HELP
28
+
29
+ def eval_game_system_specific_command(command)
30
+ roll_tables(command, TABLES)
31
+ end
32
+
33
+ TABLES = {
34
+ "WOODS1" => DiceTable::Table.new("森 1時間", "1D6", ["麗し草", "麗し草", "麗し草", "神秘のキノコ", "妖精の羽", "成果なし"]),
35
+ "WOODS2" => DiceTable::Table.new("森 2時間", "1D6", ["麗し草", "麗し草", "神秘のキノコ", "神秘のキノコ", "妖精の羽", "成果なし"]),
36
+ "WOODS3" => DiceTable::Table.new("森 3時間", "1D6", ["麗し草", "神秘のキノコ", "神秘のキノコ", "神秘のキノコ", "妖精の羽", "成果なし"]),
37
+ "WOODS4" => DiceTable::Table.new("森 4時間", "1D6", ["麗し草", "神秘のキノコ", "神秘のキノコ", "妖精の羽", "妖精の羽", "成果なし"]),
38
+ "WOODS5" => DiceTable::Table.new("森 5時間", "1D6", ["麗し草", "神秘のキノコ", "妖精の羽", "妖精の羽", "妖精の羽", "成果なし"]),
39
+ "PRAIRIE1" => DiceTable::Table.new("草原 1時間", "1D6", ["太陽の花", "太陽の花", "太陽の花", "生命の虫", "妖精の羽", "成果なし"]),
40
+ "PRAIRIE2" => DiceTable::Table.new("草原 2時間", "1D6", ["太陽の花", "太陽の花", "生命の虫", "生命の虫", "妖精の羽", "成果なし"]),
41
+ "PRAIRIE3" => DiceTable::Table.new("草原 3時間", "1D6", ["太陽の花", "生命の虫", "生命の虫", "生命の虫", "妖精の羽", "成果なし"]),
42
+ "PRAIRIE4" => DiceTable::Table.new("草原 4時間", "1D6", ["太陽の花", "生命の虫", "生命の虫", "妖精の羽", "妖精の羽", "成果なし"]),
43
+ "PRAIRIE5" => DiceTable::Table.new("草原 5時間", "1D6", ["太陽の花", "生命の虫", "妖精の羽", "妖精の羽", "妖精の羽", "成果なし"]),
44
+ "LAKE1" => DiceTable::Table.new("湖 1時間", "1D6", ["竜の鱗", "竜の鱗", "竜の鱗", "マンドレイク", "幻獣の涙", "成果なし"]),
45
+ "LAKE2" => DiceTable::Table.new("湖 2時間", "1D6", ["竜の鱗", "竜の鱗", "マンドレイク", "マンドレイク", "幻獣の涙", "成果なし"]),
46
+ "LAKE3" => DiceTable::Table.new("湖 3時間", "1D6", ["竜の鱗", "マンドレイク", "マンドレイク", "マンドレイク", "幻獣の涙", "成果なし"]),
47
+ "LAKE4" => DiceTable::Table.new("湖 4時間", "1D6", ["竜の鱗", "マンドレイク", "マンドレイク", "幻獣の涙", "幻獣の涙", "成果なし"]),
48
+ "LAKE5" => DiceTable::Table.new("湖 5時間", "1D6", ["竜の鱗", "マンドレイク", "幻獣の涙", "幻獣の涙", "幻獣の涙", "成果なし"]),
49
+ "RIVER1" => DiceTable::Table.new("川辺 1時間", "1D6", ["魔魚", "魔魚", "魔魚", "麗し草", "幻獣の涙", "成果なし"]),
50
+ "RIVER2" => DiceTable::Table.new("川辺 2時間", "1D6", ["魔魚", "魔魚", "麗し草", "麗し草", "幻獣の涙", "成果なし"]),
51
+ "RIVER3" => DiceTable::Table.new("川辺 3時間", "1D6", ["魔魚", "麗し草", "麗し草", "麗し草", "幻獣の涙", "成果なし"]),
52
+ "RIVER4" => DiceTable::Table.new("川辺 4時間", "1D6", ["魔魚", "麗し草", "麗し草", "幻獣の涙", "幻獣の涙", "成果なし"]),
53
+ "RIVER5" => DiceTable::Table.new("川辺 5時間", "1D6", ["魔魚", "麗し草", "幻獣の涙", "幻獣の涙", "幻獣の涙", "成果なし"]),
54
+ "SWAMP1" => DiceTable::Table.new("沼地 1時間", "1D6", ["マンドレイク", "マンドレイク", "マンドレイク", "魔魚", "畏怖の化石", "成果なし"]),
55
+ "SWAMP2" => DiceTable::Table.new("沼地 2時間", "1D6", ["マンドレイク", "マンドレイク", "魔魚", "魔魚", "畏怖の化石", "成果なし"]),
56
+ "SWAMP3" => DiceTable::Table.new("沼地 3時間", "1D6", ["マンドレイク", "魔魚", "魔魚", "魔魚", "畏怖の化石", "成果なし"]),
57
+ "SWAMP4" => DiceTable::Table.new("沼地 4時間", "1D6", ["マンドレイク", "魔魚", "魔魚", "畏怖の化石", "畏怖の化石", "成果なし"]),
58
+ "SWAMP5" => DiceTable::Table.new("沼地 5時間", "1D6", ["マンドレイク", "魔魚", "畏怖の化石", "畏怖の化石", "畏怖の化石", "成果なし"]),
59
+ "CAVE1" => DiceTable::Table.new("洞窟 1時間", "1D6", ["神秘のキノコ", "神秘のキノコ", "神秘のキノコ", "魔素の結晶", "畏怖の化石", "成果なし"]),
60
+ "CAVE2" => DiceTable::Table.new("洞窟 2時間", "1D6", ["神秘のキノコ", "神秘のキノコ", "魔素の結晶", "魔素の結晶", "畏怖の化石", "成果なし"]),
61
+ "CAVE3" => DiceTable::Table.new("洞窟 3時間", "1D6", ["神秘のキノコ", "魔素の結晶", "魔素の結晶", "魔素の結晶", "畏怖の化石", "成果なし"]),
62
+ "CAVE4" => DiceTable::Table.new("洞窟 4時間", "1D6", ["神秘のキノコ", "魔素の結晶", "魔素の結晶", "畏怖の化石", "畏怖の化石", "成果なし"]),
63
+ "CAVE5" => DiceTable::Table.new("洞窟 5時間", "1D6", ["神秘のキノコ", "魔素の結晶", "畏怖の化石", "畏怖の化石", "畏怖の化石", "成果なし"]),
64
+ "ROCKY1" => DiceTable::Table.new("岩場 1時間", "1D6", ["生命の虫", "生命の虫", "生命の虫", "竜の鱗", "星の欠片", "成果なし"]),
65
+ "ROCKY2" => DiceTable::Table.new("岩場 2時間", "1D6", ["生命の虫", "生命の虫", "竜の鱗", "竜の鱗", "星の欠片", "成果なし"]),
66
+ "ROCKY3" => DiceTable::Table.new("岩場 3時間", "1D6", ["生命の虫", "竜の鱗", "竜の鱗", "竜の鱗", "星の欠片", "成果なし"]),
67
+ "ROCKY4" => DiceTable::Table.new("岩場 4時間", "1D6", ["生命の虫", "竜の鱗", "竜の鱗", "星の欠片", "星の欠片", "成果なし"]),
68
+ "ROCKY5" => DiceTable::Table.new("岩場 5時間", "1D6", ["生命の虫", "竜の鱗", "星の欠片", "星の欠片", "星の欠片", "成果なし"]),
69
+ "MOUNTAIN1" => DiceTable::Table.new("山岳 1時間", "1D6", ["魔素の結晶", "魔素の結晶", "魔素の結晶", "太陽の花", "星の欠片", "成果なし"]),
70
+ "MOUNTAIN2" => DiceTable::Table.new("山岳 2時間", "1D6", ["魔素の結晶", "魔素の結晶", "太陽の花", "太陽の花", "星の欠片", "成果なし"]),
71
+ "MOUNTAIN3" => DiceTable::Table.new("山岳 3時間", "1D6", ["魔素の結晶", "太陽の花", "太陽の花", "太陽の花", "星の欠片", "成果なし"]),
72
+ "MOUNTAIN4" => DiceTable::Table.new("山岳 4時間", "1D6", ["魔素の結晶", "太陽の花", "太陽の花", "星の欠片", "星の欠片", "成果なし"]),
73
+ "MOUNTAIN5" => DiceTable::Table.new("山岳 5時間", "1D6", ["魔素の結晶", "太陽の花", "星の欠片", "星の欠片", "星の欠片", "成果なし"]),
74
+ }.freeze
75
+
76
+ register_prefix(TABLES.keys)
77
+ end
78
+ end
79
+ end