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
@@ -13,20 +13,62 @@ module BCDice
13
13
  SORT_KEY = "にんしやすれいやあTRPG2"
14
14
 
15
15
  HELP_MESSAGE = <<~TEXT
16
- - K{x1},{x2},...,{xn}
17
- 難易度K([K]ids)の成功判定({x1}B6>=2)を、ダイス{x1}個({x2}~を指定した場合はそれぞれ個々に)で実行します。
18
- 先頭の文字を変えることで、難易度E([E]asy),N([N]ormal),H([H]ard),U([U]ltra-hard)もしくはUH([U]ltra-[H]ard)でも実行可能です。(以下も同様)
19
-
20
- - K{x1},{x2},...,{xn}[>={y}]
21
- K{x1}のロールの結果を使って、[]内で指定された条件を満たすダイスの個数を追加で出力します。
22
- 判定式は「>=」の他に「>」「<=」「<」「=」「!=」が利用可能です。
23
- [=5][=6]のように複数記述することで、それぞれで追加判定が可能です。
24
-
25
- - K{x1},{x2},...,{xn}[S] or K{x1},{x2},...,{xn}[S{y}]
26
- - K{x1},{x2},...,{xn}[C] or K{x1},{x2},...,{xn}[C{y}]
27
- いずれもK{x1},{x2},...,{xn}[>={y}]のショートカットです。({y}省略時は固定値6で処理します。)
28
- 出力時のテキストが、Sの場合は「サツバツ!」に、Cの場合は「クリティカル!」になります。
29
- こちらも複数記述することで、それぞれで追加判定が可能です。
16
+ --- 成功判定コマンド ---
17
+ 通常のダイスの「{ダイス個数}B6>={難易度ごとの目標出目}」を実行するための簡易入力コマンドです。
18
+
19
+ - K{x}
20
+ 難易度K([K]ids/目標値=2)の成功判定をダイス{x}個で実行します。
21
+ 先頭の文字を変えることで、難易度E([E]asy/目標値=3),N([N]ormal/目標値=4),H([H]ard/目標値=5),U([U]ltra-hard/目標値=6)もしくはUH([U]ltra-[H]ard/目標値=6)でも実行可能です。
22
+
23
+ - K{x1},N{x2},...,U{xn}
24
+ K{x}の複数ロール版。
25
+ カンマ(,)で区切って複数回入力すると、区切られたセットごとに成功判定を行います。
26
+ 2回目以降は難易度指定を省略可能で、省略した場合はひとつ前の難易度を引き継いで判定を行います。
27
+ 以下のコマンドについても同様の書式で複数ロールしての同時判定が可能です。
28
+
29
+ --- 追加判定コマンド ---
30
+ 以下のコマンド群は、成功判定コマンドの後ろに付けて実行してください。
31
+
32
+ - [>={y}]
33
+ - [>{y}]
34
+ - [<={y}]
35
+ - [<{y}]
36
+ - [={y}]
37
+ - [!={y}]
38
+ 成功判定コマンドでカンマ区切りで指定した各ロール結果に対して、[]内で指定された条件で追加判定を行います。
39
+ それぞれ、{y}以上(>=)、{y}より大きい(>)、{y}以下(<=)、{y}未満(<)、{y}のみ(=)、{y}以外(!=)を判定し、
40
+ ロール結果の中で条件を満たしたダイスの個数を「追加判定」というテキストと共に出力します。
41
+ [=5][=6]のように複数記述することで、ひとつのロールに対して複数パターンでの追加判定が可能です。
42
+ ※ 条件は一括でしか指定できないため、ロールごとに異なる条件を指定したい場合はコマンドを分けてください。以下も同様です。。
43
+
44
+ - [>={y1}{y2}...{yn}+]
45
+ 成功判定コマンドでカンマ区切りで指定した各ロール結果に対して、[>={y1}]~[>={yn}]の各条件で追加判定を行います。
46
+ 出目の中に条件を満たしたダイスが**全て**含まれていた場合、「追加判定成功!」というテキストを出力します。
47
+ 例えば[>=665+]とした場合、出目の中に6以上のダイスが2つと5以上のダイスが1つ含まれていれば成功扱いになります。
48
+
49
+ - [S{y}]
50
+ 成功判定コマンドでカンマ区切りで指定した各ロール結果に対して、[>={y}]と同等の追加判定を行います。
51
+ 条件を満たしたダイスの個数を「サツバツ判定」というテキストと共に出力します。
52
+ ※ {y}は省略可能、省略した場合は固定値6で処理します。
53
+
54
+ - [S{y1}{y2}...{yn}+]
55
+ - [S{y1}{y2}...{yn}/{z1}{z2}...{zn}+]
56
+ 成功判定コマンドでカンマ区切りで指定した各ロール結果に対して、[>={y1}{y2}...{yn}+]と[>={z1}{z2}...{zn}+]と同等の追加判定を行います。
57
+ {z1}~{zn}で条件を満たした場合、「ナムアミダブツ!」というテキストを出力します。
58
+ {z1}~{zn}の条件を満たせず、{y1}~{yn}で条件を満たした場合、「サツバツ!」というテキストを出力します。
59
+ ※ {z1}~{zn}を省略した場合は、「サツバツ!」の判定のみを行ないます。
60
+
61
+ - [C{y}]
62
+ 成功判定コマンドでカンマ区切りで指定した各ロール結果に対して、[>={y}]と同等の追加判定を行います。
63
+ 条件を満たしたダイスの個数を「クリティカル判定」というテキストと共に出力します。
64
+ ※ {y}は省略可能、省略した場合は固定値6で処理します。
65
+
66
+ - [C{y1}{y2}...{yx}+]
67
+ 成功判定コマンドでカンマ区切りで指定した各ロール結果に対して、[>={y1}{y2}...{yn}+]と同等の追加判定を行います。
68
+ 条件を条件を満たした場合、「クリティカル!」というテキストを出力します。
69
+
70
+ --- 定型文コマンド ---
71
+ 以下のコマンド群はそれぞれ単体で使用してください。
30
72
 
31
73
  - SB or SB@{x}
32
74
  {x}(1-6/省略時はd6)に対応したサツバツ([S]atz-[B]atz)・クリティカル表の内容を返します。
@@ -79,27 +121,118 @@ module BCDice
79
121
  # @param default [Integer]
80
122
  # @return [Integer]
81
123
  def s_to_i(string, default)
82
- return string.nil? ? default : string.to_i
124
+ return string.nil? || string.empty? ? default : string.to_i
83
125
  end
84
126
 
85
- # 判定結果の出力テキストと成功数のカウントを返す。
127
+ # 難易度判定の成功数を返す。
86
128
  # @param dice_array [Array<Integer>]
87
129
  # @param difficulty [Integer]
88
130
  # @param cmp_op [String]
89
- # @param title_text [String]
90
- # @return [String, Integer]
91
- def check_difficulty(dice_array, difficulty, cmp_op, title_text)
92
- success_num = 0
131
+ # @return Integer
132
+ def check_difficulty(dice_array, difficulty, cmp_op)
93
133
  success_dice = []
94
134
  dice_array.each do |dice_value|
95
135
  if dice_value.send(Normalize.comparison_operator(cmp_op), difficulty)
96
- success_num += 1
97
136
  success_dice.push(dice_value)
98
137
  end
99
138
  end
100
139
 
101
- success_dice_s = success_dice.empty? ? "" : "[#{success_dice.sort.reverse.join(',')}]"
102
- return "#{title_text}:#{success_num}#{success_dice_s}", success_num
140
+ return success_dice
141
+ end
142
+
143
+ # 難易度判定結果を返す。
144
+ # @param dice_array [Array<Integer>]
145
+ # @param difficulty [Integer]
146
+ # @param cmp_op [String]
147
+ # @return [boolean]
148
+ def check_difficulty_new(dice_array, difficulty, cmp_op)
149
+ if difficulty.nil? || dice_array.empty?
150
+ return false
151
+ end
152
+
153
+ # 難易度とダイスを昇順ソート
154
+ sorted_dice_array = dice_array.sort()
155
+ sorted_difficulty = difficulty.chars.sort()
156
+ debug("sorted_difficulty #{sorted_difficulty}")
157
+ debug("sorted_dice_array #{sorted_dice_array}")
158
+
159
+ # 出目が低い順に難易度を越えているかチェック
160
+ check_index = 0
161
+ sorted_dice_array.each do |dice_value|
162
+ if dice_value.send(Normalize.comparison_operator(cmp_op), sorted_difficulty[check_index].to_i)
163
+ check_index += 1
164
+ end
165
+ end
166
+
167
+ # 全難易度を突破していたら成功を返す
168
+ return check_index >= sorted_difficulty.size
169
+ end
170
+
171
+ # 追加判定の処理
172
+ # @param roll_result 判定対象とするロール結果の配列
173
+ # @param ap_commanc 追加判定のコマンド
174
+ # @return String
175
+ def proc_appendix(roll_result, ap_command)
176
+ debug("----- ap_command: #{ap_command}")
177
+ output_text = ''
178
+ case ap_command
179
+ when RE_COUNT_SATZ_BATZ
180
+ diff_condition = Regexp.last_match[1]
181
+ if ap_command.end_with?("+")
182
+ # サツバツ発生チェック
183
+ sb_condition = diff_condition.sub("\+", "").split("/")[0]
184
+ nm_condition = diff_condition.sub("\+", "").split("/")[1]
185
+ debug("sb_condition: #{sb_condition}")
186
+ debug("nm_condition: #{nm_condition}")
187
+
188
+ if check_difficulty_new(roll_result.last_dice_list, nm_condition, ">=")
189
+ output_text += ", ナムアミダブツ![#{ap_command}]"
190
+ elsif check_difficulty_new(roll_result.last_dice_list, sb_condition, ">=")
191
+ output_text += ", サツバツ![#{ap_command}]"
192
+ end
193
+
194
+ else
195
+ # サツバツ数カウント
196
+ diff_result_array = check_difficulty(roll_result.last_dice_list, s_to_i(diff_condition, 6), ">=")
197
+ output_text += ", サツバツ判定[#{ap_command}]:#{diff_result_array.size}"
198
+ unless diff_result_array.empty?
199
+ output_text += "[#{diff_result_array.sort.reverse.join(',')}]"
200
+ end
201
+ end
202
+ when RE_COUNT_CRITICAL
203
+ diff_condition = Regexp.last_match[1]
204
+ if ap_command.end_with?("+")
205
+ # クリティカル発生チェック
206
+ if check_difficulty_new(roll_result.last_dice_list, diff_condition.sub("\+", ""), ">=")
207
+ output_text += ", クリティカル![#{ap_command}]"
208
+ end
209
+ else
210
+ # クリティカル数カウント
211
+ diff_result_array = check_difficulty(roll_result.last_dice_list, s_to_i(diff_condition, 6), ">=")
212
+ output_text += ", クリティカル判定[#{ap_command}]:#{diff_result_array.size}"
213
+ unless diff_result_array.empty?
214
+ output_text += "[#{diff_result_array.sort.reverse.join(',')}]"
215
+ end
216
+ end
217
+ when RE_COUNT_JUDGE
218
+ diff_type = Regexp.last_match[1]
219
+ diff_condition = Regexp.last_match[2]
220
+ debug("#{diff_type} / #{diff_condition}")
221
+ if ap_command.end_with?("+")
222
+ # 追加判定チェック
223
+ if check_difficulty_new(roll_result.last_dice_list, diff_condition.sub("\+", ""), diff_type)
224
+ output_text += ", 追加判定成功![#{ap_command}]"
225
+ end
226
+ else
227
+ # 追加判定カウント
228
+ diff_result_array = check_difficulty(roll_result.last_dice_list, s_to_i(diff_condition, 6), diff_type)
229
+ output_text += ", 追加判定[#{ap_command}]:#{diff_result_array.size}"
230
+ unless diff_result_array.empty?
231
+ output_text += "[#{diff_result_array.sort.reverse.join(',')}]"
232
+ end
233
+ end
234
+ end
235
+ return output_text
103
236
  end
104
237
 
105
238
  # ダイス処理(2版用)
@@ -109,11 +242,16 @@ module BCDice
109
242
  output_text = ''
110
243
  total_success_num = 0
111
244
 
112
- difficulty = DIFFICULTY_SYMBOL_TO_INTEGER.fetch(match[1])
113
- appendix = match[3]
245
+ command = match[1]
246
+ appendix = match[2]
247
+ difficulty = 0
114
248
 
115
- match[2].split(",").each do |sub_command|
116
- dice_num = sub_command.to_i
249
+ command.split(",").each do |sub_command|
250
+ /^(UH|[KENHU])?(\d+)$/i.match(sub_command)
251
+ unless Regexp.last_match[1].nil?
252
+ difficulty = DIFFICULTY_SYMBOL_TO_INTEGER.fetch(Regexp.last_match[1])
253
+ end
254
+ dice_num = Regexp.last_match[2].to_i
117
255
 
118
256
  # D6バラバラロール
119
257
  roll_command = "#{dice_num}B6>=#{difficulty}"
@@ -127,24 +265,7 @@ module BCDice
127
265
  debug("---- appendix: [#{appendix}]")
128
266
  ap_command_array = appendix.split("\]\[")
129
267
  ap_command_array.each do |ap_command|
130
- debug("----- ap_command: #{ap_command}")
131
- case ap_command
132
- when RE_COUNT_SATZ_BATZ
133
- # サツバツ!カウント
134
- check_result = check_difficulty(roll_result.last_dice_list, s_to_i(Regexp.last_match[1], 6), ">=", "サツバツ!")
135
- output_text += ", #{check_result[0]}"
136
- success_num += check_result[1]
137
- when RE_COUNT_CRITICAL
138
- # クリティカル!カウント
139
- check_result = check_difficulty(roll_result.last_dice_list, s_to_i(Regexp.last_match[1], 6), ">=", "クリティカル!")
140
- output_text += ", #{check_result[0]}"
141
- success_num += check_result[1]
142
- when RE_COUNT_JUDGE
143
- # 追加判定カウント
144
- check_result = check_difficulty(roll_result.last_dice_list, Regexp.last_match[2].to_i, Regexp.last_match[1], "追加判定")
145
- output_text += ", #{check_result[0]}"
146
- success_num += check_result[1]
147
- end
268
+ output_text += proc_appendix(roll_result, ap_command)
148
269
  end
149
270
  end
150
271
  output_text += " \n"
@@ -266,11 +387,11 @@ module BCDice
266
387
  end
267
388
  end
268
389
 
269
- RE_COUNT_SATZ_BATZ = /S([1-6])?/i.freeze
270
- RE_COUNT_CRITICAL = /C([1-6])?/i.freeze
271
- RE_COUNT_JUDGE = /(=|!=|>=|>|<=|<)([1-6])/.freeze
390
+ RE_COUNT_SATZ_BATZ = %r{S([1-6]|[1-6]+(?:/[1-6]+)?\+)?$}i.freeze
391
+ RE_COUNT_CRITICAL = /C([1-6]|[1-6]+\+)?$/i.freeze
392
+ RE_COUNT_JUDGE = /(=|!=|>=|>|<=|<)([1-6]+\+|[1-6])/.freeze
272
393
 
273
- RE_JUDGE_DICEROLL = /^(UH|[KENHU])([\d,]+)(?:\[((?:(?:S([1-6])?|C([1-6])?|(=|!=|>=|>|<=|<)([1-6]))(?:\]\[)?)+)\])?$/i.freeze
394
+ RE_JUDGE_DICEROLL = %r{^((?:(?:UH|[KENHU])?\d+,?)+)(?:\[((?:(?:S([1-6]|[1-6]+(?:/[1-6]+)?\+)?|C([1-6]*\+?)?|(=|!=|>=|>|<=|<)([1-6]+\+?))(?:\]\[)?)+)\])?$}i.freeze
274
395
  RE_JUDGE_SATZ_BATZ = /^SB(?:@([1-6]))?$/i.freeze
275
396
  RE_JUDGE_WASSHOI = /^WS([1-9]|10|11|12)$/i.freeze
276
397
  RE_JUDGE_WASSHOI_ENTRY = /^WSE(?:@([1-6]))?$/i.freeze
@@ -22,270 +22,28 @@ module BCDice
22
22
  MESSAGETEXT
23
23
 
24
24
  def eval_game_system_specific_command(command)
25
- info = TABLES[command.upcase]
26
- return nil if info.nil?
27
-
28
- name = info[:name]
29
- type = info[:type]
30
- table = info[:table]
31
-
32
- text, number =
33
- case type
34
- when '1D20'
35
- get_table_by_nDx(table, 1, 20)
36
- end
37
-
38
- return nil if text.nil?
39
-
40
- return "#{name}(#{number}) > #{text}"
25
+ roll_tables(command, TABLES)
41
26
  end
42
27
 
43
- TABLES =
44
- {
45
- "LR" => {
46
- name: "喪失取戻表",
47
- type: '1D20',
48
- table: [
49
- '鬼化。妄執かくして鬼と結実す。欠けたるところすでになし。あやかし、己の欠けたるを足せり。すなわちその身、人ならず。',
50
- '妄想。とくと見よ。何も失ってなどおらぬ。この肉この魂この身上、欠けたるところぞなし。欠けし夢を見しのみ。全て夢なり。',
51
- '鵺型。肉に内に暗雲ゆらめく。欠けたるところ漂うそれは、鶴が欠片。暖昧の境界なれば、失いしものまた戻りたるが如く。',
52
- '諦観。己が身を知る。望む愚かを知る。足掻く愚かを知る。心は折れり。望みは絶えり。諦めることで足るものもある知らむ。',
53
- '屍漁。もはやいかな所業もいとわず。されば数多の骸を漁り、ついに欠けたるを満たせり。代わりに欠けたる心、知ることぞなし。',
54
- '呪刻。あまねく呪はば、己も囚わる。己を騙る呪い、己を捕らえ絡めれば、欠けたるもまた満ちて見ゆる。',
55
- '得心。すべては己の行いの結果なれば、因果応報。それなきは不具合なれど、得心せり。もはや悩めどせんなきことなりや。',
56
- '奪取。無ければ、奪え。あな妬ましと思わば奪え。奪いて己がものとせよ。さすればたちまち、欲するところ戻れり。',
57
- '罪価。己が罪を知れり。かくあさましき罪業に比ぶれば、己が失いしもの、なんと軽きことか。さあれば、悩むるに能はず。',
58
- '代替。失へるもの、未だ失われり。されど、代わるものを得たり。二度とは失うわじ。失わばその痛みに狂い果てむ。',
59
- '受容。納得はなし。諦観はなし。されど受け入れり。欠けたるもまた己なれば、欠けるところもて満たさば、それ己ならずや。',
60
- '代行。かかる身にそれなくとも是。かく行い為すは、己が筆ならず。代わりて為す者、信ずべきあらばこそ。',
61
- '適応。心痛むる時多けれど、欠けたるにも馴れたり。もはや欠けるに不自由なし。さればそれすなわち、欠けたるに非ず',
62
- '妖賞。大妖に遇ひて、饗応す。彼の妖、大いに慶びてその身に欠けたるを与へむ。それ異様なれど、用は足れり。',
63
- '奪還。つひに奪われしもの、奪い返せり!取り戻せしそれ、再び手の内に収まりて輝けり。けしてまた手放すことあらじ。',
64
- '本懐。己の求むるを、ついに為し遂げり。もはや己が力、己が技、疑うところなし。己が有様になんぞ足らざるあるべきや。',
65
- '取得。艱難辛苦ぞありや。ついぞ果てに失いしそれ、身に修めん。ただ取り戻せしものにあらじ。新たに得たりしや。',
66
- '賜物。その欠ける様、彼の人あはれに思いて、かくなるを与え賜り。以て、満ちたる己、彼の人にまた仕えむ。',
67
- '大悟。足掻けれど足掻けれど、満ちることなし。足りざるは自然。己の姿を受け入れむ。されば欠けたるに、悩まさるるもなし。',
68
- '望月。欠けたる月が満ちるが如く。欠けたるは突然に戻れり。いかなる誠、いかなる印か、知るものはあらず。'
69
- ],
70
- },
71
-
72
- "BL" => {
73
- name: "血脈の喪失表",
74
- type: '1D20',
75
- table: [
76
- '髪の色。一夜にしてあなたの髪は白くなった。',
77
- '視力。周囲がぼんやりとしか見えない。',
78
- '所作。体の一部がまともに動かせない。',
79
- '痛み。体が痛みを感じなくなってしまった。',
80
- '容貌。顔に大きな傷や火傷を負った。',
81
- '血の気。あなたの肌は血の気を失ったままだ。',
82
- '赤い血。体を流れる血が異様な色となった。',
83
- '子を作る力。子を作る力を失った。',
84
- '器用さ。体が常に小さく震えている。',
85
- '健康。病を患った……体が衰弱している。',
86
- '寿命。あなたの寿命は残りわずかとなった。',
87
- 'ぬくもり。その体は常に冷たい……。',
88
- '片目。片目を失ってしまった……。',
89
- '片脚。片脚を切り落とされた!',
90
- '片腕。片腕を切り落とされた!',
91
- '生命。あなたの鼓動は止まって久しい。',
92
- '真の力。本来の力がほとんど発揮できない。',
93
- '肉。異様に痩せたか、体の一部が白骨化している。',
94
- '人の体。体が歪み変わり、異形と化した。',
95
- '己の体。今は他人の体を借りている。'
96
- ],
97
- },
98
-
99
- "LL" => {
100
- name: "生様の喪失表",
101
- type: '1D20',
102
- table: [
103
- '主君の寵愛。不興を買ってしまった。',
104
- '師匠。死んだか、あるいはあなたが捨てられた。',
105
- '面子。大いに恥をかいた。このままにしておけない。',
106
- '時間。今まで精魂を傾けて来たものは無駄だった。',
107
- '血縁。信じていた生まれではなかった……。',
108
- '家宝。家の宝、あるいは形見を奪われてしまった。',
109
- '恋人。死んだか、あるいは奪われた。',
110
- '運。何をやってもうまくいかない。',
111
- '財産。騙し取られたか……。あるいは使い果たした。',
112
- '名声。あなたの名声は地に落ちている……。',
113
- '居場所。居るべき場所、身分を失ってしまった……。',
114
- '地位。かつての地位は失われたのだ。',
115
- '日常。こんな世の中でも平和に暮らしていたのに。',
116
- '相棒。死んだか、あるいは裏切られた。',
117
- '仕える人。死んだか、あるいはあなたが捨てられた。',
118
- '人望。かつてあなたを讃えた人が、今やあなたを罵る。',
119
- '家族。死んだか、あるいはあなたが捨てられた。',
120
- '故郷。何者かに滅ぼされたか、あるいは自滅した。',
121
- '守るべき人。守るべき人を守れなかった……。',
122
- '自由。脅され縛られ、誰かの命令を聞くしかできない。'
123
- ],
124
- },
125
-
126
- "SL" => {
127
- name: "魂魄の喪失表",
128
- type: '1D20',
129
- table: [
130
- '誇り。誇りなど残ってはいない。',
131
- '心の余裕。今を生きるだけで精一杯。',
132
- '敬う心。己こそが全てだ。',
133
- '気力。何もやる気がおきない……。',
134
- '安眠。夜毎の悪夢に、まともに眠れない。',
135
- '信じる心。二度と人など信じるものか。',
136
- '愛。もはや誰かを愛することなどない。',
137
- '夢。前に見えていた光、目標。今は闇の中だ。',
138
- '一線。己の中の超えてはならぬ線を踏み越えた。',
139
- '信じたもの。かつて信じたのはまやかしだった。',
140
- '人の心。この世で人の心が何の役に立つ?',
141
- '瞳の光。全て虚しいものとしか見えない。',
142
- '希望。この世に何を望むというのだろう?',
143
- '自制心。己を抑えて何とする?',
144
- '涙。その目が涙を流すことはない。',
145
- '笑顔。二度と笑いなどしないだろう。',
146
- '大切な記憶。どうしてか……記憶を失っている。',
147
- '本当の自分。己を偽りすぎて、本来の己を忘れた。',
148
- '正気。今のあなたは狂気の沙汰だ!',
149
- '己の意志。あなたは誰かの人形。道具に過ぎない。'
150
- ],
151
- },
152
-
153
- "FL" => {
154
- name: "因縁表",
155
- type: '1D20',
156
- table: [
157
- '仇敵。奴は敵だ。あなたの敵だ。',
158
- '殺意。殺してやりたい。',
159
- '蔑視。口ほどにもない存在だ。',
160
- '嫉妬。なぜアイツだけが……。',
161
- '恐怖。恐ろしい。あれを怒らせてはいけない。',
162
- '目障り。邪魔だ。気に入らない。',
163
- '利用。役に立ってくれそうだな。',
164
- '玩具。せいぜい楽しませてもらおう。',
165
- '依存。あの人がいなければいけないのだ。',
166
- '欲望。お前が欲しい……。',
167
- '好敵。なかなかやるじゃないか。',
168
- '憐憎。哀れな……。',
169
- '悪友。腐れ縁。信用できないが妙に心地いい。',
170
- '畏怖。あの人には逆らえない。',
171
- '恩義。恩がある……返さなければ。',
172
- '親友。心から信じられる友だ。',
173
- '尊敬。あの人のようになりたい。',
174
- '相棒。言葉はなくとも全てが通じ合う。',
175
- '思慕。恋をしてしまった。',
176
- '主君。心の主君。身命を賭して守り仕える。'
177
- ],
178
- },
179
-
180
- "HG" => {
181
- name: "地獄門通過描写表",
182
- type: '1D20',
183
- table: [
184
- '背後見れば、地獄の門をば幻視せり。危うき次第を知りたり.',
185
- '必死に歩めり。背後に穂れし血と臓脈、こぼしたるが心地なれど。',
186
- '背後の地に深き爪痕あり。己を捕らへむとせる鬼の爪跡かと思ふ。',
187
- '劫火に焼かるる己を幻視す。汗にまみれ覚めれば、己が所業悔悟せり。',
188
- '水鏡に映る己を見て目を覚ます。彼のままなれば地獄に堕つると。',
189
- '天に鶴騒ぎたり。御身が魂晩取り逃がしたりと吃るが如く。',
190
- '足が泥淳に囚わるる幻視。引きずり込む亡者。必死に逃れ至れり。',
191
- '陰に蠢く餓鬼を見ゆ・明日は己ぞと思へば、背も震えたり。',
192
- '喪失の苦しみ、いくばくか休めり。他を思う心地ぞ生まれり。',
193
- 'いみじう悩み苦しけれど、やがてそれも馴れり。今や苦しみならず。',
194
- 'しずけき雨降らば、己が所業洗い流さるるとも、思へたり。',
195
- '汚泥が如く絡みし過ぎたる日々、わずかに離れたる心地ぞする。',
196
- '背負いし怨念ら退き薄れむ。これなるは縁がゆへか、心地ゆへか。',
197
- '内に孕むる絶望へ、連理たれと希望の芽、萌ゆる。',
198
- '生温かき風と共に、大粒の雨降れり。すわ血の雨かとも思へり。',
199
- '人と関わりて縁を見ゆ。抱ふるもの、いくらか少なくなりき。',
200
- '夢枕、あるいは白昼夢なるか。神仏現るるにすがりたり。',
201
- '劫火の中、白き手が己を引けりと幻視す。あるひは過去の縁か。',
202
- '蛙呑む蛇を見たり。あさましき業に、己をふと顧みぬ。',
203
- '心中にて、かそけき希望の糸見へり。慎重にたぐりて登らむとす。'
204
- ],
205
- },
206
-
207
- "RG" => {
208
- name: "羅生門通過描写表",
209
- type: '1D20',
210
- table: [
211
- 'むごき所業、目にせり。心強張りて、常の様にてあれず.',
212
- '人の目に、己を嗤ふ気配感じたり。怒り、悔み、恥ぞ覚えむ。',
213
- '鬼の腕より、ついに逃るるか.おぞましき震へぞ、治まりき。',
214
- '辻吹く風に、人骨散れり。たちまち無常の感、起こりて心改めたり。',
215
- '愛憎恩普、いよいよ狂ほしく。猛るまま、ただただ前へと進めり。',
216
- '飢えたる犬の如し。泥水すすりても前に進み、想い果たさむ。',
217
- '喪失、取り戻すは近し。思はず、あさましき笑みぞ浮かべり。',
218
- 'いやしき者ども、あさましき目を向くる。蔑みてまかり通らむ。',
219
- '喪失の夢繰り返すこといくたびか。もはや業苦の炎冷め、常日頃の如し。',
220
- 'あるひは己の内よりか。あやしき声あれば欲心また昂ぶらむ。',
221
- '死人を見、成仏を祈れり。心あらば、己が内にて仏も宿らむ。',
222
- 'ただただ世の無常を知れば、哀愁の情あふれ感じむ。',
223
- '路地に小さき花咲くを見ゆ。我執の心晴れたる心地せり。',
224
- '冷たき風あらば、情動わずかに治まりて、落ち着きたりけり。',
225
- '酒を飲めり。酔ひたる心地の内に、業苦も曖昧とならむ。',
226
- '見えざる大門潜りしか。境目超えたるを感ずる。いざ、知らずの地平へ。',
227
- '乞食坊主に逢ひて、恵む。これもまたいくばくの功徳なりきや。',
228
- '子供ら遊ぶを見ゆ。己が古きを思へば、思はず顔ほころびぬ。',
229
- '暗雲に包まれし都なれど今その身に、いくばくかの光差し照らしけり。',
230
- '神仏の似姿、幻視す。されば、いかな身にも信心のいくばくか起これり。'
231
- ],
232
- },
233
-
234
- "VG" => {
235
- name: "朱雀門通過描写表",
236
- type: '1D20',
237
- table: [
238
- '雷響きて、暗霊いよいよ濃ゆし。己が先を見せるるが如し。',
239
- '今一つ取り戻すは及ばぬ口惜しきに、鬼が如く唸りし。',
240
- '求めし手、届かずも絶望すれど再び、ふらふらと歩み出さむ。',
241
- 'かたときの福なるか。狐に化かさるるが如く、鹿なる泡沫の夢。',
242
- '流るる血。朱に染まる視界。されど、染まらざる中に光あり。',
243
- '己が臓腑抉るが如く。己が業、抉り捨て進まん。',
244
- '先に狐の影見ゆ。あやしけれど、迷ひながら、狐を追へり。',
245
- '大いなる境を越えたるかと思えり。未だ道半ばなれば油断許さず。',
246
- '暗雲に白鷺翔けるを見ゆ。瑞兆なれば希望もまた湧きぬ。',
247
- '内より翼の出るが心地せり。いざ思い切りて、翔ばむ。',
248
- '割れた杯より漏れたるも、重ねたる杯に。合一せば余さず受けり。',
249
- '心激しくして魚跳ねるが如く。その実も暗き水面より跳ね出たり。',
250
- '貴き牛車と行き逢はむ。幽かな香に、目ぞ覚めたる思いせり。',
251
- 'ふと口をついて歌詠めり。何者か下の句継ぎて、心合わせむ。',
252
- '知らずの人より、送られし歌あり。返歌いかがせむかと思ひたり。',
253
- '鳥の巣立つを見たり。己もまた、新たな道歩むべきぞと心せり。',
254
- '暗雲貫きて、空に月あり。天より見らるる心地して、行い正せり。',
255
- '目的近づけど、心重し。胸痛みて、いみじう哀し。',
256
- '不意に仏心起こりて、万物慈みの念おぼえたり。',
257
- '頭上より何者かの楽の音、饗けり。その身、祝はるる心地せり。'
258
- ],
259
- },
260
-
261
- "OG" => {
262
- name: "応天門通過描写表",
263
- type: '1D20',
264
- table: [
265
- '光捕らへど暗し。新たなる地獄の門に落つる己を知りたり。',
266
- '求めしもの得たり。されど、なにものか失いし心地ぞせる……。',
267
- '狐鴫きて自覚むる。全て一夜の夢の如し。痛みもまたしかり。',
268
- 'なにゆへか、涙こぼるる。ただ涙こぼれ、業苦もまた流れむ。',
269
- '人想ひて、未練生まるる。己が幸求めれば、死を畏れむ。',
270
- '打ち返す波の音聞く。遥か遠く、旅立ちたむと念、生じたり。',
271
- '実る稲田を幻視す。もはや都の有様、人住む地に非ずと思へり。',
272
- '取り戻したるに、ただただ歓喜す。もはや周りの様も感ぜず。',
273
- 'あまたの人の目、御身見てざわめくを感ず。優越の心地あり。',
274
- 'かけがへなきもの、見つけたり。今はただ、そを喜ぶのみなれば。',
275
- '天盤にて星巡り、時満ちて、方合へり。なればその身にも幸ありむ。',
276
- '幾年月ぞ、剥那の如し。思ふれば囚わる檻も、無きかと見ゆ。',
277
- '天より鵺退きて、日の光差す。浴びる中、魂魄またぬくもりを覚えり。',
278
- '風流、解する心あらば天地自然もまた並び、自らその内に合一せむ。',
279
- 'いかにせで、己の在り様を責むるや。己は己なれが、気に負うに値せず。',
280
- 'あまねく世のことども、遠く鈍く思ひて心安らかなる境地に至れり。',
281
- '天遠く光差せば、淡き虹も浮かべり。何処かへ渡す橋とも見ゆ。',
282
- '天より一輪の花舞い降りて、御身の手に落つ。心また花咲けり。',
283
- '鵺の内に竜神舞へり。風雨激しく、身濡らせど、心清々し。',
284
- '都の暗雲、晴れたる日も稀にあり。なんぞ魂魄晴るる日なしや。'
285
- ],
286
- },
28
+ class << self
29
+ private
30
+
31
+ def translate_tables(locale)
32
+ {
33
+ "LR" => DiceTable::Table.from_i18n("Nuekagami.table.LR", locale),
34
+ "BL" => DiceTable::Table.from_i18n("Nuekagami.table.BL", locale),
35
+ "LL" => DiceTable::Table.from_i18n("Nuekagami.table.LL", locale),
36
+ "SL" => DiceTable::Table.from_i18n("Nuekagami.table.SL", locale),
37
+ "FL" => DiceTable::Table.from_i18n("Nuekagami.table.FL", locale),
38
+ "HG" => DiceTable::Table.from_i18n("Nuekagami.table.HG", locale),
39
+ "RG" => DiceTable::Table.from_i18n("Nuekagami.table.RG", locale),
40
+ "VG" => DiceTable::Table.from_i18n("Nuekagami.table.VG", locale),
41
+ "OG" => DiceTable::Table.from_i18n("Nuekagami.table.OG", locale),
42
+ }
43
+ end
44
+ end
287
45
 
288
- }.freeze
46
+ TABLES = translate_tables(:ja_jp)
289
47
 
290
48
  register_prefix(TABLES.keys)
291
49
  end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bcdice/game_system/Nuekagami'
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class Nuekagami_Korean < Nuekagami
8
+ # ゲームシステムの識別子
9
+ ID = 'Nuekagami:Korean'
10
+
11
+ # ゲームシステム名
12
+ NAME = '누에카가미'
13
+
14
+ # ゲームシステム名の読みがな
15
+ SORT_KEY = '国際化:Korean:누에카가미'
16
+
17
+ # ダイスボットの使い方
18
+ HELP_MESSAGE = <<~MESSAGETEXT
19
+ ・상실표(xL)
20
+  BL:혈맥, LL:생기(生様), SL:혼백, FL:인연
21
+
22
+ ・LR:상실 회복표
23
+
24
+ ・문 통과 묘사표(xG)
25
+  HG:지옥문, RG:나생문, VG:주작문, OG:응천문
26
+ MESSAGETEXT
27
+
28
+ def initialize(command)
29
+ super(command)
30
+
31
+ @locale = :ko_kr
32
+ end
33
+
34
+ TABLES = translate_tables(:ko_kr)
35
+
36
+ def eval_game_system_specific_command(command)
37
+ roll_tables(command, TABLES)
38
+ end
39
+
40
+ register_prefix(TABLES.keys)
41
+ end
42
+ end
43
+ end