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
@@ -30,7 +30,7 @@ module BCDice
30
30
   下から2番目の出目をずらした分だけ合計にマイナス修正を追加して表示します。
31
31
  INFO_MESSAGE_TEXT
32
32
 
33
- register_prefix('\d+H?BS', '\d+R6', '\d+D\d+.+', '\dD6')
33
+ register_prefix('\d+H?BS', '\d+R6', '\d+D\d+')
34
34
 
35
35
  def initialize(command)
36
36
  super(command)
@@ -18,87 +18,92 @@ module BCDice
18
18
  n個のサイコロで行為判定ロール。ゾロ目の最大個数を成功レベルとして表示。nを省略すると2UK扱い。
19
19
  例)3UK :サイコロ3個で行為判定
20
20
  例)UK :サイコロ2個で行為判定
21
- 不等号用いた成否判定は現時点では実装してません。
21
+ ・難易度付き行為判定ロール(nUK>=t)
22
+ tに難易度を指定した行為判定ロール。
23
+ 成功レベルと難易度tを比べて成否を判定します。
24
+ 例)6UK>=3 :サイコロ6個で行為判定して、成功レベル3が出れば成功。
22
25
  ・クリティカルコール付き行為判定ロール(nUK@c or nUKc)
23
-  cに「龍のダイス目」を指定した行為判定ロール。
24
- ゾロ目ではなく、cと同じ値の出目数x2が成功レベルとなります。
26
+ cに「龍のダイス目」を指定した行為判定ロール。
27
+ ゾロ目ではなく、cと同じ値の出目数x2が成功レベルとなります。難易度の指定も可能です。
25
28
  例)3UK@5 :龍のダイス「月」でクリティカルコール宣言したサイコロ3個の行為判定
26
29
  MESSAGETEXT
27
30
 
28
- register_prefix('\d*UK[@\d]*')
29
-
30
- def initialize(command)
31
- super(command)
32
- @arrayDragonDiceName = ['', '風', '雨', '雲', '影', '月', '歌']
33
- @enabled_upcase_input = false
34
- end
31
+ register_prefix('\d*UK')
35
32
 
36
33
  def eval_game_system_specific_command(command)
37
34
  debug('eval_game_system_specific_command command', command)
38
35
 
39
- result = ''
36
+ check_roll(command)
37
+ end
40
38
 
41
- case command
42
- when /(\d+)?UK(@?(\d))?(>=(\d+))?/i
43
- base = (Regexp.last_match(1) || 2).to_i
44
- crit = Regexp.last_match(3).to_i
45
- diff = Regexp.last_match(5).to_i
46
- result = checkRoll(base, crit, diff)
47
- end
39
+ private
48
40
 
49
- return nil if result.empty?
41
+ DRAGON_DICE_NAME = {
42
+ 1 => "風",
43
+ 2 => "雨",
44
+ 3 => "雲",
45
+ 4 => "影",
46
+ 5 => "月",
47
+ 6 => "歌"
48
+ }.freeze
50
49
 
51
- return "#{command} > #{result}"
52
- end
50
+ def check_roll(command)
51
+ m = /^(\d+)?UK(@?(\d))?(>=(\d+))?$/i.match(command)
52
+ return nil unless m
53
53
 
54
- def checkRoll(base, crit, diff = 0)
55
- result = ""
54
+ base = (m[1] || 2).to_i
55
+ crit = m[3].to_i
56
+ diff = m[5].to_i
56
57
 
57
58
  base = getValue(base)
58
59
  crit = getValue(crit)
59
60
 
60
- return result if base < 1
61
+ return nil if base < 1
61
62
 
62
63
  crit = 6 if crit > 6
63
64
 
64
- result += "(#{base}d6)"
65
+ dice_list = @randomizer.roll_barabara(base, 6).sort
66
+ result = get_roll_result(dice_list, crit, diff)
65
67
 
66
- diceList = @randomizer.roll_barabara(base, 6).sort
67
-
68
- result += " > [#{diceList.join(',')}] > "
69
- result += getRollResultString(diceList, crit, diff)
68
+ sequence = [
69
+ command,
70
+ "(#{base}D6)",
71
+ "[#{dice_list.join(',')}]",
72
+ result.text
73
+ ]
74
+ result.text = sequence.join(" > ")
70
75
 
71
76
  return result
72
77
  end
73
78
 
74
- def getRollResultString(diceList, crit, diff)
75
- success, maxnum, setCount = getSuccessInfo(diceList, crit, diff)
79
+ def get_roll_result(diceList, crit, diff)
80
+ success, maxnum, setCount = getSuccessInfo(diceList, crit)
76
81
 
77
- result = ""
82
+ sequence = []
78
83
 
79
84
  if isDragonDice(crit)
80
- result += "龍のダイス「#{@arrayDragonDiceName[crit]}」(#{crit})を使用"
85
+ sequence.push("龍のダイス「#{DRAGON_DICE_NAME[crit]}」(#{crit})を使用")
81
86
  end
82
87
 
83
- if success
84
- result += "成功レベル:#{maxnum} (#{setCount}セット)"
85
- if diff != 0
86
- diffSuccess = (maxnum >= diff)
87
- if diffSuccess
88
- result += " > 成功"
89
- else
90
- result += " > 失敗"
91
- end
92
- end
93
-
88
+ if success
89
+ sequence.push("成功レベル:#{maxnum} (#{setCount}セット)")
94
90
  else
95
- result += "失敗"
91
+ sequence.push("失敗")
92
+ return Result.failure(sequence.join(" > "))
96
93
  end
97
94
 
98
- return result
95
+ if diff == 0
96
+ return Result.success(sequence.join(" > ")) # 難易度なしでも成功として扱う
97
+ elsif maxnum >= diff
98
+ sequence.push("成功")
99
+ return Result.success(sequence.join(" > "))
100
+ else
101
+ sequence.push("失敗")
102
+ return Result.failure(sequence.join(" > "))
103
+ end
99
104
  end
100
105
 
101
- def getSuccessInfo(diceList, crit, _diff)
106
+ def getSuccessInfo(diceList, crit)
102
107
  debug("checkSuccess diceList, crit", diceList, crit)
103
108
 
104
109
  diceCountHash = getDiceCountHash(diceList, crit)
@@ -109,7 +114,7 @@ module BCDice
109
114
  countThreshold = (isDragonDice(crit) ? 1 : 2)
110
115
 
111
116
  diceCountHash.each do |dice, count|
112
- maxnum = count if count > maxnum
117
+ maxnum = count if count > maxnum
113
118
  successDiceList << dice if count >= countThreshold
114
119
  end
115
120
 
@@ -47,7 +47,7 @@ module BCDice
47
47
  ・改良種表      IS
48
48
  MESSAGETEXT
49
49
 
50
- register_prefix('\\d+VBS(>=\\d+)?', '\\d+VF', '\\d+VM', '\\d+VG', 'PJ[VA]?', 'PQ[VA]?', 'AC', 'MM([IAD]|V[VA]?)', 'F[LRWGBCS]', 'IP[VA]?', 'EP[VA]?\\d?', 'MP', 'IS')
50
+ register_prefix('\d+VBS(>=\d+)?', '\d+VF', '\d+VM', '\d+VG', 'PJ[VA]?', 'PQ[VA]?', 'AC', 'MM([IAD]|V[VA]?)', 'F[LRWGBCS]', 'IP[VA]?', 'EP[VA]?', 'MP', 'IS')
51
51
 
52
52
  def initialize(command)
53
53
  super(command)
@@ -15,17 +15,19 @@ module BCDice
15
15
  # ダイスボットの使い方
16
16
  HELP_MESSAGE = "失敗、成功度の自動判定を行います。\n"
17
17
 
18
- def check_2D6(total, dice_total, _dice_list, cmp_op, target)
18
+ def result_2d6(total, dice_total, _dice_list, cmp_op, target)
19
+ return nil unless cmp_op == :<=
20
+
19
21
  if dice_total <= 2
20
- "クリティカル"
22
+ Result.critical("クリティカル")
21
23
  elsif dice_total >= 12
22
- "ファンブル"
23
- elsif cmp_op == :<= && target != "?"
24
- if total <= target
25
- " #{target - total}成功"
26
- else
27
- " > 失敗"
28
- end
24
+ Result.fumble("ファンブル")
25
+ elsif target == "?"
26
+ Result.nothing
27
+ elsif total <= target
28
+ Result.success("#{target - total}成功")
29
+ else
30
+ Result.failure("失敗")
29
31
  end
30
32
  end
31
33
  end
@@ -15,18 +15,13 @@ module BCDice
15
15
  # ダイスボットの使い方
16
16
  HELP_MESSAGE = "nD10>=m 方式の判定で成否、完全成功、完全失敗を自動判定します。\n"
17
17
 
18
- def check_nD10(total, _dice_total, dice_list, cmp_op, target)
19
- return '' if target == '?'
20
- return '' unless cmp_op == :>=
18
+ def result_nd10(_total, _dice_total, dice_list, cmp_op, _target)
19
+ return nil unless cmp_op == :>=
21
20
 
22
21
  if dice_list.count(10) == dice_list.size
23
- ' > 完全成功'
22
+ Result.critical("完全成功")
24
23
  elsif dice_list.count(1) == dice_list.size
25
- ' > 絶対失敗'
26
- elsif total >= target
27
- ' > 成功'
28
- else
29
- ' > 失敗'
24
+ Result.fumble("絶対失敗")
30
25
  end
31
26
  end
32
27
  end
@@ -51,14 +51,23 @@ module BCDice
51
51
  return output_msg
52
52
  end
53
53
 
54
- def check_1D100(total, _dice_total, cmp_op, target)
55
- return '' if target == '?'
56
- return '' unless cmp_op == :<=
54
+ def result_1d100(total, _dice_total, cmp_op, target)
55
+ return Result.nothing if target == '?'
56
+ return nil unless cmp_op == :<=
57
57
 
58
58
  if total <= target
59
- "成功(成功度#{(target - total) / 10})"
59
+ Result.success("成功(成功度#{(target - total) / 10})")
60
60
  else
61
- "失敗(失敗度#{(total - target) / 10})"
61
+ Result.failure("失敗(失敗度#{(total - target) / 10})")
62
+ end
63
+ end
64
+
65
+ def result_1d100_text(total, dice_total, cmp_op, target)
66
+ result = result_1d100(total, dice_total, cmp_op, target)&.text
67
+ if result.nil?
68
+ ""
69
+ else
70
+ " > #{result}"
62
71
  end
63
72
  end
64
73
 
@@ -322,7 +331,7 @@ module BCDice
322
331
  total_n = @randomizer.roll_once(100)
323
332
 
324
333
  output = "(#{string}) > #{total_n}"
325
- output += check_1D100(total_n, total_n, :<=, diff)
334
+ output += result_1d100_text(total_n, total_n, :<=, diff)
326
335
 
327
336
  pos_num = (total_n % 10) * 10 + (total_n / 10).to_i
328
337
  pos_num = 100 if total_n >= 100
@@ -28,7 +28,7 @@ module BCDice
28
28
 
29
29
  ■ 命中判定 (WHx)
30
30
  "WH(命中値)"の形で指定します。
31
- 命中判定を行って、命中してクリティカルでなければ部位も表示します。
31
+ 命中判定を行って、クリティカルかファンブルでなければ部位も表示します。
32
32
  例)wh60  wh(43-20)
33
33
  INFO_MESSAGE_TEXT
34
34
 
@@ -44,9 +44,9 @@ module BCDice
44
44
  roll_critical_table(command) || roll_attack(command) || roll_tables(command, TABLES)
45
45
  end
46
46
 
47
- def check_1D100(total, _dice_total, cmp_op, target)
48
- return '' if target == '?'
49
- return '' unless cmp_op == :<=
47
+ def result_1d100(total, _dice_total, cmp_op, target)
48
+ return Result.nothing if target == '?'
49
+ return nil unless cmp_op == :<=
50
50
 
51
51
  t10 = total / 10
52
52
  d10 = target / 10
@@ -62,18 +62,19 @@ module BCDice
62
62
 
63
63
  result =
64
64
  if total <= 5
65
- "自動成功"
65
+ Result.success("自動成功")
66
66
  elsif total >= 96
67
- "自動失敗"
67
+ Result.failure("自動失敗")
68
68
  elsif total <= target
69
- "成功"
69
+ Result.success("成功")
70
70
  else
71
- "失敗"
71
+ Result.failure("失敗")
72
72
  end
73
73
 
74
74
  sl_text = format("(SL%+d)", sl)
75
+ result.text += "#{sl_text} > #{result_detail(sl, total, target)}"
75
76
 
76
- " > #{result}#{sl_text} > #{result_detail(sl, total, target)}"
77
+ return result
77
78
  end
78
79
 
79
80
  private
@@ -249,7 +250,7 @@ module BCDice
249
250
 
250
251
  target_number = m[1].to_i
251
252
  total = @randomizer.roll_once(100)
252
- result = check_1D100(total, total, :<=, target_number).delete_prefix(" > ")
253
+ result = result_1d100(total, total, :<=, target_number)&.text
253
254
 
254
255
  sequence = [
255
256
  "(#{command})",
@@ -266,6 +267,9 @@ module BCDice
266
267
  if (total > target_number) || (total > 95) # 自動失敗時のファンブル処理も
267
268
  if ones == tens
268
269
  "ファンブル"
270
+ else
271
+ # 一の位と十の位を入れ替えて参照する
272
+ "(#{HIT_PARTS_TABLE.fetch(merge_d100(ones, tens)).content})"
269
273
  end
270
274
  elsif ones == tens
271
275
  "クリティカル"
@@ -317,7 +321,7 @@ module BCDice
317
321
  [61..70, '君はひどく躓きバランスを回復するのに手間取る。次の「移動」を失う。'],
318
322
  [71..80, '君は武器を取り回しを誤る。次の「アクション」を失う。'],
319
323
  [81..90, '君は筋を違えるか、足首をひねってしまう。「筋断裂(軽度)」の負傷を得る。「致命的負傷」としてカウントされる。'],
320
- [91..100, '君は射程内のランダムな味方を攻撃してしまう。命中判定の出目の1の位をSLとして用いること。攻撃可能な味方が居ない場合は、自己を攻撃ししまい「朦朧状態」1つを得る。'],
324
+ [91..100, '君は射程内のランダムな味方を攻撃してしまう。命中判定の出目の1の位をSLとして用いること。攻撃可能な味方が居ない場合は、自己を攻撃してしまい「朦朧状態」1つを得る。'],
321
325
  ]
322
326
  )
323
327
  }.freeze
@@ -22,7 +22,7 @@ module BCDice
22
22
   例)SET1 SET48
23
23
  MESSAGETEXT
24
24
 
25
- register_prefix('WQ\d+', 'SET\d+')
25
+ register_prefix('WQ', 'SET')
26
26
 
27
27
  def eval_game_system_specific_command(command)
28
28
  case command
@@ -49,18 +49,13 @@ module BCDice
49
49
  end
50
50
 
51
51
  # ゲーム別成功度判定(2D6)
52
- def check_2D6(total, dice_total, _dice_list, cmp_op, target)
53
- return '' if target == '?'
54
- return '' unless cmp_op == :>=
52
+ def result_2d6(_total, dice_total, _dice_list, cmp_op, _target)
53
+ return nil unless cmp_op == :>=
55
54
 
56
55
  if dice_total <= 2
57
- "ファンブル(判定失敗。ファンブル表(FT)を振ること)"
56
+ Result.fumble("ファンブル(判定失敗。ファンブル表(FT)を振ること)")
58
57
  elsif dice_total >= 12
59
- "スペシャル(判定成功。【テンション】が1段階上昇)"
60
- elsif total >= target
61
- " > 成功"
62
- else
63
- " > 失敗"
58
+ Result.critical("スペシャル(判定成功。【テンション】が1段階上昇)")
64
59
  end
65
60
  end
66
61
 
@@ -88,7 +88,7 @@ module BCDice
88
88
 
89
89
  add_dice_randomizer = CommonCommand::AddDice::Randomizer.new(@randomizer, self)
90
90
  total = node.lhs.eval(self, add_dice_randomizer)
91
- rand_values = @randomizer.rand_results.map(&:first)
91
+ rand_values = add_dice_randomizer.rand_results.map(&:value)
92
92
 
93
93
  n1 = count_fumble(rand_values, lucky_state)
94
94
  n_max = count_critical(rand_values, lucky_state)
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'bcdice/base'
4
+
3
5
  module BCDice
4
6
  module GameSystem
5
7
  class ZettaiReido < Base
@@ -38,20 +40,23 @@ module BCDice
38
40
  mod, modText = getModInfo(modText)
39
41
  diff, diffText = getDiffInfo(diffValue)
40
42
 
41
- output = ""
42
- output += "(#{baseAvility}-2DR#{modText}#{diffText})"
43
- output += " > #{baseAvility}-#{diceTotal}[#{diceText}]#{modText}"
44
-
43
+ baseCommandText = "(#{baseAvility}-2DR#{modText}#{diffText})"
44
+ diceCommandText = "#{baseAvility}-#{diceTotal}[#{diceText}]#{modText}"
45
45
  total = baseAvility - diceTotal + mod
46
- output += " > #{total}"
47
46
 
48
- successText = getSuccessText(diceTotal, total, diff)
49
- output += successText
47
+ result = getResult(diceTotal, total, diff)
50
48
 
51
- darkPointText = getDarkPointResult(total, diff, darkPoint)
52
- output += darkPointText
49
+ darkPointText = "#{darkPoint}DP" if darkPoint > 0
53
50
 
54
- return output
51
+ result.text = [
52
+ baseCommandText,
53
+ diceCommandText,
54
+ total.to_i,
55
+ result.text,
56
+ darkPointText,
57
+ ].compact.join(" > ")
58
+
59
+ return result
55
60
  end
56
61
 
57
62
  def roll2DarkDice()
@@ -107,23 +112,13 @@ module BCDice
107
112
  return diffValue, diffText
108
113
  end
109
114
 
110
- def getDarkPointResult(_total, _diff, darkPoint)
111
- text = ''
112
-
113
- if darkPoint > 0
114
- text = " > #{darkPoint}DP"
115
- end
116
-
117
- return text
118
- end
119
-
120
- def getSuccessText(diceTotal, total, diff)
115
+ def getResult(diceTotal, total, diff)
121
116
  if diceTotal == 0
122
- return "クリティカル"
117
+ return Result.critical("クリティカル")
123
118
  end
124
119
 
125
120
  if diceTotal == 10
126
- return "ファンブル"
121
+ return Result.fumble("ファンブル")
127
122
  end
128
123
 
129
124
  if diff.nil?
@@ -132,10 +127,10 @@ module BCDice
132
127
 
133
128
  successLevel = (total - diff)
134
129
  if successLevel >= 0
135
- return "#{successLevel} 成功"
130
+ return Result.success("#{successLevel} 成功")
136
131
  end
137
132
 
138
- return ' > 失敗'
133
+ return Result.failure("失敗")
139
134
  end
140
135
  end
141
136
  end