bcdice 3.1.3 → 3.2.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 (129) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +33 -2
  3. data/i18n/StellarKnights/ja_jp.yml +496 -0
  4. data/lib/bcdice/common_command/add_dice.rb +1 -1
  5. data/lib/bcdice/common_command/calc.rb +1 -1
  6. data/lib/bcdice/dice_table.rb +2 -0
  7. data/lib/bcdice/dice_table/d66_half_grid_table.rb +33 -0
  8. data/lib/bcdice/dice_table/d66_one_third_table.rb +34 -0
  9. data/lib/bcdice/game_system.rb +3 -0
  10. data/lib/bcdice/game_system/AceKillerGene.rb +1 -1
  11. data/lib/bcdice/game_system/Ainecadette.rb +68 -0
  12. data/lib/bcdice/game_system/Airgetlamh.rb +1 -1
  13. data/lib/bcdice/game_system/Alsetto.rb +1 -1
  14. data/lib/bcdice/game_system/AlterRaise.rb +2 -2
  15. data/lib/bcdice/game_system/AngelGear.rb +1 -1
  16. data/lib/bcdice/game_system/AnimaAnimus.rb +1 -1
  17. data/lib/bcdice/game_system/Arianrhod.rb +6 -8
  18. data/lib/bcdice/game_system/Avandner.rb +1 -1
  19. data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
  20. data/lib/bcdice/game_system/BattleTech.rb +1 -1
  21. data/lib/bcdice/game_system/BeginningIdol.rb +5 -5
  22. data/lib/bcdice/game_system/BeginningIdol_Korean.rb +5 -5
  23. data/lib/bcdice/game_system/BladeOfArcana.rb +1 -1
  24. data/lib/bcdice/game_system/BlindMythos.rb +1 -1
  25. data/lib/bcdice/game_system/BloodCrusade.rb +6 -7
  26. data/lib/bcdice/game_system/BloodMoon.rb +9 -8
  27. data/lib/bcdice/game_system/CardRanker.rb +8 -7
  28. data/lib/bcdice/game_system/ChaosFlare.rb +21 -15
  29. data/lib/bcdice/game_system/Chill.rb +10 -10
  30. data/lib/bcdice/game_system/Chill3.rb +9 -9
  31. data/lib/bcdice/game_system/CrashWorld.rb +1 -1
  32. data/lib/bcdice/game_system/Cthulhu.rb +1 -1
  33. data/lib/bcdice/game_system/Cthulhu7th.rb +48 -10
  34. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
  35. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
  36. data/lib/bcdice/game_system/DarkBlaze.rb +0 -11
  37. data/lib/bcdice/game_system/DarkDaysDrive.rb +8 -7
  38. data/lib/bcdice/game_system/DeadlineHeroes.rb +2 -2
  39. data/lib/bcdice/game_system/DemonParasite.rb +5 -13
  40. data/lib/bcdice/game_system/DesperateRun.rb +1 -1
  41. data/lib/bcdice/game_system/DoubleCross.rb +1 -1
  42. data/lib/bcdice/game_system/Dracurouge.rb +1 -1
  43. data/lib/bcdice/game_system/EclipsePhase.rb +14 -14
  44. data/lib/bcdice/game_system/Elric.rb +18 -14
  45. data/lib/bcdice/game_system/Elysion.rb +1 -1
  46. data/lib/bcdice/game_system/EmbryoMachine.rb +9 -8
  47. data/lib/bcdice/game_system/Emoklore.rb +3 -3
  48. data/lib/bcdice/game_system/Fiasco.rb +1 -1
  49. data/lib/bcdice/game_system/FilledWith.rb +4 -0
  50. data/lib/bcdice/game_system/GURPS.rb +17 -28
  51. data/lib/bcdice/game_system/Garako.rb +1 -1
  52. data/lib/bcdice/game_system/GardenOrder.rb +1 -1
  53. data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +1 -1
  54. data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
  55. data/lib/bcdice/game_system/Gorilla.rb +2 -8
  56. data/lib/bcdice/game_system/GranCrest.rb +18 -11
  57. data/lib/bcdice/game_system/Gundog.rb +9 -8
  58. data/lib/bcdice/game_system/GundogRevised.rb +10 -9
  59. data/lib/bcdice/game_system/GundogZero.rb +1 -1
  60. data/lib/bcdice/game_system/GurpsFW.rb +16 -16
  61. data/lib/bcdice/game_system/HarnMaster.rb +19 -26
  62. data/lib/bcdice/game_system/HatsuneMiku.rb +1 -1
  63. data/lib/bcdice/game_system/Hieizan.rb +12 -21
  64. data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
  65. data/lib/bcdice/game_system/HuntersMoon.rb +5 -10
  66. data/lib/bcdice/game_system/InfiniteFantasia.rb +19 -17
  67. data/lib/bcdice/game_system/Insane.rb +13 -20
  68. data/lib/bcdice/game_system/IthaWenUa.rb +8 -15
  69. data/lib/bcdice/game_system/JamesBond.rb +10 -10
  70. data/lib/bcdice/game_system/JekyllAndHyde.rb +1 -1
  71. data/lib/bcdice/game_system/Kamigakari.rb +1 -1
  72. data/lib/bcdice/game_system/KanColle.rb +4 -9
  73. data/lib/bcdice/game_system/KemonoNoMori.rb +1 -1
  74. data/lib/bcdice/game_system/KillDeathBusiness.rb +7 -15
  75. data/lib/bcdice/game_system/KurayamiCrying.rb +55 -2
  76. data/lib/bcdice/game_system/MeikyuDays.rb +10 -8
  77. data/lib/bcdice/game_system/MeikyuKingdom.rb +26 -26
  78. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +3 -3
  79. data/lib/bcdice/game_system/MetalHead.rb +12 -22
  80. data/lib/bcdice/game_system/MetalHeadExtream.rb +5 -5
  81. data/lib/bcdice/game_system/MonotoneMuseum.rb +8 -6
  82. data/lib/bcdice/game_system/Nechronica.rb +28 -21
  83. data/lib/bcdice/game_system/NinjaSlayer.rb +4 -4
  84. data/lib/bcdice/game_system/NjslyrBattle.rb +8 -11
  85. data/lib/bcdice/game_system/OneWayHeroics.rb +1 -1
  86. data/lib/bcdice/game_system/Paradiso.rb +1 -1
  87. data/lib/bcdice/game_system/ParasiteBlood.rb +1 -1
  88. data/lib/bcdice/game_system/Peekaboo.rb +4 -9
  89. data/lib/bcdice/game_system/Pendragon.rb +7 -7
  90. data/lib/bcdice/game_system/PhantasmAdventure.rb +8 -8
  91. data/lib/bcdice/game_system/Postman.rb +1 -1
  92. data/lib/bcdice/game_system/PulpCthulhu.rb +1 -1
  93. data/lib/bcdice/game_system/Raisondetre.rb +2 -2
  94. data/lib/bcdice/game_system/Revulture.rb +123 -0
  95. data/lib/bcdice/game_system/RuneQuest.rb +8 -8
  96. data/lib/bcdice/game_system/Ryutama.rb +1 -1
  97. data/lib/bcdice/game_system/Satasupe.rb +1 -1
  98. data/lib/bcdice/game_system/ScreamHighSchool.rb +2 -2
  99. data/lib/bcdice/game_system/SharedFantasia.rb +19 -23
  100. data/lib/bcdice/game_system/ShinobiGami.rb +14 -6
  101. data/lib/bcdice/game_system/Skynauts.rb +2 -2
  102. data/lib/bcdice/game_system/SkynautsBouken.rb +228 -0
  103. data/lib/bcdice/game_system/StellarKnights.rb +59 -696
  104. data/lib/bcdice/game_system/SterileLife.rb +1 -1
  105. data/lib/bcdice/game_system/StratoShout.rb +8 -16
  106. data/lib/bcdice/game_system/Strave.rb +1 -1
  107. data/lib/bcdice/game_system/SwordWorld.rb +16 -7
  108. data/lib/bcdice/game_system/SwordWorld2_0.rb +2 -2
  109. data/lib/bcdice/game_system/SwordWorld2_5.rb +2 -2
  110. data/lib/bcdice/game_system/TherapieSein.rb +1 -1
  111. data/lib/bcdice/game_system/TokyoGhostResearch.rb +1 -1
  112. data/lib/bcdice/game_system/TrinitySeven.rb +4 -4
  113. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +1 -1
  114. data/lib/bcdice/game_system/Utakaze.rb +1 -1
  115. data/lib/bcdice/game_system/Villaciel.rb +1 -1
  116. data/lib/bcdice/game_system/WARPS.rb +11 -9
  117. data/lib/bcdice/game_system/WaresBlade.rb +4 -9
  118. data/lib/bcdice/game_system/Warhammer.rb +15 -6
  119. data/lib/bcdice/game_system/Warhammer4.rb +15 -11
  120. data/lib/bcdice/game_system/WitchQuest.rb +1 -1
  121. data/lib/bcdice/game_system/YankeeYogSothoth.rb +4 -9
  122. data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +1 -1
  123. data/lib/bcdice/game_system/sword_world/rating_parsed.rb +4 -4
  124. data/lib/bcdice/game_system/sword_world/rating_parser.rb +1 -1
  125. data/lib/bcdice/game_system/sword_world/transcendent_test.rb +26 -8
  126. data/lib/bcdice/repl.rb +1 -1
  127. data/lib/bcdice/result.rb +26 -0
  128. data/lib/bcdice/version.rb +1 -1
  129. metadata +9 -4
@@ -37,7 +37,7 @@ module BCDice
37
37
   ・超未来の宇宙船内 INT
38
38
  MESSAGETEXT
39
39
 
40
- register_prefix('\d*DA.*\[(\d+),(\d+)(,(\d+))?\]', 'VPFT', 'VNFT', 'VNRT', 'AAFT', 'AST', 'RNST', 'RET', 'TRST', 'TRAT', 'TRMT', 'TROT', 'TET', 'ENT', 'CUT', 'NAT', 'INT')
40
+ register_prefix('\d*DA', 'VPFT', 'VNFT', 'VNRT', 'AAFT', 'AST', 'RNST', 'RET', 'TRST', 'TRAT', 'TRMT', 'TROT', 'TET', 'ENT', 'CUT', 'NAT', 'INT')
41
41
  def eval_game_system_specific_command(command) # ダイスロールコマンド
42
42
  # 通常判定部分をgetJudgeResultコマンドに切り分け
43
43
  output = getJudgeResult(command)
@@ -32,22 +32,14 @@ module BCDice
32
32
  @d66_sort_type = D66SortType::ASC
33
33
  end
34
34
 
35
- def check_2D6(total, dice_total, _dice_list, cmp_op, target)
36
- return '' if target == '?'
37
- return '' unless cmp_op == :>=
38
-
39
- result =
40
- if dice_total <= 2
41
- translate("StratoShout.fumble")
42
- elsif dice_total >= 12
43
- translate("StratoShout.critical")
44
- elsif total >= target
45
- translate("success")
46
- else
47
- translate("failure")
48
- end
49
-
50
- return " > #{result}"
35
+ def result_2d6(_total, dice_total, _dice_list, cmp_op, _target)
36
+ return nil unless cmp_op == :>=
37
+
38
+ if dice_total <= 2
39
+ Result.fumble(translate("StratoShout.fumble"))
40
+ elsif dice_total >= 12
41
+ Result.critical(translate("StratoShout.critical"))
42
+ end
51
43
  end
52
44
 
53
45
  def eval_game_system_specific_command(command)
@@ -33,7 +33,7 @@ module BCDice
33
33
  MESSAGETEXT
34
34
 
35
35
  register_prefix(
36
- 'MP\d+', '\d+ST\d+(x|\*)\d+',
36
+ 'MP', '\d+ST',
37
37
  'AFF', 'IDT', 'AFV', 'IDV'
38
38
  )
39
39
 
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "bcdice/base"
3
4
  require "bcdice/game_system/sword_world/rating_parser"
4
5
 
5
6
  module BCDice
@@ -9,7 +10,7 @@ module BCDice
9
10
  ID = 'SwordWorld'
10
11
 
11
12
  # ゲームシステム名
12
- NAME = 'ソードワールドRPG'
13
+ NAME = 'ソード・ワールドRPG'
13
14
 
14
15
  # ゲームシステム名の読みがな
15
16
  SORT_KEY = 'そおとわあると'
@@ -17,7 +18,7 @@ module BCDice
17
18
  # ダイスボットの使い方
18
19
  HELP_MESSAGE = "・SW レーティング表 (Kx[c]+m$f) (x:キー, c:クリティカル値, m:ボーナス, f:出目修正)\n"
19
20
 
20
- register_prefix('H?K\d+')
21
+ register_prefix('H?K')
21
22
 
22
23
  def initialize(command)
23
24
  super(command)
@@ -125,10 +126,17 @@ module BCDice
125
126
  break unless dice >= command.critical
126
127
  end
127
128
 
128
- output += getResultText(totalValue, command, diceResults, diceResultTotals,
129
- rateResults, diceOnlyTotal, round)
129
+ result_text, critical, fumble = getResultText(
130
+ totalValue, command, diceResults, diceResultTotals,
131
+ rateResults, diceOnlyTotal, round
132
+ )
133
+ output += result_text
130
134
 
131
- return output
135
+ return Result.new.tap do |r|
136
+ r.text = output
137
+ r.critical = critical
138
+ r.fumble = fumble
139
+ end
132
140
  end
133
141
 
134
142
  def getSW2_0_RatingTable
@@ -301,6 +309,7 @@ module BCDice
301
309
  # @param rateResults [Array<String>]
302
310
  # @param dice_total [Integer]
303
311
  # @param round [Integer]
312
+ # @return [Array(String, Boolean, Boolean)] output, critical, fumble
304
313
  def getResultText(rating_total, command, diceResults, diceResultTotals,
305
314
  rateResults, dice_total, round)
306
315
  sequence = []
@@ -310,7 +319,7 @@ module BCDice
310
319
  if dice_total <= 2
311
320
  sequence.push(rateResults.join(','))
312
321
  sequence.push("自動的失敗")
313
- return sequence.join(" > ")
322
+ return sequence.join(" > "), false, true
314
323
  end
315
324
 
316
325
  # rate回数が1回で、修正値がない時には途中式と最終結果が一致するので、途中式を省略する
@@ -347,7 +356,7 @@ module BCDice
347
356
  total_text = total.to_s
348
357
  sequence.push(total_text)
349
358
 
350
- return sequence.join(" > ")
359
+ return sequence.join(" > "), round > 1, false
351
360
  end
352
361
  end
353
362
  end
@@ -12,7 +12,7 @@ module BCDice
12
12
  ID = 'SwordWorld2.0'
13
13
 
14
14
  # ゲームシステム名
15
- NAME = 'ソードワールド2.0'
15
+ NAME = 'ソード・ワールド2.0'
16
16
 
17
17
  # ゲームシステム名の読みがな
18
18
  SORT_KEY = 'そおとわあると2.0'
@@ -68,7 +68,7 @@ module BCDice
68
68
   絡み効果表を出すことができます。
69
69
  INFO_MESSAGE_TEXT
70
70
 
71
- register_prefix('H?K\d+', 'Gr(\d+)?', '2D6?@\d+', 'FT', 'TT')
71
+ register_prefix('H?K', 'Gr', '2D6?@\d+', 'FT', 'TT')
72
72
 
73
73
  def initialize(command)
74
74
  super(command)
@@ -9,7 +9,7 @@ module BCDice
9
9
  ID = 'SwordWorld2.5'
10
10
 
11
11
  # ゲームシステム名
12
- NAME = 'ソードワールド2.5'
12
+ NAME = 'ソード・ワールド2.5'
13
13
 
14
14
  # ゲームシステム名の読みがな
15
15
  SORT_KEY = 'そおとわあると2.5'
@@ -76,7 +76,7 @@ module BCDice
76
76
   アビスカース表を出すことができます。
77
77
  INFO_MESSAGE_TEXT
78
78
 
79
- register_prefix('H?K\d+', 'Gr(\d+)?', '2D6?@\d+', 'FT', 'TT', 'Dru\[\d+,\d+,\d+\]', 'ABT')
79
+ register_prefix('H?K', 'Gr', '2D6?@\d+', 'FT', 'TT', 'Dru', 'ABT')
80
80
 
81
81
  ABYSS_CURSE_TABLE = DiceTable::D66GridTable.new(
82
82
  'アビスカース表', [
@@ -30,7 +30,7 @@ module BCDice
30
30
  ・OP3@12 → ダイス合計+3の達成値&クリティカル、判定の成否を表示。
31
31
  MESSAGETEXT
32
32
 
33
- register_prefix('(TS|OP)(\d+)?([\+\-]\d)*(\@\d+)?')
33
+ register_prefix('TS', 'OP')
34
34
 
35
35
  def eval_game_system_specific_command(command)
36
36
  output =
@@ -25,7 +25,7 @@ module BCDice
25
25
 
26
26
  # ダイスボットで使用するコマンドを配列で列挙する
27
27
  register_prefix(
28
- 'OP', 'TB', 'TK?\(\d+\)'
28
+ 'OP', 'TB', 'TK?'
29
29
  )
30
30
 
31
31
  def eval_game_system_specific_command(command)
@@ -33,7 +33,7 @@ module BCDice
33
33
 
34
34
  MESSAGETEXT
35
35
 
36
- register_prefix('(\d+)DM\d+(\+|\-)?\d*', '(\d+)DM(\+|\-)?\d*', 'TR(\d+)<=(\d+)(\+|\-)?\d*', 'TR<=(\d+)(\+|\-)?\d*', 'TR(\+|\-)?(\d+)<=(\d+)(\+|\-)?\d*', 'TRNAME')
36
+ register_prefix('\d+DM', 'TR', 'TRNAME')
37
37
 
38
38
  def eval_game_system_specific_command(command) # スパゲッティなコードだけど許して!!! → 絶対に許さない。全力でリファクタリングした。
39
39
  debug("eval_game_system_specific_command command", command)
@@ -133,11 +133,11 @@ module BCDice
133
133
  return total, diceList
134
134
  end
135
135
 
136
- def check_1D100(_total, dice_total, _cmp_op, _target)
136
+ def result_1d100(_total, dice_total, _cmp_op, _target)
137
137
  if dice_total >= 96
138
- "ファンブル"
138
+ Result.fumble("ファンブル")
139
139
  elsif dice_total <= 7
140
- "クリティカル"
140
+ Result.critical("クリティカル")
141
141
  end
142
142
  end
143
143
 
@@ -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)
@@ -25,7 +25,7 @@ module BCDice
25
25
  例)3UK@5 :龍のダイス「月」でクリティカルコール宣言したサイコロ3個の行為判定
26
26
  MESSAGETEXT
27
27
 
28
- register_prefix('\d*UK[@\d]*')
28
+ register_prefix('\d*UK')
29
29
 
30
30
  def initialize(command)
31
31
  super(command)
@@ -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
 
@@ -112,7 +112,7 @@ module BCDice
112
112
  [3, "あなたの国は、英雄が用いた武具の伝説が残っている。レア武具アイテムの中からランダムに1種を選ぶ。そのレアアイテムのレシピを持っている。【王宮】のある部屋に、そのレア武具アイテムの名前を記入すること。"],
113
113
  [4, "あなたの国は、有名な職人たちが揃う工業国家である。コモンアイテムを作成するとき、それらのアイテムを作成するための必要国力が1点高いものとして扱う。"],
114
114
  [5, "あなたの国は、質実剛健な兵士たちが揃っている。その国のキャラクターは、《配下》最大値が1人上昇する(最大2人まで上昇する。3回目以降は振り直すこと)。"],
115
- [6, "あなたの国は、過去に列強に臣従し、いまでも友好的な関係を築いている。(1D6)を振ること。1ならダイナマイト帝国、2なら千年王朝、3ならメトロ汗国、4ならハグルマ資本主義人民共和国との関係が「友好」になる。5や6なら振り直すこと。また、その列強の列強系施設1軒を獲得する。"],
115
+ [6, "あなたの国は、過去に列強に臣従し、いまでも友好的な関係を築いている。(1D6)を振ること。1ならダイナマイト帝国、2なら千年王朝、3ならメトロ汗国、4ならハグルマ資本主義神聖共和国との関係が「友好」になる。5や6なら振り直すこと。また、その列強の列強系施設1軒を獲得する。"],
116
116
  ]
117
117
  return get_table_by_number(num, table)
118
118
  end
@@ -57,22 +57,22 @@ module BCDice
57
57
  return @first_modify || 0
58
58
  end
59
59
 
60
- # @return @[Integer]
60
+ # @return [Integer]
61
61
  def first_to
62
62
  return @first_to || 0
63
63
  end
64
64
 
65
- # @return @[Integer]
65
+ # @return [Integer]
66
66
  def rateup
67
67
  return @rateup || 0
68
68
  end
69
69
 
70
- # @return @[Integer]
70
+ # @return [Integer]
71
71
  def kept_modify
72
72
  return @kept_modify || 0
73
73
  end
74
74
 
75
- # @return @[Integer]
75
+ # @return [Integer]
76
76
  def modifier_after_half
77
77
  return @modifier_after_half || 0
78
78
  end