bcdice 3.1.2 → 3.4.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 (161) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +154 -75
  3. data/README.md +3 -2
  4. data/i18n/Cthulhu/zh_hans.yml +11 -0
  5. data/i18n/MagicaLogia/zh_hans.yml +564 -0
  6. data/i18n/StellarKnights/ja_jp.yml +498 -0
  7. data/i18n/StellarKnights/ko_kr.yml +498 -0
  8. data/i18n/zh_hans.yml +7 -0
  9. data/lib/bcdice/command/parsed.rb +11 -3
  10. data/lib/bcdice/command/parser.rb +179 -100
  11. data/lib/bcdice/common_command/add_dice.rb +1 -1
  12. data/lib/bcdice/common_command/barabara_dice/node.rb +2 -2
  13. data/lib/bcdice/common_command/barabara_dice/result.rb +6 -0
  14. data/lib/bcdice/common_command/calc.rb +1 -1
  15. data/lib/bcdice/common_command/choice.rb +78 -7
  16. data/lib/bcdice/dice_table.rb +3 -0
  17. data/lib/bcdice/dice_table/d66_half_grid_table.rb +33 -0
  18. data/lib/bcdice/dice_table/d66_left_range_table.rb +29 -0
  19. data/lib/bcdice/dice_table/d66_one_third_table.rb +34 -0
  20. data/lib/bcdice/game_system.rb +10 -0
  21. data/lib/bcdice/game_system/AceKillerGene.rb +1 -1
  22. data/lib/bcdice/game_system/Ainecadette.rb +68 -0
  23. data/lib/bcdice/game_system/Airgetlamh.rb +1 -1
  24. data/lib/bcdice/game_system/Alsetto.rb +1 -1
  25. data/lib/bcdice/game_system/AlterRaise.rb +2 -2
  26. data/lib/bcdice/game_system/Amadeus.rb +110 -93
  27. data/lib/bcdice/game_system/AngelGear.rb +10 -5
  28. data/lib/bcdice/game_system/AnimaAnimus.rb +16 -9
  29. data/lib/bcdice/game_system/Arianrhod.rb +6 -8
  30. data/lib/bcdice/game_system/Avandner.rb +1 -1
  31. data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
  32. data/lib/bcdice/game_system/BattleTech.rb +109 -28
  33. data/lib/bcdice/game_system/BeastBindTrinity.rb +28 -12
  34. data/lib/bcdice/game_system/BeginningIdol.rb +5 -5
  35. data/lib/bcdice/game_system/BeginningIdol_Korean.rb +5 -5
  36. data/lib/bcdice/game_system/BladeOfArcana.rb +1 -1
  37. data/lib/bcdice/game_system/BlindMythos.rb +39 -38
  38. data/lib/bcdice/game_system/BloodCrusade.rb +6 -7
  39. data/lib/bcdice/game_system/BloodMoon.rb +9 -8
  40. data/lib/bcdice/game_system/CardRanker.rb +8 -7
  41. data/lib/bcdice/game_system/ChaosFlare.rb +21 -15
  42. data/lib/bcdice/game_system/Chill.rb +10 -10
  43. data/lib/bcdice/game_system/Chill3.rb +9 -9
  44. data/lib/bcdice/game_system/CodeLayerd.rb +39 -39
  45. data/lib/bcdice/game_system/ColossalHunter.rb +34 -47
  46. data/lib/bcdice/game_system/CrashWorld.rb +1 -1
  47. data/lib/bcdice/game_system/Cthulhu.rb +1 -1
  48. data/lib/bcdice/game_system/Cthulhu7th.rb +50 -12
  49. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
  50. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
  51. data/lib/bcdice/game_system/Cthulhu_SimplifiedChinese.rb +60 -0
  52. data/lib/bcdice/game_system/DarkBlaze.rb +0 -11
  53. data/lib/bcdice/game_system/DarkDaysDrive.rb +8 -7
  54. data/lib/bcdice/game_system/DeadlineHeroes.rb +11 -10
  55. data/lib/bcdice/game_system/DemonParasite.rb +5 -13
  56. data/lib/bcdice/game_system/DesperateRun.rb +1 -1
  57. data/lib/bcdice/game_system/DoubleCross.rb +3 -1
  58. data/lib/bcdice/game_system/Dracurouge.rb +3 -2
  59. data/lib/bcdice/game_system/EclipsePhase.rb +14 -14
  60. data/lib/bcdice/game_system/Elric.rb +18 -14
  61. data/lib/bcdice/game_system/Elysion.rb +1 -1
  62. data/lib/bcdice/game_system/EmbryoMachine.rb +9 -8
  63. data/lib/bcdice/game_system/Emoklore.rb +25 -20
  64. data/lib/bcdice/game_system/Fiasco.rb +1 -1
  65. data/lib/bcdice/game_system/FilledWith.rb +4 -0
  66. data/lib/bcdice/game_system/FutariSousa.rb +12 -10
  67. data/lib/bcdice/game_system/GURPS.rb +17 -28
  68. data/lib/bcdice/game_system/Garako.rb +1 -1
  69. data/lib/bcdice/game_system/GardenOrder.rb +12 -7
  70. data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +1 -1
  71. data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
  72. data/lib/bcdice/game_system/Gorilla.rb +2 -8
  73. data/lib/bcdice/game_system/GranCrest.rb +189 -417
  74. data/lib/bcdice/game_system/Gundog.rb +9 -8
  75. data/lib/bcdice/game_system/GundogRevised.rb +10 -9
  76. data/lib/bcdice/game_system/GundogZero.rb +1 -1
  77. data/lib/bcdice/game_system/GurpsFW.rb +16 -16
  78. data/lib/bcdice/game_system/HarnMaster.rb +19 -26
  79. data/lib/bcdice/game_system/HatsuneMiku.rb +1 -1
  80. data/lib/bcdice/game_system/Hieizan.rb +12 -21
  81. data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
  82. data/lib/bcdice/game_system/HuntersMoon.rb +5 -10
  83. data/lib/bcdice/game_system/InfiniteFantasia.rb +19 -17
  84. data/lib/bcdice/game_system/Insane.rb +13 -20
  85. data/lib/bcdice/game_system/Irisbane.rb +154 -0
  86. data/lib/bcdice/game_system/IthaWenUa.rb +8 -15
  87. data/lib/bcdice/game_system/JamesBond.rb +10 -10
  88. data/lib/bcdice/game_system/JekyllAndHyde.rb +1 -1
  89. data/lib/bcdice/game_system/Kamigakari.rb +1 -1
  90. data/lib/bcdice/game_system/KanColle.rb +4 -9
  91. data/lib/bcdice/game_system/KemonoNoMori.rb +26 -39
  92. data/lib/bcdice/game_system/KillDeathBusiness.rb +7 -15
  93. data/lib/bcdice/game_system/KurayamiCrying.rb +141 -2
  94. data/lib/bcdice/game_system/LiveraDoll.rb +254 -304
  95. data/lib/bcdice/game_system/LogHorizon.rb +13 -10
  96. data/lib/bcdice/game_system/MagicaLogia_SimplifiedChinese.rb +66 -0
  97. data/lib/bcdice/game_system/MeikyuDays.rb +10 -8
  98. data/lib/bcdice/game_system/MeikyuKingdom.rb +26 -26
  99. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +4 -3
  100. data/lib/bcdice/game_system/MetalHead.rb +12 -22
  101. data/lib/bcdice/game_system/MetalHeadExtream.rb +5 -5
  102. data/lib/bcdice/game_system/MonotoneMuseum.rb +8 -6
  103. data/lib/bcdice/game_system/Nechronica.rb +63 -90
  104. data/lib/bcdice/game_system/NinjaSlayer.rb +6 -7
  105. data/lib/bcdice/game_system/NjslyrBattle.rb +8 -11
  106. data/lib/bcdice/game_system/OneWayHeroics.rb +1 -1
  107. data/lib/bcdice/game_system/Paradiso.rb +3 -3
  108. data/lib/bcdice/game_system/ParasiteBlood.rb +1 -1
  109. data/lib/bcdice/game_system/Peekaboo.rb +4 -9
  110. data/lib/bcdice/game_system/Pendragon.rb +7 -7
  111. data/lib/bcdice/game_system/PersonaO.rb +86 -0
  112. data/lib/bcdice/game_system/PhantasmAdventure.rb +8 -8
  113. data/lib/bcdice/game_system/Postman.rb +1 -1
  114. data/lib/bcdice/game_system/PulpCthulhu.rb +1 -1
  115. data/lib/bcdice/game_system/Raisondetre.rb +2 -2
  116. data/lib/bcdice/game_system/Revulture.rb +123 -0
  117. data/lib/bcdice/game_system/RuneQuest.rb +8 -8
  118. data/lib/bcdice/game_system/Ryutama.rb +1 -1
  119. data/lib/bcdice/game_system/SRS.rb +17 -16
  120. data/lib/bcdice/game_system/SamsaraBallad.rb +38 -11
  121. data/lib/bcdice/game_system/Satasupe.rb +32 -32
  122. data/lib/bcdice/game_system/ScreamHighSchool.rb +5 -5
  123. data/lib/bcdice/game_system/SharedFantasia.rb +19 -23
  124. data/lib/bcdice/game_system/ShinobiGami.rb +14 -6
  125. data/lib/bcdice/game_system/Skynauts.rb +103 -142
  126. data/lib/bcdice/game_system/SkynautsBouken.rb +228 -0
  127. data/lib/bcdice/game_system/StarryDolls.rb +318 -0
  128. data/lib/bcdice/game_system/SteamPunkers.rb +25 -7
  129. data/lib/bcdice/game_system/StellarKnights.rb +85 -706
  130. data/lib/bcdice/game_system/StellarKnights_Korean.rb +79 -0
  131. data/lib/bcdice/game_system/SterileLife.rb +2 -3
  132. data/lib/bcdice/game_system/StratoShout.rb +8 -16
  133. data/lib/bcdice/game_system/Strave.rb +1 -1
  134. data/lib/bcdice/game_system/SwordWorld.rb +16 -7
  135. data/lib/bcdice/game_system/SwordWorld2_0.rb +2 -2
  136. data/lib/bcdice/game_system/SwordWorld2_5.rb +2 -2
  137. data/lib/bcdice/game_system/TherapieSein.rb +1 -1
  138. data/lib/bcdice/game_system/TokumeiTenkousei.rb +4 -3
  139. data/lib/bcdice/game_system/TokyoGhostResearch.rb +1 -1
  140. data/lib/bcdice/game_system/TorgEternity.rb +2 -2
  141. data/lib/bcdice/game_system/ToshiakiHolyGrailWar.rb +92 -0
  142. data/lib/bcdice/game_system/TrinitySeven.rb +279 -280
  143. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +1 -1
  144. data/lib/bcdice/game_system/Utakaze.rb +53 -48
  145. data/lib/bcdice/game_system/Villaciel.rb +1 -1
  146. data/lib/bcdice/game_system/WARPS.rb +11 -9
  147. data/lib/bcdice/game_system/WaresBlade.rb +4 -9
  148. data/lib/bcdice/game_system/Warhammer.rb +15 -6
  149. data/lib/bcdice/game_system/Warhammer4.rb +15 -11
  150. data/lib/bcdice/game_system/WitchQuest.rb +1 -1
  151. data/lib/bcdice/game_system/YankeeYogSothoth.rb +4 -9
  152. data/lib/bcdice/game_system/Yggdrasill.rb +1 -1
  153. data/lib/bcdice/game_system/ZettaiReido.rb +20 -25
  154. data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +1 -1
  155. data/lib/bcdice/game_system/sword_world/rating_parsed.rb +4 -4
  156. data/lib/bcdice/game_system/sword_world/rating_parser.rb +1 -1
  157. data/lib/bcdice/game_system/sword_world/transcendent_test.rb +26 -8
  158. data/lib/bcdice/repl.rb +1 -1
  159. data/lib/bcdice/result.rb +26 -0
  160. data/lib/bcdice/version.rb +1 -1
  161. metadata +22 -5
@@ -82,16 +82,34 @@ module BCDice
82
82
 
83
83
  dice_list_org_str = "[#{dice_list_org.join(',')}]" if dice_list_filtered != dice_list_org
84
84
 
85
+ result = result_compare(total)
86
+ result.critical = critical?
87
+ result.fumble = fumble?
88
+
89
+ dice_status =
90
+ if result.fumble?
91
+ "ファンブル"
92
+ elsif result.critical?
93
+ "クリティカル"
94
+ end
95
+ result_str =
96
+ if result.success?
97
+ "成功"
98
+ elsif result.failure?
99
+ "失敗"
100
+ end
101
+
85
102
  sequence = [
86
103
  command_expr(),
87
104
  dice_list_org_str,
88
105
  interim_expr(dice_list_filtered),
89
- dice_status(),
106
+ dice_status,
90
107
  total.to_s,
91
- result_compare(total)
108
+ result_str
92
109
  ].compact
110
+ result.text = sequence.join(" > ")
93
111
 
94
- return sequence.join(" > ")
112
+ return result
95
113
  end
96
114
 
97
115
  private
@@ -187,14 +205,6 @@ module BCDice
187
205
  return expr
188
206
  end
189
207
 
190
- def dice_status
191
- if fumble?
192
- "ファンブル"
193
- elsif critical?
194
- "クリティカル"
195
- end
196
- end
197
-
198
208
  def fumble?
199
209
  @dice_total <= @fumble
200
210
  end
@@ -220,7 +230,13 @@ module BCDice
220
230
 
221
231
  def result_compare(total)
222
232
  if @cmp_op
223
- total.send(@cmp_op, @target_number) ? "成功" : "失敗"
233
+ if total.send(@cmp_op, @target_number)
234
+ Result.success(nil)
235
+ else
236
+ Result.failure(nil)
237
+ end
238
+ else
239
+ Result.new
224
240
  end
225
241
  end
226
242
  end
@@ -55,13 +55,13 @@ module BCDice
55
55
  INFO_MESSAGE_TEXT
56
56
 
57
57
  register_prefix(
58
- '[1-7]*PD\d+(?:[\+\-]\d+)?',
58
+ '[1-7]*PD',
59
59
  'HW',
60
60
  'BWT',
61
61
  'LWT',
62
62
  'TWT',
63
63
  'CWT',
64
- 'LO\d{0,2}',
64
+ 'LO',
65
65
  'SU',
66
66
  'WI',
67
67
  'NA',
@@ -88,7 +88,7 @@ module BCDice
88
88
  'NUR',
89
89
  'GUR',
90
90
  'BUR',
91
- 'BT\d*',
91
+ 'BT',
92
92
  'SGT',
93
93
  'RS',
94
94
  'SH',
@@ -110,7 +110,7 @@ module BCDice
110
110
  'NCH',
111
111
  'GCH',
112
112
  'PCH',
113
- 'IT\d*',
113
+ 'IT',
114
114
  'ACT',
115
115
  'ACB',
116
116
  'ACE',
@@ -124,7 +124,7 @@ module BCDice
124
124
  'RU',
125
125
  '\d{2}C',
126
126
  'BU',
127
- '\d+S?A[1-6]*(?:[\+\-]\d+)?',
127
+ '\d+S?A',
128
128
  'SIP',
129
129
  'BVT',
130
130
  'LVT',
@@ -53,13 +53,13 @@ module BCDice
53
53
  INFO_MESSAGE_TEXT
54
54
 
55
55
  register_prefix(
56
- '[1-7]*PD\d+(?:[\+\-]\d+)?',
56
+ '[1-7]*PD',
57
57
  'HW',
58
58
  'BWT',
59
59
  'LWT',
60
60
  'TWT',
61
61
  'CWT',
62
- 'LO\d{0,2}',
62
+ 'LO',
63
63
  'SU',
64
64
  'WI',
65
65
  'NA',
@@ -85,7 +85,7 @@ module BCDice
85
85
  'NUR',
86
86
  'GUR',
87
87
  'BUR',
88
- 'BT\d*',
88
+ 'BT',
89
89
  'SGT',
90
90
  'RS',
91
91
  'SH',
@@ -105,7 +105,7 @@ module BCDice
105
105
  'SCH',
106
106
  'WCH',
107
107
  'NCH',
108
- 'IT\d*',
108
+ 'IT',
109
109
  'ACT',
110
110
  'ACB',
111
111
  'ACE',
@@ -119,7 +119,7 @@ module BCDice
119
119
  'RU',
120
120
  '\d{2}C',
121
121
  'BU',
122
- '\d+S?A[1-6]*(?:[\+\-]\d+)?',
122
+ '\d+S?A',
123
123
  'SIP',
124
124
  'BVT',
125
125
  'LVT',
@@ -33,7 +33,7 @@ module BCDice
33
33
  INFO_MESSAGE_TEXT
34
34
 
35
35
  register_prefix(
36
- '\d+A\d*[CF]?\d*[CF]?\d*',
36
+ '\d+A',
37
37
  'CT3[\+\-]?',
38
38
  'CTR[\+\-]?',
39
39
  'DJV\-?',
@@ -22,7 +22,7 @@ module BCDice
22
22
   BMSは振り足しを自動では行いません。
23
23
  例)BM>=1 BM@3>=1 BMS2>=1
24
24
 
25
- ・判定振り足し:ReRollx,x,x...@y>=1
25
+ ・判定振り足し:ReRollx,x,x...@y>=z
26
26
   x:振るダイスの個数
27
27
    y:目標難易度(省略可。デフォルト4)
28
28
    z:必要成功度
@@ -40,15 +40,15 @@ module BCDice
40
40
  def eval_game_system_specific_command(command)
41
41
  debug("eval_game_system_specific_command Begin")
42
42
 
43
- text = judgeRoll(command)
44
- return text unless text.nil?
43
+ result = judgeRoll(command)
44
+ return result unless result.nil?
45
45
 
46
46
  isStop = true
47
47
  text, = reRoll(command, isStop)
48
48
  return text unless text.nil?
49
49
 
50
- text = getRulingPlanetDiceCommandResult(command)
51
- return text unless text.nil?
50
+ result = getRulingPlanetDiceCommandResult(command)
51
+ return result unless result.nil?
52
52
 
53
53
  text = getDurtyTableCommandReuslt(command)
54
54
  return text unless text.nil?
@@ -72,9 +72,10 @@ module BCDice
72
72
  getRollResult([diceCount], judgeNumberText, judgeNumber, targetNumber, isReRoll, isStop)
73
73
 
74
74
  message += text
75
- message += getTotalResultMessageText(bitList, successList, countOneList, targetNumber, isStop, canReRoll)
75
+ result = getTotalResult(bitList, successList, countOneList, targetNumber, isStop, canReRoll)
76
+ result.text = message + result.text
76
77
 
77
- return message
78
+ return result
78
79
  end
79
80
 
80
81
  def reRoll(command, isStop)
@@ -181,7 +182,7 @@ module BCDice
181
182
  return message, bitList, successList, countOneList, canReRoll
182
183
  end
183
184
 
184
- def getTotalResultMessageText(bitList, successList, countOneList, targetNumber, isStop, canReRoll)
185
+ def getTotalResult(bitList, successList, countOneList, targetNumber, isStop, canReRoll)
185
186
  success = successList.inject { |sum, i| sum + i }
186
187
  countOne = countOneList.inject { |sum, i| sum + i }
187
188
 
@@ -196,27 +197,35 @@ module BCDice
196
197
 
197
198
  if success >= targetNumber
198
199
  result += " > 現状で成功。コマンド実行で追加リロールも可能"
200
+ return Result.success(result)
199
201
  else
200
202
  result += " > 現状のままでは失敗"
201
- result += "。汚染ポイント+#{countOne}" if countOne >= 1
203
+ if countOne >= 1
204
+ result += "。汚染ポイント+#{countOne}"
205
+ return Result.fumble(result)
206
+ else
207
+ return Result.failure(result)
208
+ end
202
209
  end
203
-
204
- return result
205
210
  end
206
211
 
207
212
  if success >= targetNumber
208
213
  result += " > 成功"
209
-
210
214
  if bitList.size >= 1
211
215
  result += "、禁書ビット発生[#{bitList.join(',')}]"
216
+ return Result.critical(result)
217
+ else
218
+ return Result.success(result)
212
219
  end
213
-
214
220
  else
215
221
  result += " > 失敗"
216
- result += "。汚染ポイント+#{countOne}" if countOne >= 1
222
+ if countOne >= 1
223
+ result += "。汚染ポイント+#{countOne}"
224
+ return Result.fumble(result)
225
+ else
226
+ return Result.failure(result)
227
+ end
217
228
  end
218
-
219
- return result
220
229
  end
221
230
 
222
231
  def getSameDieList(diceList)
@@ -252,44 +261,36 @@ module BCDice
252
261
  end
253
262
 
254
263
  def getRulingPlanetDiceCommandResult(command)
255
- return nil unless command =~ /^RP(\d+)/i
264
+ m = /^RP(\d+)$/i.match(command)
265
+ return nil unless m
256
266
 
257
- targetNumbers = Regexp.last_match(1).split(//).map(&:to_i)
267
+ targetNumbers = m[1].each_char.map(&:to_i)
258
268
  diceList = getRulingPlanetDice
259
269
 
260
- matchResult = "失敗"
261
- targetNumbers.each do |i|
262
- if diceList.include?(i)
263
- matchResult = "発動"
264
- break
265
- end
266
- end
270
+ condition = diceList.any? { |dice| targetNumbers.include?(dice) }
267
271
 
268
- text = "守護星表チェック(#{targetNumbers.join(',')}) #{diceList.count}D10[#{diceList.join(',')}] #{matchResult}"
272
+ result = condition ? "発動" : "失敗"
273
+ text = "守護星表チェック(#{targetNumbers.join(',')}) > #{diceList.count}D10[#{diceList.join(',')}] > #{result}"
269
274
 
270
- return text
275
+ Result.new.tap do |r|
276
+ r.text = text
277
+ r.condition = condition
278
+ end
271
279
  end
272
280
 
273
281
  def getRulingPlanetDice
274
- dice1 = @randomizer.roll_once(10)
275
- dice2 = dice1
282
+ dice1, dice2 = @randomizer.roll_barabara(2, 10)
276
283
 
277
284
  while dice1 == dice2
278
285
  dice2 = @randomizer.roll_once(10)
279
286
  end
280
287
 
281
- dice1 = changeRulingPlanetDice(dice1)
282
- dice2 = changeRulingPlanetDice(dice2)
288
+ dice1 = 0 if dice1 == 10
289
+ dice2 = 0 if dice2 == 10
283
290
 
284
291
  return dice1, dice2
285
292
  end
286
293
 
287
- def changeRulingPlanetDice(dice)
288
- return 0 if dice == 10
289
-
290
- return dice
291
- end
292
-
293
294
  def getDurtyTableCommandReuslt(command)
294
295
  return nil unless /^DT$/i =~ command
295
296
 
@@ -456,7 +457,7 @@ module BCDice
456
457
  ),
457
458
  }.freeze
458
459
 
459
- register_prefix('BM', 'ReRoll\d+', 'RP\d+', 'DT', TABLES.keys)
460
+ register_prefix('BM', 'ReRoll', 'RP', 'DT', TABLES.keys)
460
461
  end
461
462
  end
462
463
  end
@@ -44,18 +44,17 @@ module BCDice
44
44
  @round_type = RoundType::CEIL # 端数切り上げに設定
45
45
  end
46
46
 
47
- def check_2D6(total, dice_total, _dice_list, cmp_op, target)
48
- return '' if target == '?'
49
- return '' unless cmp_op == :>=
47
+ def result_2d6(total, dice_total, _dice_list, cmp_op, target)
48
+ return nil if target == '?' || cmp_op != :>=
50
49
 
51
50
  if dice_total <= 2
52
- "ファンブル(【モラル】-3。追跡フェイズなら吸血シーンを追加。戦闘フェイズなら吸血鬼は追加行動を一回得る)"
51
+ Result.fumble("ファンブル(【モラル】-3。追跡フェイズなら吸血シーンを追加。戦闘フェイズなら吸血鬼は追加行動を一回得る)")
53
52
  elsif dice_total >= 12
54
- "スペシャル(【モラル】+3。追跡フェイズならあなたに関係を持つPCの【モラル】+2。攻撃判定ならダメージ+1D6)"
53
+ Result.critical("スペシャル(【モラル】+3。追跡フェイズならあなたに関係を持つPCの【モラル】+2。攻撃判定ならダメージ+1D6)")
55
54
  elsif total >= target
56
- "成功"
55
+ Result.success("成功")
57
56
  else
58
- "失敗"
57
+ Result.failure("失敗")
59
58
  end
60
59
  end
61
60
 
@@ -9,7 +9,7 @@ module BCDice
9
9
  ID = 'BloodMoon'
10
10
 
11
11
  # ゲームシステム名
12
- NAME = 'ブラッド・ムーン'
12
+ NAME = 'ブラッドムーン'
13
13
 
14
14
  # ゲームシステム名の読みがな
15
15
  SORT_KEY = 'ふらつとむうん'
@@ -43,18 +43,19 @@ module BCDice
43
43
  end
44
44
 
45
45
  # ゲーム別成功度判定(2D6)
46
- def check_2D6(total, dice_total, _dice_list, cmp_op, target)
47
- return '' if target == '?'
48
- return '' unless cmp_op == :>=
46
+ def result_2d6(total, dice_total, _dice_list, cmp_op, target)
47
+ return nil unless cmp_op == :>=
49
48
 
50
49
  if dice_total <= 2
51
- return "ファンブル(【余裕】が 0 に)"
50
+ Result.fumble("ファンブル(【余裕】が 0 に)")
52
51
  elsif dice_total >= 12
53
- return "スペシャル(【余裕】+3)"
52
+ Result.critical("スペシャル(【余裕】+3)")
53
+ elsif target == '?'
54
+ Result.nothing
54
55
  elsif total >= target
55
- return "成功"
56
+ Result.success("成功")
56
57
  else
57
- return "失敗"
58
+ Result.failure("失敗")
58
59
  end
59
60
  end
60
61
 
@@ -37,18 +37,19 @@ module BCDice
37
37
  end
38
38
 
39
39
  # ゲーム別成功度判定(2D6)
40
- def check_2D6(total, dice_total, _dice_list, cmp_op, target)
41
- return '' if target == '?'
42
- return '' unless cmp_op == :>=
40
+ def result_2d6(total, dice_total, _dice_list, cmp_op, target)
41
+ return nil unless cmp_op == :>=
43
42
 
44
43
  if dice_total <= 2
45
- return "ファンブル"
44
+ Result.fumble("ファンブル")
46
45
  elsif dice_total >= 12
47
- return "スペシャル > " + RTT.roll_command(@randomizer, "RM")
46
+ Result.critical("スペシャル > " + RTT.roll_command(@randomizer, "RM"))
47
+ elsif target == "?"
48
+ Result.nothing
48
49
  elsif total >= target
49
- return "成功"
50
+ Result.success("成功")
50
51
  else
51
- return "失敗"
52
+ Result.failure("失敗")
52
53
  end
53
54
  end
54
55
 
@@ -39,33 +39,39 @@ module BCDice
39
39
  - FT7
40
40
  INFO_MESSAGE_TEXT
41
41
 
42
- register_prefix('\d*CF', 'FT\d*')
42
+ register_prefix('\d*CF', 'FT')
43
43
 
44
44
  # ゲーム別成功度判定(2D6)。以前の処理をそのまま残しています。
45
- def check_2D6(total, dice_total, _dice_list, cmp_op, target)
46
- return '' if target == '?'
45
+ def result_2d6(total, dice_total, _dice_list, cmp_op, target)
46
+ return nil unless cmp_op == :>=
47
47
 
48
- output = ''
48
+ sequence = []
49
+ result = Result.new
49
50
 
50
51
  if dice_total <= 2
51
52
  total -= 20
52
- output = "ファンブル(-20)"
53
+ sequence.push("ファンブル(-20)")
54
+ result.fumble = true
53
55
  end
54
56
 
55
- unless cmp_op == :>=
56
- return output
57
- end
57
+ if target != '?'
58
+ if total >= target
59
+ sequence.push("成功")
60
+ result.success = true
61
+ else
62
+ sequence.push("失敗")
63
+ result.failure = true
64
+ end
58
65
 
59
- if total >= target
60
- output += " 成功"
61
- if total > target
62
- output += " > 差分値#{total - target}"
66
+ if total - target != 0
67
+ sequence.push("差分値#{total - target}")
63
68
  end
64
- else
65
- output += " > 失敗 > 差分値#{total - target}"
66
69
  end
67
70
 
68
- return output
71
+ return Result.nothing if sequence.empty?
72
+
73
+ result.text = sequence.join(" > ")
74
+ return result
69
75
  end
70
76
 
71
77
  def eval_game_system_specific_command(command)