bcdice 3.1.0 → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.
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)