bcdice 3.16.1 → 3.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +111 -0
  3. data/i18n/Airgetlamh/ja_jp.yml +5 -0
  4. data/i18n/Airgetlamh/ko_kr.yml +5 -0
  5. data/i18n/Alsetto/ja_jp.yml +5 -0
  6. data/i18n/Alsetto/ko_kr.yml +5 -0
  7. data/i18n/AnimaAnimus/ja_jp.yml +28 -0
  8. data/i18n/AnimaAnimus/ko_kr.yml +28 -0
  9. data/i18n/BlackJacket/ja_jp.yml +79 -0
  10. data/i18n/BlackJacket/ko_kr.yml +79 -0
  11. data/i18n/Bloodorium/ja_jp.yml +3 -0
  12. data/i18n/Bloodorium/ko_kr.yml +3 -0
  13. data/i18n/Cthulhu/ko_kr.yml +1 -1
  14. data/i18n/Dracurouge/ko_kr.yml +1284 -205
  15. data/i18n/Emoklore/ja_jp.yml +1 -0
  16. data/i18n/Emoklore/ko_kr.yml +1 -0
  17. data/i18n/FutariSousa/ja_jp.yml +70 -0
  18. data/i18n/FutariSousa/ko_kr.yml +157 -0
  19. data/i18n/HatsuneMiku/ja_jp.yml +579 -0
  20. data/i18n/HatsuneMiku/ko_kr.yml +579 -0
  21. data/i18n/Irisbane/ja_jp.yml +27 -0
  22. data/i18n/Irisbane/ko_kr.yml +27 -0
  23. data/i18n/JuinKansen/ja_jp.yml +168 -0
  24. data/i18n/JuinKansen/ko_kr.yml +168 -0
  25. data/i18n/KemonoNoMori/ja_jp.yml +229 -0
  26. data/i18n/KemonoNoMori/ko_kr.yml +229 -0
  27. data/i18n/KizunaBullet/ko_kr.yml +653 -0
  28. data/i18n/MagicPunk/ja_jp.yml +5 -0
  29. data/i18n/MagicPunk/ko_kr.yml +5 -0
  30. data/i18n/MorkBorg/ja_jp.yml +34 -0
  31. data/i18n/MorkBorg/ko_kr.yml +34 -0
  32. data/i18n/Nechronica/ko_kr.yml +43 -0
  33. data/i18n/NegikureNegimaki/ja_jp.yml +6 -0
  34. data/i18n/NegikureNegimaki/ko_kr.yml +6 -0
  35. data/i18n/Nuekagami/ja_jp.yml +219 -0
  36. data/i18n/Nuekagami/ko_kr.yml +219 -0
  37. data/i18n/Revulture/ja_jp.yml +8 -0
  38. data/i18n/Revulture/ko_kr.yml +8 -0
  39. data/i18n/SRS/ja_jp.yml +4 -0
  40. data/i18n/SRS/ko_kr.yml +4 -0
  41. data/i18n/ShinobiGami/ja_jp.yml +879 -0
  42. data/i18n/ShinobiGami/ko_kr.yml +876 -0
  43. data/i18n/StarryDolls/ja_jp.yml +456 -0
  44. data/i18n/StarryDolls/ko_kr.yml +456 -0
  45. data/i18n/StratoShout/ja_jp.yml +8 -8
  46. data/i18n/SwordWorld2_5/ja_jp.yml +48 -0
  47. data/i18n/Ventangle/ja_jp.yml +4 -0
  48. data/i18n/Ventangle/ko_kr.yml +4 -0
  49. data/i18n/YearZeroEngine/ja_jp.yml +12 -0
  50. data/i18n/YearZeroEngine/ko_kr.yml +12 -0
  51. data/i18n/ZombiLine/ja_jp.yml +27 -0
  52. data/i18n/ZombiLine/ko_kr.yml +27 -0
  53. data/i18n/ko_kr.yml +2 -0
  54. data/i18n/zh_hant.yml +2 -2
  55. data/lib/bcdice/dice_table/d66_left_range_table.rb +21 -0
  56. data/lib/bcdice/game_system/Aionia.rb +68 -19
  57. data/lib/bcdice/game_system/Airgetlamh.rb +64 -41
  58. data/lib/bcdice/game_system/Airgetlamh_Korean.rb +53 -0
  59. data/lib/bcdice/game_system/Alsetto.rb +63 -50
  60. data/lib/bcdice/game_system/Alsetto_Korean.rb +51 -0
  61. data/lib/bcdice/game_system/AnimaAnimus.rb +15 -32
  62. data/lib/bcdice/game_system/AnimaAnimus_Korean.rb +39 -0
  63. data/lib/bcdice/game_system/BlackJacket.rb +57 -113
  64. data/lib/bcdice/game_system/BlackJacket_Korean.rb +8 -206
  65. data/lib/bcdice/game_system/Bloodorium.rb +1 -1
  66. data/lib/bcdice/game_system/Bloodorium_Korean.rb +34 -0
  67. data/lib/bcdice/game_system/ChroniclesOfDarkness2e.rb +163 -0
  68. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +471 -300
  69. data/lib/bcdice/game_system/DeadlineHeroes_Korean.rb +273 -0
  70. data/lib/bcdice/game_system/Dracurouge_Korean.rb +25 -19
  71. data/lib/bcdice/game_system/DungeonsAndDragons5.rb +106 -73
  72. data/lib/bcdice/game_system/DungeonsAndDragons5_Korean.rb +53 -0
  73. data/lib/bcdice/game_system/DungeonsAndDragons_Korean.rb +61 -0
  74. data/lib/bcdice/game_system/Emoklore.rb +34 -9
  75. data/lib/bcdice/game_system/Emoklore_Korean.rb +10 -2
  76. data/lib/bcdice/game_system/FateCoreSystem.rb +10 -6
  77. data/lib/bcdice/game_system/FullMetalPanic_Korean.rb +28 -0
  78. data/lib/bcdice/game_system/FutariSousa.rb +37 -12
  79. data/lib/bcdice/game_system/FutariSousa_Korean.rb +25 -8
  80. data/lib/bcdice/game_system/GaiaCare.rb +40 -0
  81. data/lib/bcdice/game_system/GardenOrder.rb +2 -2
  82. data/lib/bcdice/game_system/GardenOrderReEdit.rb +849 -0
  83. data/lib/bcdice/game_system/GardenOrder_Korean.rb +839 -0
  84. data/lib/bcdice/game_system/HatsuneMiku.rb +51 -605
  85. data/lib/bcdice/game_system/HatsuneMiku_Korean.rb +56 -0
  86. data/lib/bcdice/game_system/HunterTheReckoning5th.rb +15 -11
  87. data/lib/bcdice/game_system/Irisbane.rb +17 -30
  88. data/lib/bcdice/game_system/Irisbane_Korean.rb +52 -0
  89. data/lib/bcdice/game_system/JuinKansen.rb +41 -208
  90. data/lib/bcdice/game_system/JuinKansen_Korean.rb +8 -213
  91. data/lib/bcdice/game_system/KemonoNoMori.rb +67 -276
  92. data/lib/bcdice/game_system/KemonoNoMori_Korean.rb +62 -0
  93. data/lib/bcdice/game_system/KinAriel.rb +117 -0
  94. data/lib/bcdice/game_system/KizunaBullet_Korean.rb +109 -0
  95. data/lib/bcdice/game_system/KutuluRevised.rb +94 -0
  96. data/lib/bcdice/game_system/LiverLabyrinth.rb +321 -0
  97. data/lib/bcdice/game_system/Lost.rb +89 -0
  98. data/lib/bcdice/game_system/MagicPunk.rb +85 -0
  99. data/lib/bcdice/game_system/MagicPunk_Korean.rb +39 -0
  100. data/lib/bcdice/game_system/MarvelHeroicRoleplaying.rb +144 -0
  101. data/lib/bcdice/game_system/MetallicGuardian_Korean.rb +28 -0
  102. data/lib/bcdice/game_system/MorkBorg.rb +170 -0
  103. data/lib/bcdice/game_system/MorkBorg_Korean.rb +49 -0
  104. data/lib/bcdice/game_system/NanimonaiMura.rb +112 -0
  105. data/lib/bcdice/game_system/Nechronica_Korean.rb +6 -6
  106. data/lib/bcdice/game_system/NegikureNegimaki.rb +140 -0
  107. data/lib/bcdice/game_system/NegikureNegimaki_Korean.rb +48 -0
  108. data/lib/bcdice/game_system/NeonUnderRealm.rb +122 -0
  109. data/lib/bcdice/game_system/NinjaSlayer2.rb +170 -49
  110. data/lib/bcdice/game_system/Nuekagami.rb +19 -261
  111. data/lib/bcdice/game_system/Nuekagami_Korean.rb +43 -0
  112. data/lib/bcdice/game_system/ParanoiaPerfect.rb +74 -0
  113. data/lib/bcdice/game_system/PastFutureParadox.rb +2245 -55
  114. data/lib/bcdice/game_system/PreciousDays.rb +170 -0
  115. data/lib/bcdice/game_system/Revulture.rb +8 -5
  116. data/lib/bcdice/game_system/Revulture_Korean.rb +7 -81
  117. data/lib/bcdice/game_system/Ryutama.rb +46 -46
  118. data/lib/bcdice/game_system/SRS.rb +4 -4
  119. data/lib/bcdice/game_system/SRS_Korean.rb +67 -0
  120. data/lib/bcdice/game_system/ShinobiGami.rb +154 -1047
  121. data/lib/bcdice/game_system/ShinobiGami_Korean.rb +102 -0
  122. data/lib/bcdice/game_system/StarryDolls.rb +70 -508
  123. data/lib/bcdice/game_system/StarryDolls_Korean.rb +80 -0
  124. data/lib/bcdice/game_system/StratoShout.rb +1 -1
  125. data/lib/bcdice/game_system/SwordWorld.rb +28 -2
  126. data/lib/bcdice/game_system/SwordWorld2_0.rb +1 -1
  127. data/lib/bcdice/game_system/SwordWorld2_5.rb +67 -3
  128. data/lib/bcdice/game_system/TacticalExorcist.rb +222 -0
  129. data/lib/bcdice/game_system/TenkaRyouran_Korean.rb +30 -0
  130. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +38 -33
  131. data/lib/bcdice/game_system/Ventangle.rb +8 -7
  132. data/lib/bcdice/game_system/Ventangle_Korean.rb +6 -95
  133. data/lib/bcdice/game_system/Warhammer4.rb +202 -6
  134. data/lib/bcdice/game_system/WerewolfTheApocalypse5th.rb +20 -15
  135. data/lib/bcdice/game_system/WorldEndScrapyard.rb +333 -0
  136. data/lib/bcdice/game_system/WorldsEndFrontline_Korean.rb +26 -0
  137. data/lib/bcdice/game_system/YearZeroEngine.rb +7 -7
  138. data/lib/bcdice/game_system/YearZeroEngine_Korean.rb +46 -0
  139. data/lib/bcdice/game_system/ZombiLine.rb +29 -36
  140. data/lib/bcdice/game_system/ZombiLine_Korean.rb +37 -0
  141. data/lib/bcdice/game_system/cthulhu7th_Korean/full_auto.rb +294 -0
  142. data/lib/bcdice/game_system/cthulhu7th_Korean/rollable.rb +43 -0
  143. data/lib/bcdice/game_system/sword_world/rating_options.rb +9 -0
  144. data/lib/bcdice/game_system/sword_world/rating_parsed.rb +19 -0
  145. data/lib/bcdice/game_system/sword_world/rating_parser.rb +229 -149
  146. data/lib/bcdice/game_system/sword_world/transcendent_test.rb +1 -0
  147. data/lib/bcdice/game_system.rb +42 -0
  148. data/lib/bcdice/version.rb +1 -1
  149. metadata +87 -2
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bcdice/game_system/DungeonsAndDragons'
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class DungeonsAndDragons_Korean < DungeonsAndDragons
8
+ # ゲームシステムの識別子
9
+ ID = 'DungeonsAndDragons:Korean'
10
+
11
+ # ゲームシステム名
12
+ NAME = '던전 앤 드래곤'
13
+
14
+ # ゲームシステム名の読みがな
15
+ SORT_KEY = '国際化:Korean:던전 앤 드래곤'
16
+
17
+ # ダイスボットの使い方
18
+ HELP_MESSAGE = "※ 이 다이스봇은 방의 시스템 이름 표시용입니다.\n"
19
+
20
+ # 성공 결과 문자열
21
+ def success_text
22
+ "성공"
23
+ end
24
+
25
+ # 실패 결과 문자열
26
+ def failure_text
27
+ "실패"
28
+ end
29
+
30
+ # 크리티컬 결과 문자열
31
+ def critical_text
32
+ "크리티컬"
33
+ end
34
+
35
+ # 펌블 결과 문자열
36
+ def fumble_text
37
+ "펌블"
38
+ end
39
+
40
+ # Base.check_result(total, rand_results, cmp_op, target)를 오버라이드
41
+ def check_result(total, rand_results, cmp_op, target)
42
+ # target이 '?' 같은 문자열일 경우 nil 반환
43
+ return nil if target.is_a?(String)
44
+
45
+ # 크리티컬/펌블 처리 (D&D 룰: 1 = 펌블, 20 = 크리티컬)
46
+ dice_total = rand_results.map(&:value).sum
47
+ if rand_results.map(&:sides) == [20]
48
+ return Result.critical(critical_text) if dice_total == 20
49
+ return Result.fumble(fumble_text) if dice_total == 1
50
+ end
51
+
52
+ # 일반 성공/실패 판정
53
+ if total.send(cmp_op, target)
54
+ Result.success(success_text)
55
+ else
56
+ Result.failure(failure_text)
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -17,10 +17,15 @@ module BCDice
17
17
 
18
18
  # ダイスボットの使い方
19
19
  HELP_MESSAGE = <<~MESSAGETEXT
20
- ・技能値判定(xDM<=y)
20
+ ・技能値判定(xDM<=y / xDM<=yEz
21
21
  "(個数)DM<=(判定値)"で指定します。
22
22
  ダイスの個数は省略可能で、省略した場合1個になります。
23
- 例)2DM<=5 DM<=8
23
+ 個数や判定値には四則演算(+-*/)を使用できます。
24
+ 末尾にEzを付けるとダイス数にzを加算します。E-zで減算も可能です。
25
+ 例)2DM<=5 DM<=8 2+2DM<=5 → 4個で判定値5
26
+ 2DM<=5E2 → 4個で判定値5 / 3DM<=5E-1 → 2個で判定値5
27
+ ※ダイス数が0以下になる場合は確定失敗
28
+
24
29
  ・技能値判定(sDAa+z)
25
30
  "(技能レベル)DA(能力値)+(ダイスボーナス)"で指定します。
26
31
  ダイスボーナスの個数は省略可能で、省略した場合0になります。
@@ -30,7 +35,7 @@ module BCDice
30
35
  MESSAGETEXT
31
36
 
32
37
  # ダイスボットで使用するコマンドを配列で列挙する
33
- register_prefix('\d*DM<=', '(B|\d*)DA')
38
+ register_prefix('[-+*/\d]*DM<=', '(B|\d*)DA')
34
39
 
35
40
  CRITICAL_VALUE = 1
36
41
  FUMBLE_VALUE = 10
@@ -41,7 +46,7 @@ module BCDice
41
46
  # @return [nil] 無効なコマンドだった場合
42
47
  def eval_game_system_specific_command(command)
43
48
  case command
44
- when /^\d*DM<=\d/
49
+ when %r{^[-+*/\d]*DM<=[-+*/\d]+}
45
50
  roll_dm(command)
46
51
  when /^(B|\d*)DA\d+(\+)?\d*/
47
52
  roll_da(command)
@@ -93,21 +98,37 @@ module BCDice
93
98
  # @param [String] command コマンド
94
99
  # @return [Result, nil] コマンドの結果
95
100
  def roll_dm(command)
96
- m = /^(\d+)?DM<=(\d+)$/.match(command)
101
+ m = %r{^([-+*/\d]+)?DM<=([-+*/\d]+)(E(-?\d+))?$}.match(command)
97
102
  unless m
98
103
  return nil
99
104
  end
100
105
 
101
- num_dice = m[1]&.to_i || 1
102
- success_threshold = m[2].to_i
106
+ base_dice_str = m[1]
107
+ threshold_str = m[2]
108
+ modifier = m[4]&.to_i
109
+
110
+ base_dice = base_dice_str ? Arithmetic.eval(base_dice_str, RoundType::FLOOR) : 1
111
+ success_threshold = Arithmetic.eval(threshold_str, RoundType::FLOOR)
112
+ return nil unless base_dice && success_threshold
113
+
114
+ num_dice = modifier ? base_dice + modifier : base_dice
115
+
116
+ # ダイス数が0以下の場合は確定失敗
103
117
  if num_dice <= 0
104
- return nil
118
+ return Result.fumble("(#{command}) > #{translate('Emoklore.dice_count_zero')}")
105
119
  end
106
120
 
107
121
  # ダイスロール本体
108
122
  result = dice_roll(num_dice, success_threshold)
109
123
 
110
- result.text = "(#{num_dice}DM<=#{success_threshold}) > #{result.text}"
124
+ # 出力フォーマット:算術式やダイスボーナスがある場合は展開形を表示
125
+ has_arithmetic = base_dice_str&.match?(%r{[-+*/]}) || threshold_str.match?(%r{[-+*/]})
126
+ values_changed = (base_dice_str && base_dice_str != base_dice.to_s) || threshold_str != success_threshold.to_s
127
+ if modifier || (has_arithmetic && values_changed)
128
+ result.text = "(#{command}) > (#{num_dice}DM<=#{success_threshold}) > #{result.text}"
129
+ else
130
+ result.text = "(#{num_dice}DM<=#{success_threshold}) > #{result.text}"
131
+ end
111
132
  return result
112
133
  end
113
134
 
@@ -124,6 +145,10 @@ module BCDice
124
145
  num_dice = (m[1] == "B" ? 1 : (m[1]&.to_i || 1)) + bonus
125
146
  success_threshold = m[1].to_i + m[2].to_i
126
147
 
148
+ if num_dice <= 0
149
+ return Result.fumble("(#{command}) > #{translate('Emoklore.dice_count_zero')}")
150
+ end
151
+
127
152
  result = dice_roll(num_dice, success_threshold)
128
153
 
129
154
  result.text = "(#{command}) > (#{num_dice}DM<=#{success_threshold}) > #{result.text}"
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'bcdice/game_system/Emoklore'
4
+
3
5
  module BCDice
4
6
  module GameSystem
5
7
  class Emoklore_Korean < Emoklore
@@ -17,10 +19,16 @@ module BCDice
17
19
 
18
20
  # ダイスボットの使い方
19
21
  HELP_MESSAGE = <<~MESSAGETEXT
20
- ・기능치 판정(xDM<=y)
22
+ ・기능치 판정(xDM<=y / xDM<=yEz
21
23
  "(개수)DM<=(판정치)"로 판정합니다.
22
24
  주사위의 개수는 생략 가능하며, 생략 시 1개로 설정됩니다.
23
- ex)2DM<=5 DM<=8
25
+ 주사위 개수와 판정치에는 사칙연산(+-*/)을 사용할 수 있습니다.
26
+ 수식 끝에 Ez를 붙이면 주사위 수에 z를 더합니다. E-z로 빼기도 가능합니다.
27
+ ex)2DM<=5 DM<=8 2DM<=3+2
28
+ 2+2DM<=5 → 주사위 4개로 판정치 5
29
+ 2DM<=5E2 → 주사위 2+2 = 주사위 4개로 판정치 5
30
+ 3DM<=5E-1 → 주사위 3-1 = 주사위 2개로 판정치 5
31
+ ※주사위 수가 0 이하가 되는 경우 확정 실패
24
32
 
25
33
  ・기능치 판정(sDAa+z)
26
34
  "(기능 레벨)DA(능력치)+(주사위 보너스)"로 판정합니다.
@@ -16,13 +16,13 @@ module BCDice
16
16
  HELP_MESSAGE = <<~MESSAGETEXT
17
17
  ■ ファッジダイスによる判定 (xDF+y>=t)
18
18
  ファッジダイスをx個ダイスロールし、結果を判定します。
19
- x: ダイス数
19
+ x: ダイス数(省略時4)
20
20
  y: 修正値(省略可)
21
- t: 目標値値(省略可)
22
- 例)4DF, 4DF>=3, 4DF+1>=3
21
+ t: 目標値(省略可)
22
+ 例)4DF, 4DF>=3, 4DF+1>=3, DF, DF>=3, DF+1>=3
23
23
  MESSAGETEXT
24
24
 
25
- register_prefix('\d+DF')
25
+ register_prefix('\d*DF')
26
26
 
27
27
  def eval_game_system_specific_command(command)
28
28
  roll_df(command)
@@ -40,7 +40,9 @@ module BCDice
40
40
  return nil
41
41
  end
42
42
 
43
- dice_list = roll_fate_dice(parsed.prefix_number)
43
+ dice_x = 4
44
+ dice_x = parsed.prefix_number if parsed.prefix_number
45
+ dice_list = roll_fate_dice(dice_x)
44
46
  total = dice_list.sum() + parsed.modify_number
45
47
 
46
48
  fate_dice_list = dice_list.map do |i|
@@ -103,7 +105,9 @@ module BCDice
103
105
  if target.nil?
104
106
  Result.new
105
107
  elsif total == target
106
- Result.success("Tie")
108
+ Result.success("Tie(+0)")
109
+ elsif total == target + 1
110
+ Result.success("Succeed(+1)")
107
111
  elsif total >= target + 3
108
112
  Result.critical("Succeed with Style")
109
113
  elsif total >= target
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bcdice/game_system/FullMetalPanic'
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class FullMetalPanic_Korean < FullMetalPanic
8
+ # ゲームシステムの識別子
9
+ ID = 'FullMetalPanic:Korean'
10
+
11
+ # ゲームシステム名
12
+ NAME = '풀 메탈 패닉! RPG'
13
+
14
+ # ゲームシステム名の読みがな
15
+ SORT_KEY = '国際化:Korean:풀 메탈 패닉! RPG'
16
+
17
+ set_aliases_for_srs_roll('MG', 'FP')
18
+
19
+ register_prefix_from_super_class()
20
+
21
+ def initialize(command)
22
+ super(command)
23
+
24
+ @locale = :ko_kr
25
+ end
26
+ end
27
+ end
28
+ end
@@ -19,6 +19,18 @@ module BCDice
19
19
      【DT6】…6面ダイスを2つ振って判定します。『有利』なら【3DT6】、『不利』なら【1DT6】を使います。
20
20
  助手用:【AS】…6面ダイスを2つ振って判定します。『有利』なら【3AS】、『不利』なら【1AS】を使います。
21
21
      【AS10】…10面ダイスを2つ振って判定します。『有利』なら【3AS10】、『不利』なら【1AS10】を使います。
22
+
23
+ ・目標値の変更 (>=x)
24
+ ">=目標値"をつけると、成功となる出目の基準を変更します。
25
+ >=2と指定すると、2以上で成功になります。
26
+  例)DT>=2   3AS10>=3
27
+
28
+ ・スペシャル値の追加 ([x])
29
+ "[スペシャル値]"を付加することで、通常のスペシャル(出目6)に加えて、指定した数字でもスペシャルが発生するようになります。
30
+ カンマ(,)で区切って記入することで、複数の出目をスペシャルに指定することも可能です。
31
+ 目標値の変更(>=)と併用する場合は、必ず目標値指定の直後に記述してください。
32
+  例)DT[5]   AS[5,7]   DT>=2[5,7]
33
+
22
34
  ・各種表
23
35
  【セッション時】
24
36
  異常な癖決定表      SHRD/新・異常な癖決定表   SHND
@@ -44,6 +56,7 @@ module BCDice
44
56
   同僚たちと一緒に捜査する EVO/頻染みの店シチュエーション EVF/ハードBデカアクション EVB
45
57
   探偵を大人しくさせる捜査 EVL/伝統的捜査         EVZ/原始的捜査       EVR
46
58
   超探偵調査       EV6S/神速捜査         EV6F
59
+  変な助手        EV8A/代表的NPC捜査      EV8N
47
60
  感情表
48
61
   感情表A/B   FLT66・FLT10
49
62
   気に入っているところ  FLTL66 /気に入らないところ  FLTD66
@@ -72,12 +85,17 @@ module BCDice
72
85
  register_prefix('(\d+)?DT(?:6)?', '(\d+)?AS(?:10)?')
73
86
 
74
87
  def eval_game_system_specific_command(command)
75
- if (m = /^(\d+)?DT(?:6)?$/i.match(command))
88
+ if (m = /^(\d+)?DT(?:6)?(?:>=(\d+))?(?:\[(\d+(?:,\d+)*)\])?$/i.match(command))
76
89
  count = m[1]&.to_i || 2
77
- return roll_dt(command, count)
78
- elsif (m = /^(\d+)?AS(?:10)?$/i.match(command))
90
+ target = m[2]&.to_i
91
+ specials = m[3] ? m[3].split(',').map(&:to_i) : []
92
+ return roll_dt(command, count, target, specials)
93
+
94
+ elsif (m = /^(\d+)?AS(?:10)?(?:>=(\d+))?(?:\[(\d+(?:,\d+)*)\])?$/i.match(command))
79
95
  count = m[1]&.to_i || 2
80
- return roll_as(command, count)
96
+ target = m[2]&.to_i
97
+ specials = m[3] ? m[3].split(',').map(&:to_i) : []
98
+ return roll_as(command, count, target, specials)
81
99
  end
82
100
 
83
101
  return roll_tables(command, self.class::TABLES)
@@ -92,21 +110,24 @@ module BCDice
92
110
  SPECIAL_DICE = 6
93
111
 
94
112
  # 探偵用判定コマンド DT
95
- def roll_dt(command, count)
113
+ def roll_dt(command, count, target = nil, specials = nil)
96
114
  dice_list =
97
- if command =~ /^(\d*)DT6$/i
115
+ if command =~ /^(\d*)DT6/i
98
116
  @randomizer.roll_barabara(count, 6)
99
117
  else
100
118
  @randomizer.roll_barabara(count, 10)
101
119
  end
120
+
102
121
  max = dice_list.max
122
+ threshold = target || SUCCESS_THRESHOLD
123
+ special_values = ([SPECIAL_DICE] + specials).uniq
103
124
 
104
125
  result =
105
126
  if max <= 1
106
127
  Result.fumble(translate("FutariSousa.DT.fumble"))
107
- elsif dice_list.include?(SPECIAL_DICE)
128
+ elsif (dice_list & special_values).any?
108
129
  Result.critical(translate("FutariSousa.DT.special"))
109
- elsif max >= SUCCESS_THRESHOLD
130
+ elsif max >= threshold
110
131
  Result.success(translate("success"))
111
132
  else
112
133
  Result.failure(translate("failure"))
@@ -117,21 +138,23 @@ module BCDice
117
138
  end
118
139
 
119
140
  # 助手用判定コマンド AS
120
- def roll_as(command, count)
141
+ def roll_as(command, count, target = nil, specials = nil)
121
142
  dice_list =
122
- if command =~ /^(\d*)AS10$/i
143
+ if command =~ /^(\d*)AS10/i
123
144
  @randomizer.roll_barabara(count, 10)
124
145
  else
125
146
  @randomizer.roll_barabara(count, 6)
126
147
  end
127
148
  max = dice_list.max
149
+ threshold = target || SUCCESS_THRESHOLD
150
+ special_values = ([SPECIAL_DICE] + specials).uniq
128
151
 
129
152
  result =
130
153
  if max <= 1
131
154
  Result.fumble(translate("FutariSousa.AS.fumble"))
132
- elsif dice_list.include?(SPECIAL_DICE)
155
+ elsif (dice_list & special_values).any?
133
156
  Result.critical(translate("FutariSousa.AS.special"))
134
- elsif max >= SUCCESS_THRESHOLD
157
+ elsif max >= threshold
135
158
  Result.success(translate("FutariSousa.AS.success"))
136
159
  else
137
160
  Result.failure(translate("failure"))
@@ -262,6 +285,8 @@ module BCDice
262
285
  "EVR" => DiceTable::Table.from_i18n("FutariSousa.table.EVR", locale),
263
286
  "EV6S" => DiceTable::Table.from_i18n("FutariSousa.table.EV6S", locale),
264
287
  "EV6F" => DiceTable::Table.from_i18n("FutariSousa.table.EV6F", locale),
288
+ "EV8A" => DiceTable::Table.from_i18n("FutariSousa.table.EV8A", locale),
289
+ "EV8N" => DiceTable::Table.from_i18n("FutariSousa.table.EV8N", locale),
265
290
  "OBT" => DiceTable::D66Table.from_i18n("FutariSousa.table.OBT", locale),
266
291
  "ACT" => DiceTable::Table.from_i18n("FutariSousa.table.ACT", locale),
267
292
  "EWT" => DiceTable::Table.from_i18n("FutariSousa.table.EWT", locale),
@@ -18,20 +18,36 @@ module BCDice
18
18
  HELP_MESSAGE = <<~MESSAGETEXT
19
19
  ・판정용 커맨드
20
20
  탐정용:【DT】…10면체 주사위를 2개 굴려 판정합니다.『유리함』이라면【3DT】, 『불리함』이라면【1DT】를 사용합니다.
21
+     【DT6】…6면체 주사위를 2개 굴려 판정합니다.『유리함』이라면【3DT6】,『불리함』이라면【1DT6】를 사용합니다.
21
22
  조수용:【AS】…6면체 주사위를 2개 굴려 판정합니다. 『유리함』이라면【3AS】, 『불리함』이라면【1AS】를 사용합니다.
23
+     【AS10】…10면체 주사위를 2개 굴려 판정합니다.『유리함』이라면【3AS10】,『불리함』이라면【1AS10】를 사용합니다.
22
24
   
25
+ ・목표값 변경 (>=x)
26
+ 명령어 뒤에 ">=목표값"를 붙이면, 성공으로 판정되는 주사위 눈의 기준을 변경할 수 있습니다.
27
+ >=2라고 지정하면, 주사위 눈이 2 이상일 때 성공으로 판정합니다.
28
+  예시)DT>=2   3AS10>=3
29
+
30
+ ・스페셜 값 추가 ([x])
31
+ 명령어 뒤에 "[스페셜 값]"을 붙이면, 일반적인 스페셜(주사위 눈 6)외에도 지정한 숫자가 나왔을 때 스페셜이 발생합니다.
32
+ 쉼표(,)로 구분해서 입력하면 여러 개의 숫자를 스페셜 값으로 지정할 수 있습니다.
33
+ 목표값 변경(>=)과 스페셜 값 추가를 동시에 사용할 때는, 반드시 목표값을 먼저 적고 그 뒤에 스페셜 값을 이어서 입력해 주세요.
34
+  예시)DT[5]   AS[5,7]   DT>=2[5,7]
35
+
23
36
  ・각종표
24
37
  【세션 시】
25
- 기벽 결정 표 SHRD
38
+ 기벽 결정 표 SHRD/신 기벽 결정 표   SHND
39
+ 평범한? 기벽 결정 표 SHAD/형사 기벽 결정 표  SHKD
40
+ 규격 외 탐정용 기벽 결정 표   SHLD
26
41
   발언 표       SHFM/수사 강행 표     SHBT/시치미 표       SHPI
27
-  사건에 몰두 표    SHEG/파트너와…… 표     SHWP/뭔가 하고 있음 표   SHDS
42
+  사건에 몰두 표    SHEG/파트너와…… 표     SHWP/뭔가 하고 있다 표   SHDS
28
43
   기상천외 표     SHFT/갑작스런 영감 표    SHIN/희노애락 표      SHEM
29
44
   인간 모방 표     SHHE/인간 모방 실패 표   SHHF/파트너를 향한 장난 표 SHMP
30
-  의미심장     SHSB/초조함 표       SHFR/갑자기 왜그래 표   SHIS
31
-  억지 요구 표    SHSE/멀쩡해 보임     SHLM/질투에 사로잡힘 표   SHJS
32
-  오만한 태도 표   SHAR/비교적 가벼운 행동 표 SHRM/노 타임 표      SHNT
33
-  수사 방식 표    SHIM/귀족 표        SHNO/설명하지 않음 표   SHNE
34
-  형사 특유의 습관 표 SHHD
45
+  의미 있어 보이는 언동   SHSB/애가 타다 표       SHFR/갑자기 왜그래 표 SHIS
46
+  억지 요구를 하다 표    SHSE/멀쩡해 보이는 언동   SHLM/질투의 화신 표   SHJS
47
+  오만한 태도 표   SHAR/비교적 가벼운 기벽 표 SHRM/즉각 행동 표      SHNT
48
+  수사 방식 표    SHIM/귀족 표        SHNO/설명하지 않는다 표   SHNE
49
+  형사 특유의 습관 표 SHHD/유명한 탐정 표     SHGD/엄청나게 굉장해 표   SHSA
50
+  규격 외 사건에 몰두 표   SHEP/규격 외 파트너와……표   SHXP
35
51
   
36
52
  이벤트 표
37
53
   현장에서 EVS/왜? EVW/협력자와 함께 EVN
@@ -42,6 +58,7 @@ module BCDice
42
58
   형사 탐문 수사 EVQ/형사 대규모 수사 EVM/비밀스러운 정보 교환 EVP
43
59
   동료들과 함께 수사 EVO/단골 가게 시추에이션 EVF/하드B 형사 액션 EVB
44
60
   탐정을 얌전하게 만드는 수사 EVL/전통적 수사 EVZ/원시적 수사 EVR
61
+  규격 외 탐정 조사      EV6S/신속조사          EV6F
45
62
   
46
63
  감정 표
47
64
   감정 표A/B   FLT66・FLT10
@@ -52,7 +69,7 @@ module BCDice
52
69
   동료          FLTC66/부하        FLTU66/상사     FLTO66
53
70
   수사 방식 FLTI66
54
71
  조사 방해 요인 표 OBT  상태 이상 표 ACT  목격자 표 EWT  미제 사건 표 WMT
55
- 추억의 물품 결정 표 MIT  에피소드 동반 추억의 물품 결정 표 MITE  
72
+ 추억의 물품 결정 표 MIT  에피소드가 있는 추억의 물품 표 MITE  
56
73
  호칭 표A・B  NCT66・NCT10
57
74
   
58
75
  【설정】
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bcdice/game_system/Emoklore"
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class GaiaCare < Emoklore
8
+ # ゲームシステムの識別子
9
+ ID = "GaiaCare"
10
+
11
+ # ゲームシステム名
12
+ NAME = "ガイアケアTRPG"
13
+
14
+ # ゲームシステム名の読みがな
15
+ SORT_KEY = "かいあけあTRPG"
16
+
17
+ # 親クラスのコマンドを継承
18
+ register_prefix_from_super_class()
19
+
20
+ # ダイスボットの使い方
21
+ HELP_MESSAGE = <<~MESSAGETEXT
22
+ ・技能値判定(xDM<=y / xDM<=yEz)
23
+ "(個数)DM<=(判定値)"で指定します。
24
+ ダイスの個数は省略可能で、省略した場合1個になります。
25
+ 個数や判定値には四則演算(+-*/)を使用できます。
26
+ 末尾にEzを付けるとダイス数にzを加算します。E-zで減算も可能です。
27
+ 例)2DM<=5 DM<=8 2+2DM<=5 → 4個で判定値5
28
+ 2DM<=5E2 → 4個で判定値5 / 3DM<=5E-1 → 2個で判定値5
29
+ ※ダイス数が0以下になる場合は確定失敗
30
+
31
+ ・技能値判定(sDAa+z)
32
+ "(技能レベル)DA(能力値)+(ダイスボーナス)"で指定します。
33
+ ダイスボーナスの個数は省略可能で、省略した場合0になります。
34
+ 技能レベルは1~3の数値、またはベース技能の場合"b"が入ります。
35
+ ダイスの個数は技能レベルとダイスボーナスの個数により決定し、s+z個のダイスを振ります。(s="b"の場合はs=1)
36
+ 判定値はs+aとなります。(s="b"の場合はs=0)
37
+ MESSAGETEXT
38
+ end
39
+ end
40
+ end
@@ -686,8 +686,8 @@ module BCDice
686
686
  text: "爆発により外装の一部が吹き飛ばされる。",
687
687
  damage: "重傷1/スタン"}],
688
688
  [25,
689
- {name: "痕が残るほどの大きく外装が溶解する。",
690
- text: "大溶解",
689
+ {name: "大溶解",
690
+ text: "痕が残るほどの大きく外装が溶解する。",
691
691
  damage: "重傷2"}],
692
692
  [28,
693
693
  {name: "熱波",