bcdice 3.1.0 → 3.3.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 (160) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +78 -1
  3. data/README.md +1 -1
  4. data/i18n/MagicaLogia/zh_hans.yml +564 -0
  5. data/i18n/StellarKnights/ja_jp.yml +498 -0
  6. data/i18n/StellarKnights/ko_kr.yml +498 -0
  7. data/i18n/zh_hans.yml +7 -0
  8. data/lib/bcdice/command/parsed.rb +11 -3
  9. data/lib/bcdice/command/parser.rb +179 -100
  10. data/lib/bcdice/common_command/add_dice.rb +1 -1
  11. data/lib/bcdice/common_command/barabara_dice/node.rb +2 -2
  12. data/lib/bcdice/common_command/barabara_dice/result.rb +6 -0
  13. data/lib/bcdice/common_command/calc.rb +1 -1
  14. data/lib/bcdice/dice_table.rb +2 -0
  15. data/lib/bcdice/dice_table/d66_half_grid_table.rb +33 -0
  16. data/lib/bcdice/dice_table/d66_one_third_table.rb +34 -0
  17. data/lib/bcdice/dice_table/sai_fic_skill_table.rb +1 -1
  18. data/lib/bcdice/game_system.rb +6 -0
  19. data/lib/bcdice/game_system/AceKillerGene.rb +1 -1
  20. data/lib/bcdice/game_system/Ainecadette.rb +68 -0
  21. data/lib/bcdice/game_system/Airgetlamh.rb +1 -1
  22. data/lib/bcdice/game_system/Alsetto.rb +1 -1
  23. data/lib/bcdice/game_system/AlterRaise.rb +2 -2
  24. data/lib/bcdice/game_system/Amadeus.rb +110 -93
  25. data/lib/bcdice/game_system/AngelGear.rb +2 -2
  26. data/lib/bcdice/game_system/AnimaAnimus.rb +16 -9
  27. data/lib/bcdice/game_system/Arianrhod.rb +6 -8
  28. data/lib/bcdice/game_system/Avandner.rb +1 -1
  29. data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
  30. data/lib/bcdice/game_system/BattleTech.rb +109 -28
  31. data/lib/bcdice/game_system/BeastBindTrinity.rb +28 -12
  32. data/lib/bcdice/game_system/BeginningIdol.rb +5 -5
  33. data/lib/bcdice/game_system/BeginningIdol_Korean.rb +5 -5
  34. data/lib/bcdice/game_system/BladeOfArcana.rb +1 -1
  35. data/lib/bcdice/game_system/BlindMythos.rb +39 -38
  36. data/lib/bcdice/game_system/BloodCrusade.rb +6 -7
  37. data/lib/bcdice/game_system/BloodMoon.rb +9 -8
  38. data/lib/bcdice/game_system/CardRanker.rb +8 -7
  39. data/lib/bcdice/game_system/ChaosFlare.rb +21 -15
  40. data/lib/bcdice/game_system/Chill.rb +10 -10
  41. data/lib/bcdice/game_system/Chill3.rb +9 -9
  42. data/lib/bcdice/game_system/CodeLayerd.rb +39 -39
  43. data/lib/bcdice/game_system/ColossalHunter.rb +34 -47
  44. data/lib/bcdice/game_system/CrashWorld.rb +1 -1
  45. data/lib/bcdice/game_system/Cthulhu.rb +1 -1
  46. data/lib/bcdice/game_system/Cthulhu7th.rb +48 -10
  47. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +2 -2
  48. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +2 -2
  49. data/lib/bcdice/game_system/Cthulhu_ChineseTraditional.rb +1 -1
  50. data/lib/bcdice/game_system/Cthulhu_Korean.rb +1 -1
  51. data/lib/bcdice/game_system/DarkBlaze.rb +0 -11
  52. data/lib/bcdice/game_system/DarkDaysDrive.rb +8 -7
  53. data/lib/bcdice/game_system/DeadlineHeroes.rb +11 -10
  54. data/lib/bcdice/game_system/DemonParasite.rb +5 -13
  55. data/lib/bcdice/game_system/DesperateRun.rb +1 -1
  56. data/lib/bcdice/game_system/DoubleCross.rb +3 -1
  57. data/lib/bcdice/game_system/Dracurouge.rb +1 -1
  58. data/lib/bcdice/game_system/EclipsePhase.rb +14 -14
  59. data/lib/bcdice/game_system/Elric.rb +18 -14
  60. data/lib/bcdice/game_system/Elysion.rb +1 -1
  61. data/lib/bcdice/game_system/EmbryoMachine.rb +9 -8
  62. data/lib/bcdice/game_system/Emoklore.rb +25 -20
  63. data/lib/bcdice/game_system/Fiasco.rb +1 -1
  64. data/lib/bcdice/game_system/FilledWith.rb +205 -1272
  65. data/lib/bcdice/game_system/FutariSousa.rb +12 -10
  66. data/lib/bcdice/game_system/GURPS.rb +17 -28
  67. data/lib/bcdice/game_system/Garako.rb +1 -1
  68. data/lib/bcdice/game_system/GardenOrder.rb +12 -7
  69. data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +1 -1
  70. data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
  71. data/lib/bcdice/game_system/Gorilla.rb +2 -8
  72. data/lib/bcdice/game_system/GranCrest.rb +18 -11
  73. data/lib/bcdice/game_system/Gundog.rb +9 -8
  74. data/lib/bcdice/game_system/GundogRevised.rb +10 -9
  75. data/lib/bcdice/game_system/GundogZero.rb +1 -1
  76. data/lib/bcdice/game_system/GurpsFW.rb +16 -16
  77. data/lib/bcdice/game_system/HarnMaster.rb +19 -26
  78. data/lib/bcdice/game_system/HatsuneMiku.rb +1 -1
  79. data/lib/bcdice/game_system/Hieizan.rb +12 -21
  80. data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
  81. data/lib/bcdice/game_system/HuntersMoon.rb +5 -10
  82. data/lib/bcdice/game_system/InfiniteFantasia.rb +19 -17
  83. data/lib/bcdice/game_system/Insane.rb +13 -20
  84. data/lib/bcdice/game_system/IthaWenUa.rb +8 -15
  85. data/lib/bcdice/game_system/JamesBond.rb +10 -10
  86. data/lib/bcdice/game_system/JekyllAndHyde.rb +1 -1
  87. data/lib/bcdice/game_system/Kamigakari.rb +1 -1
  88. data/lib/bcdice/game_system/KanColle.rb +4 -9
  89. data/lib/bcdice/game_system/KemonoNoMori.rb +26 -39
  90. data/lib/bcdice/game_system/KillDeathBusiness.rb +7 -15
  91. data/lib/bcdice/game_system/KurayamiCrying.rb +141 -2
  92. data/lib/bcdice/game_system/LiveraDoll.rb +254 -304
  93. data/lib/bcdice/game_system/LogHorizon.rb +13 -10
  94. data/lib/bcdice/game_system/MagicaLogia_SimplifiedChinese.rb +66 -0
  95. data/lib/bcdice/game_system/MeikyuDays.rb +10 -8
  96. data/lib/bcdice/game_system/MeikyuKingdom.rb +26 -26
  97. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +5 -4
  98. data/lib/bcdice/game_system/MetalHead.rb +12 -22
  99. data/lib/bcdice/game_system/MetalHeadExtream.rb +5 -5
  100. data/lib/bcdice/game_system/MonotoneMuseum.rb +8 -6
  101. data/lib/bcdice/game_system/Nechronica.rb +63 -90
  102. data/lib/bcdice/game_system/NinjaSlayer.rb +6 -7
  103. data/lib/bcdice/game_system/NjslyrBattle.rb +8 -11
  104. data/lib/bcdice/game_system/OneWayHeroics.rb +1 -1
  105. data/lib/bcdice/game_system/Paradiso.rb +3 -3
  106. data/lib/bcdice/game_system/ParasiteBlood.rb +1 -1
  107. data/lib/bcdice/game_system/Peekaboo.rb +4 -9
  108. data/lib/bcdice/game_system/Pendragon.rb +7 -7
  109. data/lib/bcdice/game_system/PhantasmAdventure.rb +8 -8
  110. data/lib/bcdice/game_system/Postman.rb +1 -1
  111. data/lib/bcdice/game_system/PulpCthulhu.rb +1 -1
  112. data/lib/bcdice/game_system/Raisondetre.rb +2 -2
  113. data/lib/bcdice/game_system/Revulture.rb +123 -0
  114. data/lib/bcdice/game_system/RuneQuest.rb +8 -8
  115. data/lib/bcdice/game_system/Ryutama.rb +1 -1
  116. data/lib/bcdice/game_system/SRS.rb +17 -16
  117. data/lib/bcdice/game_system/SamsaraBallad.rb +38 -11
  118. data/lib/bcdice/game_system/Satasupe.rb +32 -32
  119. data/lib/bcdice/game_system/ScreamHighSchool.rb +5 -5
  120. data/lib/bcdice/game_system/SharedFantasia.rb +19 -23
  121. data/lib/bcdice/game_system/ShinobiGami.rb +14 -6
  122. data/lib/bcdice/game_system/Skynauts.rb +103 -142
  123. data/lib/bcdice/game_system/SkynautsBouken.rb +228 -0
  124. data/lib/bcdice/game_system/StarryDolls.rb +318 -0
  125. data/lib/bcdice/game_system/SteamPunkers.rb +11 -6
  126. data/lib/bcdice/game_system/StellarKnights.rb +85 -706
  127. data/lib/bcdice/game_system/StellarKnights_Korean.rb +79 -0
  128. data/lib/bcdice/game_system/SterileLife.rb +2 -3
  129. data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -1
  130. data/lib/bcdice/game_system/StratoShout.rb +8 -16
  131. data/lib/bcdice/game_system/Strave.rb +1 -1
  132. data/lib/bcdice/game_system/SwordWorld.rb +16 -7
  133. data/lib/bcdice/game_system/SwordWorld2_0.rb +2 -2
  134. data/lib/bcdice/game_system/SwordWorld2_5.rb +2 -2
  135. data/lib/bcdice/game_system/TherapieSein.rb +1 -1
  136. data/lib/bcdice/game_system/TokumeiTenkousei.rb +4 -3
  137. data/lib/bcdice/game_system/TokyoGhostResearch.rb +1 -1
  138. data/lib/bcdice/game_system/TrinitySeven.rb +279 -280
  139. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +1 -1
  140. data/lib/bcdice/game_system/Utakaze.rb +53 -48
  141. data/lib/bcdice/game_system/Villaciel.rb +1 -1
  142. data/lib/bcdice/game_system/WARPS.rb +11 -9
  143. data/lib/bcdice/game_system/WaresBlade.rb +4 -9
  144. data/lib/bcdice/game_system/Warhammer.rb +15 -6
  145. data/lib/bcdice/game_system/Warhammer4.rb +15 -11
  146. data/lib/bcdice/game_system/WitchQuest.rb +1 -1
  147. data/lib/bcdice/game_system/YankeeYogSothoth.rb +4 -9
  148. data/lib/bcdice/game_system/Yggdrasill.rb +1 -1
  149. data/lib/bcdice/game_system/ZettaiReido.rb +20 -25
  150. data/lib/bcdice/game_system/filled_with/enemy_data_tables.rb +322 -0
  151. data/lib/bcdice/game_system/filled_with/event_tables.rb +392 -0
  152. data/lib/bcdice/game_system/filled_with/tresure_tables.rb +179 -0
  153. data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +1 -1
  154. data/lib/bcdice/game_system/sword_world/rating_parsed.rb +4 -4
  155. data/lib/bcdice/game_system/sword_world/rating_parser.rb +1 -1
  156. data/lib/bcdice/game_system/sword_world/transcendent_test.rb +26 -8
  157. data/lib/bcdice/repl.rb +1 -1
  158. data/lib/bcdice/result.rb +26 -0
  159. data/lib/bcdice/version.rb +1 -1
  160. metadata +18 -4
@@ -72,16 +72,17 @@ module BCDice
72
72
 
73
73
  result =
74
74
  if max <= 1
75
- translate("FutariSousa.DT.fumble")
75
+ Result.fumble(translate("FutariSousa.DT.fumble"))
76
76
  elsif dice_list.include?(SPECIAL_DICE)
77
- translate("FutariSousa.DT.special")
77
+ Result.critical(translate("FutariSousa.DT.special"))
78
78
  elsif max >= SUCCESS_THRESHOLD
79
- translate("success")
79
+ Result.success(translate("success"))
80
80
  else
81
- translate("failure")
81
+ Result.failure(translate("failure"))
82
82
  end
83
83
 
84
- return "#{command}(#{dice_list.join(',')}) > #{result}"
84
+ result.text = "#{command}(#{dice_list.join(',')}) > #{result.text}"
85
+ result
85
86
  end
86
87
 
87
88
  # 助手用判定コマンド AS
@@ -91,16 +92,17 @@ module BCDice
91
92
 
92
93
  result =
93
94
  if max <= 1
94
- translate("FutariSousa.AS.fumble")
95
+ Result.fumble(translate("FutariSousa.AS.fumble"))
95
96
  elsif dice_list.include?(SPECIAL_DICE)
96
- translate("FutariSousa.AS.special")
97
+ Result.critical(translate("FutariSousa.AS.special"))
97
98
  elsif max >= SUCCESS_THRESHOLD
98
- translate("FutariSousa.AS.success")
99
+ Result.success(translate("FutariSousa.AS.success"))
99
100
  else
100
- translate("failure")
101
+ Result.failure(translate("failure"))
101
102
  end
102
103
 
103
- return "#{command}(#{dice_list.join(',')}) > #{result}"
104
+ result.text = "#{command}(#{dice_list.join(',')}) > #{result.text}"
105
+ result
104
106
  end
105
107
 
106
108
  class << self
@@ -32,7 +32,7 @@ module BCDice
32
32
  ・D66ダイスあり
33
33
  INFO_MESSAGE_TEXT
34
34
 
35
- register_prefix('FEAR(\+?\d+)?', 'REACT((\+|\-)?\d*)', '[\d\+\-]+\-3D6?[\d\+\-]*')
35
+ register_prefix('FEAR', 'REACT', '[\d\+\-]+\-3D6?[\d\+\-]*')
36
36
 
37
37
  def initialize(command)
38
38
  super(command)
@@ -41,26 +41,23 @@ module BCDice
41
41
  end
42
42
 
43
43
  # ゲーム別成功度判定(nD6)
44
- def check_nD6(total, dice_total, dice_list, cmp_op, target)
45
- return '' if target == '?'
46
- return '' unless dice_list.size == 3 && cmp_op == :<=
44
+ def result_nd6(total, dice_total, dice_list, cmp_op, target)
45
+ return nil if target == "?"
46
+ return nil unless dice_list.size == 3 && cmp_op == :<=
47
47
 
48
48
  success = target - total # 成功度
49
49
 
50
- result =
51
- if critical?(dice_total, target)
52
- "クリティカル(成功度:#{success})"
53
- elsif fumble?(dice_total, target)
54
- "ファンブル(失敗度:#{success})"
55
- elsif dice_total >= 17
56
- "自動失敗(失敗度:#{success})"
57
- elsif total <= target
58
- "成功(成功度:#{success})"
59
- else
60
- "失敗(失敗度:#{success})"
61
- end
62
-
63
- " > #{result}"
50
+ if critical?(dice_total, target)
51
+ Result.critical("クリティカル(成功度:#{success})")
52
+ elsif fumble?(dice_total, target)
53
+ Result.fumble("ファンブル(失敗度:#{success})")
54
+ elsif dice_total >= 17
55
+ Result.failure("自動失敗(失敗度:#{success})")
56
+ elsif total <= target
57
+ Result.success("成功(成功度:#{success})")
58
+ else
59
+ Result.failure("失敗(失敗度:#{success})")
60
+ end
64
61
  end
65
62
 
66
63
  def eval_game_system_specific_command(command)
@@ -85,16 +82,8 @@ module BCDice
85
82
  modifier = ArithmeticEvaluator.eval(m[2])
86
83
  formated_modifier = Format.modifier(modifier)
87
84
 
88
- dice_list = @randomizer.roll_barabara(3, 6)
89
- dice_total = dice_list.sum()
90
- dice_str = dice_list.join(",")
91
-
92
- total = dice_total + modifier
93
-
94
- "(3D6#{formated_modifier}<=#{target_number}) > "\
95
- "#{dice_total}[#{dice_str}]#{formated_modifier} > "\
96
- "#{total}"\
97
- "#{check_nD6(total, dice_total, dice_list, :<=, target_number)}"
85
+ cmd = "3D6#{formated_modifier}<=#{target_number}"
86
+ return CommonCommand::AddDice.eval(cmd, self, @randomizer)
98
87
  end
99
88
 
100
89
  def roll_fear(command)
@@ -654,7 +654,7 @@ module BCDice
654
654
  )
655
655
  }.freeze
656
656
 
657
- register_prefix('GR', '[CEFAL]D[CT][-+\d]+', 'GHA[-+\d]+', TABLES.keys)
657
+ register_prefix('GR', '[CEFAL]D[CT]', 'GHA', TABLES.keys)
658
658
  end
659
659
  end
660
660
  end
@@ -26,7 +26,7 @@ module BCDice
26
26
  INFO_MESSAGE_TEXT
27
27
 
28
28
  register_prefix(
29
- 'GO(\-?\d+)(\/\d+)?(@\d+)?',
29
+ 'GO',
30
30
  'DC(SL|BL|IM|BR|RF|EL).+'
31
31
  )
32
32
 
@@ -58,6 +58,10 @@ module BCDice
58
58
 
59
59
  def check_roll_repeat_attack(success_rate, repeat_count, critical_border)
60
60
  success_rate_per_one = success_rate / repeat_count
61
+ # 連続攻撃は最終的な成功率が50%以上であることが必要 cf. p217
62
+ if repeat_count > 1 && success_rate_per_one < 50
63
+ return "D100<=#{success_rate_per_one}@#{critical_border} > 連続攻撃は成功率が50%以上必要です"
64
+ end
61
65
 
62
66
  check_roll(success_rate_per_one, critical_border)
63
67
  end
@@ -69,16 +73,17 @@ module BCDice
69
73
  dice_value = @randomizer.roll_once(100)
70
74
  result = get_check_result(dice_value, success_rate, critical_border, fumble_border)
71
75
 
72
- text = "D100<=#{success_rate}@#{critical_border} > #{dice_value} > #{result}"
73
- return text
76
+ result.text = "D100<=#{success_rate}@#{critical_border} > #{dice_value} > #{result.text}"
77
+ return result
74
78
  end
75
79
 
76
80
  def get_check_result(dice_value, success_rate, critical_border, fumble_border)
77
- return "クリティカル" if dice_value <= critical_border
78
- return "ファンブル" if dice_value >= fumble_border
79
- return "成功" if dice_value <= success_rate
81
+ # クリティカルとファンブルが重なった場合は、ファンブルとなる。 cf. p175
82
+ return Result.fumble("ファンブル") if dice_value >= fumble_border
83
+ return Result.critical("クリティカル") if dice_value <= critical_border
84
+ return Result.success("成功") if dice_value <= success_rate
80
85
 
81
- return "失敗"
86
+ return Result.failure("失敗")
82
87
  end
83
88
 
84
89
  def look_up_damage_chart(type, damage_value)
@@ -26,7 +26,7 @@ module BCDice
26
26
   例)GL
27
27
  MESSAGETEXT
28
28
 
29
- register_prefix('GK(#\d+)?', 'GL')
29
+ register_prefix('GK', 'GL')
30
30
 
31
31
  def eval_game_system_specific_command(command)
32
32
  output = nil
@@ -41,7 +41,7 @@ module BCDice
41
41
  MESSAGETEXT
42
42
 
43
43
  # 因果点は共有リソースなのでMCPIはシークレットダイスを無効化
44
- register_prefix('GS\(\d+\)', 'GS', '^MCPI.*\$\d+$', 'DB\d+')
44
+ register_prefix('GS', '^MCPI.*$', 'DB')
45
45
 
46
46
  def initialize(command)
47
47
  super(command)
@@ -28,15 +28,9 @@ module BCDice
28
28
  return string
29
29
  end
30
30
 
31
- def check_2D6(total, _dice_total, dice_list, cmp_op, target)
32
- return '' if target == '?'
33
-
31
+ def result_2d6(_total, _dice_total, dice_list, _cmp_op, _target)
34
32
  if dice_list == [5, 5]
35
- "ゴリティカル(自動的成功)"
36
- elsif total.send(cmp_op, target)
37
- " > 成功"
38
- else
39
- " > 失敗"
33
+ Result.critical("ゴリティカル(自動的成功)")
40
34
  end
41
35
  end
42
36
  end
@@ -46,29 +46,36 @@ module BCDice
46
46
  end
47
47
 
48
48
  # ゲーム別成功度判定(nD6)
49
- def check_nD6(total, _dice_total, dice_list, cmp_op, target)
50
- result = ''
49
+ def result_nd6(total, _dice_total, dice_list, cmp_op, target)
50
+ return nil unless cmp_op == :>=
51
+
52
+ result = Result.new
53
+ sequence = []
51
54
 
52
55
  if dice_list.count(6) >= 2
53
56
  total += 10
54
- result = "(クリティカル) > #{total}"
57
+ result.critical = true
58
+ sequence.push("(クリティカル)", total.to_s)
55
59
  end
56
60
 
57
- if cmp_op != :>= || target == '?'
58
- return result
61
+ if target != '?'
62
+ if total >= target
63
+ sequence.push("成功")
64
+ result.success = true
65
+ else
66
+ sequence.push("失敗")
67
+ result.failure = true
68
+ end
59
69
  end
60
70
 
61
- if total >= target
62
- result += " > 成功"
63
- else
64
- result += " > 失敗"
71
+ if sequence.empty?
72
+ return nil
65
73
  end
66
74
 
75
+ result.text = sequence.join(" > ")
67
76
  return result
68
77
  end
69
78
 
70
- alias check_2D6 check_nD6
71
-
72
79
  def eval_game_system_specific_command(command)
73
80
  debug("eval_game_system_specific_command command", command)
74
81
 
@@ -24,14 +24,15 @@ module BCDice
24
24
  end
25
25
 
26
26
  # ゲーム別成功度判定(1d100)
27
- def check_1D100(total, _dice_total, cmp_op, target)
28
- return '' if target == '?'
29
- return '' unless cmp_op == :<=
27
+ def result_1d100(total, _dice_total, cmp_op, target)
28
+ return nil unless cmp_op == :<=
30
29
 
31
30
  if total >= 100
32
- "ファンブル"
31
+ Result.fumble("ファンブル")
33
32
  elsif total <= 1
34
- "絶対成功(達成値1+SL)"
33
+ Result.critical("絶対成功(達成値1+SL)")
34
+ elsif target == "?"
35
+ Result.nothing
35
36
  elsif total <= target
36
37
  dig10 = total / 10
37
38
  dig1 = total - dig10 * 10
@@ -39,12 +40,12 @@ module BCDice
39
40
  dig1 = 0 if dig1 >= 10 # 条件的にはあり得ない(笑
40
41
 
41
42
  if dig1 <= 0
42
- "クリティカル(達成値20+SL)"
43
+ Result.critical("クリティカル(達成値20+SL)")
43
44
  else
44
- "成功(達成値#{dig10 + dig1}+SL)"
45
+ Result.success("成功(達成値#{dig10 + dig1}+SL)")
45
46
  end
46
47
  else
47
- "失敗"
48
+ Result.failure("失敗")
48
49
  end
49
50
  end
50
51
  end
@@ -26,7 +26,7 @@ module BCDice
26
26
   修正を後ろに書くことも出来ます。
27
27
  INFO_MESSAGE_TEXT
28
28
 
29
- register_prefix('(.DPT|.FT)(\+|\-)?\d*')
29
+ register_prefix('.DPT', '.FT')
30
30
 
31
31
  def initialize(command)
32
32
  super(command)
@@ -35,14 +35,15 @@ module BCDice
35
35
 
36
36
  # ---- 以降、Gundog.rbよりほぼコピペ(絶対成功→ベアリーに用語変更対応の為、継承だと不都合)
37
37
  # ゲーム別成功度判定(1d100)
38
- def check_1D100(total, _dice_total, cmp_op, target)
39
- return '' if target == '?'
40
- return '' unless cmp_op == :<=
38
+ def result_1d100(total, _dice_total, cmp_op, target)
39
+ return nil unless cmp_op == :<=
41
40
 
42
41
  if total >= 100
43
- "ファンブル"
42
+ Result.fumble("ファンブル")
44
43
  elsif total <= 1
45
- "ベアリー(達成値1+SL)"
44
+ Result.critical("ベアリー(達成値1+SL)")
45
+ elsif target == "?"
46
+ Result.nothing
46
47
  elsif total <= target
47
48
  dig10 = total / 10
48
49
  dig1 = total - dig10 * 10
@@ -50,12 +51,12 @@ module BCDice
50
51
  dig1 = 0 if dig1 >= 10 # 条件的にはあり得ない(笑
51
52
 
52
53
  if dig1 <= 0
53
- "クリティカル(達成値20+SL)"
54
+ Result.critical("クリティカル(達成値20+SL)")
54
55
  else
55
- "成功(達成値#{dig10 + dig1}+SL)"
56
+ Result.success("成功(達成値#{dig10 + dig1}+SL)")
56
57
  end
57
58
  else
58
- "失敗"
59
+ Result.failure("失敗")
59
60
  end
60
61
  end
61
62
 
@@ -26,7 +26,7 @@ module BCDice
26
26
   修正を後ろに書くことも出来ます。
27
27
  INFO_MESSAGE_TEXT
28
28
 
29
- register_prefix('(.DPT|.FT)\d*')
29
+ register_prefix('.DPT', '.FT')
30
30
 
31
31
  def eval_game_system_specific_command(command)
32
32
  string = command.upcase
@@ -55,18 +55,18 @@ module BCDice
55
55
  'FMB',
56
56
  'MFMB',
57
57
  'HIT',
58
- 'FEAR((\+)?\d*)',
59
- 'REACT((\+|\-)?\d*)',
60
- 'TRAP(E|N|H|L)',
61
- 'TRS((E|N|H|L)\d+)((\+|\-)?\d*)',
62
- 'RAND(E|N|H|L)[1-6]?',
63
- 'RENC(E|N|H|L)[1-6]?',
58
+ 'FEAR',
59
+ 'REACT',
60
+ 'TRAP[ENHL]',
61
+ 'TRS[ENHL]',
62
+ 'RAND[ENHL]',
63
+ 'RENC[ENHL]',
64
64
  'AREA',
65
- 'DROP(N)?((\+)?\d)?',
65
+ 'DROPN?',
66
66
  'HST',
67
67
  'KHST',
68
68
  'RANDOP',
69
- 'LOT(N|P)'
69
+ 'LOT[NP]'
70
70
  )
71
71
 
72
72
  def initialize(command)
@@ -75,14 +75,14 @@ module BCDice
75
75
  @d66_sort_type = D66SortType::NO_SORT
76
76
  end
77
77
 
78
- def check_nD6(total, dice_total, dice_list, cmp_op, target)
79
- return '' if target == '?'
80
- return "" unless dice_list.size == 3 && cmp_op == :<=
78
+ def result_nd6(total, dice_total, dice_list, cmp_op, target)
79
+ return Result.nothing if target == '?'
80
+ return nil unless dice_list.size == 3 && cmp_op == :<=
81
81
 
82
82
  success = target - total # 成功度
83
- crt_string = "クリティカル(成功度:#{success})"
84
- fmb_string = "ファンブル(失敗度:#{success})"
85
- fail_string = "自動失敗(失敗度:#{success})"
83
+ crt_string = Result.critical("クリティカル(成功度:#{success})")
84
+ fmb_string = Result.fumble("ファンブル(失敗度:#{success})")
85
+ fail_string = Result.failure("自動失敗(失敗度:#{success})")
86
86
 
87
87
  # クリティカル
88
88
  if (dice_total <= 6) && (target >= 16)
@@ -105,9 +105,9 @@ module BCDice
105
105
  end
106
106
 
107
107
  if total <= target
108
- return "成功(成功度:#{success})"
108
+ return Result.success("成功(成功度:#{success})")
109
109
  else
110
- return "失敗(失敗度:#{success})"
110
+ return Result.failure("失敗(失敗度:#{success})")
111
111
  end
112
112
  end
113
113
 
@@ -21,32 +21,25 @@ module BCDice
21
21
  ・人型用 中段命中部位表 (SLH)/上段命中部位 (SLHU)/上段命中部位 (SLHD)
22
22
  MESSAGETEXT
23
23
 
24
- register_prefix('SHK\d+', 'SLH', 'SLHU', 'SLHD')
25
-
26
- def check_1D100(total, _dice_total, cmp_op, target)
27
- return '' if target == '?'
28
- return '' unless cmp_op == :<=
29
-
30
- result = getCheckResult(total, target)
31
- return " #{result}"
32
- end
33
-
34
- def getCheckResult(total, diff)
35
- return getFailResult(total) if total > diff
36
-
37
- return getSuccessResult(total)
38
- end
39
-
40
- def getFailResult(total)
41
- return "致命的失敗" if (total % 5) == 0
42
-
43
- return "失敗"
44
- end
45
-
46
- def getSuccessResult(total)
47
- return "決定的成功" if (total % 5) == 0
48
-
49
- return "成功"
24
+ register_prefix('SHK', 'SLH', 'SLHU', 'SLHD')
25
+
26
+ def result_1d100(total, _dice_total, cmp_op, target)
27
+ return Result.nothing if target == '?'
28
+ return nil unless cmp_op == :<=
29
+
30
+ if total <= target
31
+ if total % 5 == 0
32
+ Result.critical("決定的成功")
33
+ else
34
+ Result.success("成功")
35
+ end
36
+ else
37
+ if total % 5 == 0
38
+ Result.fumble("致命的失敗")
39
+ else
40
+ Result.failure("失敗")
41
+ end
42
+ end
50
43
  end
51
44
 
52
45
  def eval_game_system_specific_command(command)