bcdice 3.1.3 → 3.5.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 (195) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +186 -76
  3. data/README.md +3 -2
  4. data/i18n/BeginningIdol/ja_jp.yml +2806 -0
  5. data/i18n/BeginningIdol/ko_kr.yml +1400 -0
  6. data/i18n/Cthulhu/zh_hans.yml +11 -0
  7. data/i18n/KillDeathBusiness/ja_jp.yml +1 -1
  8. data/i18n/MagicaLogia/ja_jp.yml +1 -1
  9. data/i18n/MagicaLogia/zh_hans.yml +564 -0
  10. data/i18n/MonotoneMuseum/ko_kr.yml +526 -53
  11. data/i18n/StellarKnights/ja_jp.yml +498 -0
  12. data/i18n/StellarKnights/ko_kr.yml +498 -0
  13. data/i18n/zh_hans.yml +7 -0
  14. data/lib/bcdice/command/parsed.rb +11 -3
  15. data/lib/bcdice/command/parser.rb +179 -100
  16. data/lib/bcdice/common_command/add_dice.rb +1 -1
  17. data/lib/bcdice/common_command/barabara_dice/node.rb +2 -2
  18. data/lib/bcdice/common_command/barabara_dice/result.rb +6 -0
  19. data/lib/bcdice/common_command/calc.rb +1 -1
  20. data/lib/bcdice/common_command/choice.rb +82 -7
  21. data/lib/bcdice/common_command/tally_dice/node.rb +135 -0
  22. data/lib/bcdice/common_command/tally_dice/parser.rb +302 -0
  23. data/lib/bcdice/common_command/tally_dice.rb +19 -0
  24. data/lib/bcdice/common_command.rb +2 -0
  25. data/lib/bcdice/dice_table/d66_half_grid_table.rb +33 -0
  26. data/lib/bcdice/dice_table/d66_left_range_table.rb +29 -0
  27. data/lib/bcdice/dice_table/d66_one_third_table.rb +34 -0
  28. data/lib/bcdice/dice_table/d66_table.rb +5 -1
  29. data/lib/bcdice/dice_table.rb +3 -0
  30. data/lib/bcdice/game_system/AceKillerGene.rb +1 -1
  31. data/lib/bcdice/game_system/Ainecadette.rb +68 -0
  32. data/lib/bcdice/game_system/Airgetlamh.rb +1 -1
  33. data/lib/bcdice/game_system/Alsetto.rb +1 -1
  34. data/lib/bcdice/game_system/AlterRaise.rb +2 -2
  35. data/lib/bcdice/game_system/Amadeus.rb +110 -93
  36. data/lib/bcdice/game_system/AngelGear.rb +10 -5
  37. data/lib/bcdice/game_system/AnimaAnimus.rb +16 -9
  38. data/lib/bcdice/game_system/Aoharubaan.rb +91 -0
  39. data/lib/bcdice/game_system/Arianrhod.rb +6 -8
  40. data/lib/bcdice/game_system/AssaultEngine.rb +91 -0
  41. data/lib/bcdice/game_system/Avandner.rb +1 -1
  42. data/lib/bcdice/game_system/BadLife.rb +264 -289
  43. data/lib/bcdice/game_system/Bakenokawa.rb +244 -0
  44. data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
  45. data/lib/bcdice/game_system/BattleTech.rb +109 -28
  46. data/lib/bcdice/game_system/BeastBindTrinity.rb +28 -12
  47. data/lib/bcdice/game_system/BeginningIdol.rb +118 -2392
  48. data/lib/bcdice/game_system/BeginningIdol_Korean.rb +10 -2312
  49. data/lib/bcdice/game_system/BladeOfArcana.rb +1 -1
  50. data/lib/bcdice/game_system/BlindMythos.rb +39 -38
  51. data/lib/bcdice/game_system/BloodCrusade.rb +6 -7
  52. data/lib/bcdice/game_system/BloodMoon.rb +9 -8
  53. data/lib/bcdice/game_system/CardRanker.rb +8 -7
  54. data/lib/bcdice/game_system/CastleInGray.rb +133 -0
  55. data/lib/bcdice/game_system/ChaosFlare.rb +21 -15
  56. data/lib/bcdice/game_system/Chill.rb +10 -10
  57. data/lib/bcdice/game_system/Chill3.rb +9 -9
  58. data/lib/bcdice/game_system/CodeLayerd.rb +39 -39
  59. data/lib/bcdice/game_system/ColossalHunter.rb +34 -47
  60. data/lib/bcdice/game_system/CrashWorld.rb +1 -1
  61. data/lib/bcdice/game_system/Cthulhu.rb +3 -3
  62. data/lib/bcdice/game_system/Cthulhu7th.rb +56 -18
  63. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
  64. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
  65. data/lib/bcdice/game_system/Cthulhu_SimplifiedChinese.rb +60 -0
  66. data/lib/bcdice/game_system/DarkBlaze.rb +0 -11
  67. data/lib/bcdice/game_system/DarkDaysDrive.rb +8 -7
  68. data/lib/bcdice/game_system/DeadlineHeroes.rb +11 -10
  69. data/lib/bcdice/game_system/DemonParasite.rb +5 -13
  70. data/lib/bcdice/game_system/DesperateRun.rb +1 -1
  71. data/lib/bcdice/game_system/DoubleCross.rb +8 -1
  72. data/lib/bcdice/game_system/Dracurouge.rb +3 -2
  73. data/lib/bcdice/game_system/EclipsePhase.rb +14 -14
  74. data/lib/bcdice/game_system/Elric.rb +18 -14
  75. data/lib/bcdice/game_system/Elysion.rb +1 -1
  76. data/lib/bcdice/game_system/EmbryoMachine.rb +9 -8
  77. data/lib/bcdice/game_system/Emoklore.rb +25 -20
  78. data/lib/bcdice/game_system/FateCoreSystem.rb +117 -0
  79. data/lib/bcdice/game_system/Fiasco.rb +1 -1
  80. data/lib/bcdice/game_system/FilledWith.rb +4 -0
  81. data/lib/bcdice/game_system/FutariSousa.rb +12 -10
  82. data/lib/bcdice/game_system/GURPS.rb +17 -28
  83. data/lib/bcdice/game_system/Garako.rb +1 -1
  84. data/lib/bcdice/game_system/GardenOrder.rb +12 -7
  85. data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +1 -1
  86. data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
  87. data/lib/bcdice/game_system/Gorilla.rb +2 -8
  88. data/lib/bcdice/game_system/GranCrest.rb +189 -417
  89. data/lib/bcdice/game_system/Gundog.rb +9 -8
  90. data/lib/bcdice/game_system/GundogRevised.rb +10 -9
  91. data/lib/bcdice/game_system/GundogZero.rb +1 -1
  92. data/lib/bcdice/game_system/GurpsFW.rb +16 -16
  93. data/lib/bcdice/game_system/HarnMaster.rb +19 -26
  94. data/lib/bcdice/game_system/HatsuneMiku.rb +1 -1
  95. data/lib/bcdice/game_system/Hieizan.rb +12 -21
  96. data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
  97. data/lib/bcdice/game_system/HuntersMoon.rb +5 -10
  98. data/lib/bcdice/game_system/InfiniteFantasia.rb +19 -17
  99. data/lib/bcdice/game_system/Insane.rb +13 -20
  100. data/lib/bcdice/game_system/Irisbane.rb +154 -0
  101. data/lib/bcdice/game_system/IthaWenUa.rb +8 -15
  102. data/lib/bcdice/game_system/JamesBond.rb +10 -10
  103. data/lib/bcdice/game_system/JekyllAndHyde.rb +1 -1
  104. data/lib/bcdice/game_system/Kamigakari.rb +1 -1
  105. data/lib/bcdice/game_system/KanColle.rb +4 -9
  106. data/lib/bcdice/game_system/Karukami.rb +84 -0
  107. data/lib/bcdice/game_system/KemonoNoMori.rb +26 -39
  108. data/lib/bcdice/game_system/KillDeathBusiness.rb +7 -15
  109. data/lib/bcdice/game_system/KurayamiCrying.rb +142 -3
  110. data/lib/bcdice/game_system/LiveraDoll.rb +254 -304
  111. data/lib/bcdice/game_system/LogHorizon.rb +10 -7
  112. data/lib/bcdice/game_system/MagicaLogia_SimplifiedChinese.rb +66 -0
  113. data/lib/bcdice/game_system/MeikyuDays.rb +10 -8
  114. data/lib/bcdice/game_system/MeikyuKingdom.rb +26 -26
  115. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +4 -3
  116. data/lib/bcdice/game_system/MetalHead.rb +12 -22
  117. data/lib/bcdice/game_system/MetalHeadExtream.rb +5 -5
  118. data/lib/bcdice/game_system/MonotoneMuseum.rb +8 -6
  119. data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +4 -4
  120. data/lib/bcdice/game_system/Nechronica.rb +63 -90
  121. data/lib/bcdice/game_system/NinjaSlayer.rb +6 -7
  122. data/lib/bcdice/game_system/NjslyrBattle.rb +8 -11
  123. data/lib/bcdice/game_system/OneWayHeroics.rb +1 -1
  124. data/lib/bcdice/game_system/Paradiso.rb +1 -1
  125. data/lib/bcdice/game_system/ParasiteBlood.rb +1 -1
  126. data/lib/bcdice/game_system/Peekaboo.rb +4 -9
  127. data/lib/bcdice/game_system/Pendragon.rb +7 -7
  128. data/lib/bcdice/game_system/PersonaO.rb +86 -0
  129. data/lib/bcdice/game_system/PhantasmAdventure.rb +8 -8
  130. data/lib/bcdice/game_system/Postman.rb +1 -1
  131. data/lib/bcdice/game_system/PulpCthulhu.rb +1 -1
  132. data/lib/bcdice/game_system/Raisondetre.rb +2 -2
  133. data/lib/bcdice/game_system/Revulture.rb +123 -0
  134. data/lib/bcdice/game_system/RuneQuest.rb +8 -8
  135. data/lib/bcdice/game_system/Ryutama.rb +1 -1
  136. data/lib/bcdice/game_system/SRS.rb +17 -16
  137. data/lib/bcdice/game_system/SamsaraBallad.rb +38 -11
  138. data/lib/bcdice/game_system/Satasupe.rb +32 -32
  139. data/lib/bcdice/game_system/ScreamHighSchool.rb +5 -5
  140. data/lib/bcdice/game_system/SharedFantasia.rb +19 -23
  141. data/lib/bcdice/game_system/ShinobiGami.rb +14 -6
  142. data/lib/bcdice/game_system/Skynauts.rb +103 -142
  143. data/lib/bcdice/game_system/SkynautsBouken.rb +228 -0
  144. data/lib/bcdice/game_system/StarryDolls.rb +318 -0
  145. data/lib/bcdice/game_system/SteamPunkers.rb +25 -7
  146. data/lib/bcdice/game_system/StellarKnights.rb +85 -706
  147. data/lib/bcdice/game_system/StellarKnights_Korean.rb +79 -0
  148. data/lib/bcdice/game_system/{SterileLife.rb → StellarLife.rb} +162 -226
  149. data/lib/bcdice/game_system/StratoShout.rb +8 -16
  150. data/lib/bcdice/game_system/Strave.rb +1 -1
  151. data/lib/bcdice/game_system/SwordWorld.rb +22 -9
  152. data/lib/bcdice/game_system/SwordWorld2_0.rb +22 -7
  153. data/lib/bcdice/game_system/SwordWorld2_5.rb +8 -2
  154. data/lib/bcdice/game_system/TalesFromTheLoop.rb +83 -0
  155. data/lib/bcdice/game_system/TherapieSein.rb +1 -1
  156. data/lib/bcdice/game_system/TokumeiTenkousei.rb +4 -3
  157. data/lib/bcdice/game_system/TokyoGhostResearch.rb +1 -1
  158. data/lib/bcdice/game_system/TorgEternity.rb +2 -2
  159. data/lib/bcdice/game_system/ToshiakiHolyGrailWar.rb +92 -0
  160. data/lib/bcdice/game_system/TrinitySeven.rb +279 -280
  161. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +1 -1
  162. data/lib/bcdice/game_system/Utakaze.rb +53 -48
  163. data/lib/bcdice/game_system/Villaciel.rb +1 -1
  164. data/lib/bcdice/game_system/WARPS.rb +11 -9
  165. data/lib/bcdice/game_system/WaresBlade.rb +4 -9
  166. data/lib/bcdice/game_system/Warhammer.rb +15 -6
  167. data/lib/bcdice/game_system/Warhammer4.rb +15 -11
  168. data/lib/bcdice/game_system/WitchQuest.rb +1 -1
  169. data/lib/bcdice/game_system/YankeeYogSothoth.rb +4 -9
  170. data/lib/bcdice/game_system/YearZeroEngine.rb +40 -19
  171. data/lib/bcdice/game_system/Yggdrasill.rb +1 -1
  172. data/lib/bcdice/game_system/ZettaiReido.rb +20 -25
  173. data/lib/bcdice/game_system/beginning_idol/accessories_table.rb +31 -0
  174. data/lib/bcdice/game_system/beginning_idol/bad_status_table.rb +43 -0
  175. data/lib/bcdice/game_system/beginning_idol/chain_d66_table.rb +29 -0
  176. data/lib/bcdice/game_system/beginning_idol/chain_table.rb +37 -0
  177. data/lib/bcdice/game_system/beginning_idol/costume_table.rb +37 -0
  178. data/lib/bcdice/game_system/beginning_idol/d6_twice_table.rb +36 -0
  179. data/lib/bcdice/game_system/beginning_idol/item_table.rb +51 -0
  180. data/lib/bcdice/game_system/beginning_idol/my_skill_name_table.rb +44 -0
  181. data/lib/bcdice/game_system/beginning_idol/random_event_table.rb +31 -0
  182. data/lib/bcdice/game_system/beginning_idol/skill_table.rb +63 -0
  183. data/lib/bcdice/game_system/beginning_idol/table.rb +193 -0
  184. data/lib/bcdice/game_system/beginning_idol/with_abnormality.rb +74 -0
  185. data/lib/bcdice/game_system/beginning_idol/work_table.rb +57 -0
  186. data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +1 -1
  187. data/lib/bcdice/game_system/one_way_heroics/random_event_table.rb +4 -4
  188. data/lib/bcdice/game_system/sword_world/rating_parsed.rb +50 -7
  189. data/lib/bcdice/game_system/sword_world/rating_parser.rb +148 -107
  190. data/lib/bcdice/game_system/sword_world/transcendent_test.rb +26 -8
  191. data/lib/bcdice/game_system.rb +18 -1
  192. data/lib/bcdice/repl.rb +1 -1
  193. data/lib/bcdice/result.rb +26 -0
  194. data/lib/bcdice/version.rb +1 -1
  195. metadata +48 -6
@@ -44,7 +44,7 @@ module BCDice
44
44
 
45
45
  def roll_with_day(day, randomizer)
46
46
  value = randomizer.roll_once(6)
47
- chosen = choise(value, day)
47
+ chosen = choice(value, day)
48
48
 
49
49
  chosen =
50
50
  if chosen.respond_to?(:roll_with_day)
@@ -63,7 +63,7 @@ module BCDice
63
63
  return result
64
64
  end
65
65
 
66
- def choise(value, day)
66
+ def choice(value, day)
67
67
  raise NotImplementedError
68
68
  end
69
69
 
@@ -73,7 +73,7 @@ module BCDice
73
73
  end
74
74
 
75
75
  class BranchByElapsedDays < BranchByDay
76
- def choise(value, day)
76
+ def choice(value, day)
77
77
  value > day ? @greater : @less_than_equal
78
78
  end
79
79
 
@@ -87,7 +87,7 @@ module BCDice
87
87
  end
88
88
 
89
89
  class BranchByDayParity < BranchByDay
90
- def choise(value, _)
90
+ def choice(value, _)
91
91
  value.odd? ? @greater : @less_than_equal
92
92
  end
93
93
 
@@ -25,6 +25,12 @@ module BCDice
25
25
  # @return [Boolean]
26
26
  attr_accessor :greatest_fortune
27
27
 
28
+ # @return [Integer, nil]
29
+ attr_writer :semi_fixed_val
30
+
31
+ # @return [Integer, nil]
32
+ attr_writer :tmp_fixed_val
33
+
28
34
  # @return [Integer]
29
35
  attr_accessor :modifier
30
36
 
@@ -33,11 +39,14 @@ module BCDice
33
39
 
34
40
  def initialize
35
41
  @critical = nil
42
+ @min_critical = nil
36
43
  @kept_modify = nil
37
44
  @first_to = nil
38
45
  @first_modify = nil
39
46
  @greatest_fortune = false
40
47
  @rateup = nil
48
+ @semi_fixed_val = nil
49
+ @tmp_fixed_val = nil
41
50
  end
42
51
 
43
52
  # @return [Boolean]
@@ -47,9 +56,22 @@ module BCDice
47
56
 
48
57
  # @return [Integer]
49
58
  def critical
50
- crit = @critical || (half ? 13 : 10)
51
- crit = 3 if crit < 3
52
- return crit
59
+ return @critical || (half ? 13 : 10)
60
+ end
61
+
62
+ # @return [Integer]
63
+ def min_critical
64
+ min_critical = 3
65
+ unless @semi_fixed_val.nil?
66
+ if @kept_modify.nil?
67
+ min_critical = @semi_fixed_val + 2 if min_critical < @semi_fixed_val + 2
68
+ else
69
+ min_critical = @semi_fixed_val + @kept_modify + 2 if min_critical < @semi_fixed_val + @kept_modify + 2
70
+ end
71
+ min_critical = 3 if @semi_fixed_val == 1
72
+ end
73
+ min_critical = 13 if min_critical > 13
74
+ return min_critical
53
75
  end
54
76
 
55
77
  # @return [Integer]
@@ -57,22 +79,36 @@ module BCDice
57
79
  return @first_modify || 0
58
80
  end
59
81
 
60
- # @return @[Integer]
82
+ # @return [Integer]
61
83
  def first_to
62
84
  return @first_to || 0
63
85
  end
64
86
 
65
- # @return @[Integer]
87
+ # @return [Integer]
66
88
  def rateup
67
89
  return @rateup || 0
68
90
  end
69
91
 
70
- # @return @[Integer]
92
+ # @return [Integer]
93
+ def semi_fixed_val
94
+ sf = @semi_fixed_val || 0
95
+ sf = 6 if sf > 6
96
+ return sf
97
+ end
98
+
99
+ # @return [Integer]
100
+ def tmp_fixed_val
101
+ tf = @tmp_fixed_val || 0
102
+ tf = 6 if tf > 6
103
+ return tf
104
+ end
105
+
106
+ # @return [Integer]
71
107
  def kept_modify
72
108
  return @kept_modify || 0
73
109
  end
74
110
 
75
- # @return @[Integer]
111
+ # @return [Integer]
76
112
  def modifier_after_half
77
113
  return @modifier_after_half || 0
78
114
  end
@@ -86,6 +122,8 @@ module BCDice
86
122
  output += "m[#{first_to}]" if first_to != 0
87
123
  output += "r[#{rateup}]" if rateup != 0
88
124
  output += "gf" if @greatest_fortune
125
+ output += "sf[#{semi_fixed_val}]" if semi_fixed_val != 0
126
+ output += "tf[#{tmp_fixed_val}]" if tmp_fixed_val != 0
89
127
  output += "a[#{Format.modifier(kept_modify)}]" if kept_modify != 0
90
128
 
91
129
  if @modifier != 0
@@ -93,6 +131,11 @@ module BCDice
93
131
  end
94
132
  return output
95
133
  end
134
+
135
+ # @return [Boolean]
136
+ def infinite_roll?
137
+ return critical < min_critical
138
+ end
96
139
  end
97
140
  end
98
141
  end
@@ -12,10 +12,10 @@ require "bcdice/enum"
12
12
  require "bcdice/game_system/sword_world/rating_lexer"
13
13
  require "bcdice/game_system/sword_world/rating_parsed"
14
14
 
15
- # SwordWorldの威力表コマンドをパースするクラス
16
15
  module BCDice
17
16
  module GameSystem
18
17
  class SwordWorld < Base
18
+ # SwordWorldの威力表コマンドをパースするクラス
19
19
 
20
20
  class RatingParser < Racc::Parser
21
21
 
@@ -52,6 +52,8 @@ def parsed(rate, modifier, option)
52
52
  p.first_modify = option[:first_modify]
53
53
  p.rateup = option[:rateup]&.eval(@round_type)
54
54
  p.greatest_fortune = option.fetch(:greatest_fortune, false)
55
+ p.semi_fixed_val = option[:semi_fixed_val]
56
+ p.tmp_fixed_val = option[:tmp_fixed_val]
55
57
  p.modifier = modifier.eval(@round_type)
56
58
  p.modifier_after_half = option[:modifier_after_half]&.eval(@round_type)
57
59
  end
@@ -64,105 +66,111 @@ end
64
66
  ##### State transition tables begin ###
65
67
 
66
68
  racc_action_table = [
67
- 15, 14, 16, 5, 18, 19, 51, 52, 21, 22,
68
- 11, 53, 12, 17, 13, 15, 14, 16, 4, 18,
69
- 19, 4, 8, 3, 28, 11, 28, 12, 17, 13,
70
- 24, 25, 24, 25, 27, 28, 27, 28, 49, 50,
71
- 9, 24, 25, 24, 25, 27, 28, 27, 28, 49,
72
- 50, 35, 24, 25, 24, 25, 27, 28, 27, 28,
73
- 49, 50, 42, 24, 25, 24, 25, 27, 28, 27,
74
- 28, 49, 50, 47, 24, 25, 24, 25, 27, 28,
75
- 27, 28, 49, 50, 48, 24, 25, 24, 25, 27,
76
- 28, 27, 28, 49, 50, nil, 24, 25, 24, 25,
77
- 27, 28, 27, 28, 49, 50, nil, 24, 25, 24,
78
- 25, 27, 30, 27, nil, nil, nil, nil, 31, 32 ]
69
+ 15, 14, 16, 5, 17, 18, 20, 21, 57, 58,
70
+ 23, 24, 11, 59, 12, 19, 13, 15, 14, 16,
71
+ 4, 17, 18, 20, 21, 4, 30, 3, 30, 11,
72
+ 8, 12, 19, 13, 26, 27, 26, 27, 29, 30,
73
+ 29, 30, 55, 56, 55, 56, 30, 26, 27, 26,
74
+ 27, 29, 30, 29, 26, 27, 9, 30, 29, 30,
75
+ 26, 27, 55, 56, 29, 26, 27, 26, 27, 29,
76
+ 30, 29, 30, 55, 56, 55, 56, 30, 26, 27,
77
+ 26, 27, 29, 30, 29, 26, 27, 37, 30, 29,
78
+ 30, 26, 27, 55, 56, 29, 26, 27, 26, 27,
79
+ 29, 30, 29, 30, 55, 56, 38, 39, 32, 26,
80
+ 27, 26, 27, 29, 46, 29, 33, 34, 51, 52,
81
+ 53, 54 ]
79
82
 
80
83
  racc_action_check = [
81
- 6, 6, 6, 1, 6, 6, 45, 45, 10, 10,
82
- 6, 45, 6, 6, 6, 20, 20, 20, 3, 20,
83
- 20, 0, 4, 0, 11, 20, 12, 20, 20, 20,
84
- 11, 11, 12, 12, 11, 14, 12, 15, 37, 37,
85
- 5, 14, 14, 15, 15, 14, 17, 15, 18, 39,
86
- 39, 16, 17, 17, 18, 18, 17, 19, 18, 21,
87
- 40, 40, 23, 19, 19, 21, 21, 19, 22, 21,
88
- 24, 41, 41, 31, 22, 22, 24, 24, 22, 25,
89
- 24, 27, 46, 46, 32, 25, 25, 27, 27, 25,
90
- 49, 27, 50, 56, 56, nil, 49, 49, 50, 50,
91
- 49, 51, 50, 52, 57, 57, nil, 51, 51, 52,
92
- 52, 51, 13, 52, nil, nil, nil, nil, 13, 13 ]
84
+ 6, 6, 6, 1, 6, 6, 6, 6, 49, 49,
85
+ 10, 10, 6, 49, 6, 6, 6, 22, 22, 22,
86
+ 3, 22, 22, 22, 22, 0, 11, 0, 12, 22,
87
+ 4, 22, 22, 22, 11, 11, 12, 12, 11, 14,
88
+ 12, 15, 41, 41, 43, 43, 19, 14, 14, 15,
89
+ 15, 14, 20, 15, 19, 19, 5, 21, 19, 23,
90
+ 20, 20, 44, 44, 20, 21, 21, 23, 23, 21,
91
+ 24, 23, 26, 45, 45, 50, 50, 27, 24, 24,
92
+ 26, 26, 24, 29, 26, 27, 27, 16, 55, 27,
93
+ 56, 29, 29, 62, 62, 29, 55, 55, 56, 56,
94
+ 55, 57, 56, 58, 63, 63, 17, 18, 13, 57,
95
+ 57, 58, 58, 57, 25, 58, 13, 13, 33, 34,
96
+ 38, 39 ]
93
97
 
94
98
  racc_action_pointer = [
95
- 18, 3, nil, 15, 20, 40, -4, nil, nil, nil,
96
- 0, 22, 24, 110, 33, 35, 44, 44, 46, 55,
97
- 11, 57, 66, 47, 68, 77, nil, 79, nil, nil,
98
- nil, 71, 82, nil, nil, nil, nil, 28, nil, 39,
99
- 50, 61, nil, nil, nil, -2, 72, nil, nil, 88,
100
- 90, 99, 101, nil, nil, nil, 83, 94 ]
99
+ 22, 3, nil, 17, 28, 56, -4, nil, nil, nil,
100
+ 0, 24, 26, 106, 37, 39, 80, 99, 100, 44,
101
+ 50, 55, 13, 57, 68, 97, 70, 75, nil, 81,
102
+ nil, nil, nil, 116, 117, nil, nil, nil, 118, 119,
103
+ nil, 30, nil, 32, 50, 61, nil, nil, nil, -2,
104
+ 63, nil, nil, nil, nil, 86, 88, 99, 101, nil,
105
+ nil, nil, 81, 92 ]
101
106
 
102
107
  racc_action_default = [
103
- -31, -31, -4, -31, -31, -31, -1, -4, -3, 58,
104
- -5, -31, -31, -31, -11, -31, -31, -31, -31, -31,
105
- -2, -31, -31, -31, -31, -31, -28, -31, -30, -7,
106
- -8, -31, -31, -12, -13, -14, -15, -16, -25, -17,
107
- -18, -19, -6, -26, -27, -31, -22, -9, -10, -31,
108
- -31, -31, -31, -29, -23, -24, -20, -21 ]
108
+ -33, -33, -4, -33, -33, -33, -1, -4, -3, 64,
109
+ -5, -33, -33, -33, -11, -33, -33, -33, -33, -33,
110
+ -33, -33, -2, -33, -33, -33, -33, -33, -30, -33,
111
+ -32, -7, -8, -33, -33, -12, -13, -14, -33, -33,
112
+ -17, -18, -27, -19, -20, -21, -6, -28, -29, -33,
113
+ -24, -9, -10, -15, -16, -33, -33, -33, -33, -31,
114
+ -25, -26, -22, -23 ]
109
115
 
110
116
  racc_goto_table = [
111
- 23, 29, 2, 33, 34, 7, 36, 37, 39, 1,
112
- 40, 41, 6, 43, 44, 45, 46, 20, nil, nil,
117
+ 25, 31, 6, 35, 36, 1, 49, 22, 40, 41,
118
+ 43, 2, 44, 45, 7, 47, 48, nil, 50, nil,
113
119
  nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
114
- nil, nil, nil, nil, nil, nil, nil, nil, 54, 55,
115
- 56, 57 ]
120
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
121
+ nil, nil, nil, nil, 60, 61, 62, 63 ]
116
122
 
117
123
  racc_goto_check = [
118
- 5, 5, 2, 5, 5, 2, 5, 6, 6, 1,
119
- 6, 6, 3, 5, 5, 7, 6, 3, nil, nil,
124
+ 5, 5, 3, 5, 5, 1, 7, 3, 5, 6,
125
+ 6, 2, 6, 6, 2, 5, 5, nil, 6, nil,
126
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
120
127
  nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
121
- nil, nil, nil, nil, nil, nil, nil, nil, 5, 5,
122
- 6, 6 ]
128
+ nil, nil, nil, nil, 5, 5, 6, 6 ]
123
129
 
124
130
  racc_goto_pointer = [
125
- nil, 9, 2, 10, nil, -11, -11, -12, nil ]
131
+ nil, 5, 11, 0, nil, -11, -11, -23, nil ]
126
132
 
127
133
  racc_goto_default = [
128
- nil, nil, nil, nil, 10, 38, nil, nil, 26 ]
134
+ nil, nil, nil, nil, 10, 42, nil, nil, 28 ]
129
135
 
130
136
  racc_reduce_table = [
131
137
  0, 0, :racc_error,
132
- 2, 20, :_reduce_1,
133
- 3, 20, :_reduce_2,
134
- 2, 21, :_reduce_3,
135
- 0, 22, :_reduce_4,
136
- 2, 22, :_reduce_5,
137
- 4, 22, :_reduce_6,
138
- 3, 22, :_reduce_7,
139
- 3, 22, :_reduce_8,
140
- 4, 22, :_reduce_9,
141
- 4, 22, :_reduce_10,
142
- 2, 22, :_reduce_11,
143
- 3, 22, :_reduce_12,
144
- 3, 22, :_reduce_13,
145
- 3, 22, :_reduce_14,
146
- 3, 22, :_reduce_15,
147
- 2, 23, :_reduce_16,
148
- 2, 23, :_reduce_17,
149
- 3, 23, :_reduce_18,
150
- 3, 23, :_reduce_19,
151
- 3, 26, :_reduce_20,
152
- 3, 26, :_reduce_21,
138
+ 2, 22, :_reduce_1,
139
+ 3, 22, :_reduce_2,
140
+ 2, 23, :_reduce_3,
141
+ 0, 24, :_reduce_4,
142
+ 2, 24, :_reduce_5,
143
+ 4, 24, :_reduce_6,
144
+ 3, 24, :_reduce_7,
145
+ 3, 24, :_reduce_8,
146
+ 4, 24, :_reduce_9,
147
+ 4, 24, :_reduce_10,
148
+ 2, 24, :_reduce_11,
149
+ 3, 24, :_reduce_12,
150
+ 3, 24, :_reduce_13,
151
+ 3, 24, :_reduce_14,
152
+ 4, 24, :_reduce_15,
153
+ 4, 24, :_reduce_16,
154
+ 3, 24, :_reduce_17,
155
+ 2, 25, :_reduce_18,
156
+ 2, 25, :_reduce_19,
157
+ 3, 25, :_reduce_20,
158
+ 3, 25, :_reduce_21,
159
+ 3, 28, :_reduce_22,
160
+ 3, 28, :_reduce_23,
161
+ 1, 28, :_reduce_none,
162
+ 3, 27, :_reduce_25,
163
+ 3, 27, :_reduce_26,
164
+ 1, 27, :_reduce_none,
165
+ 2, 26, :_reduce_28,
166
+ 2, 26, :_reduce_29,
153
167
  1, 26, :_reduce_none,
154
- 3, 25, :_reduce_23,
155
- 3, 25, :_reduce_24,
156
- 1, 25, :_reduce_none,
157
- 2, 24, :_reduce_26,
158
- 2, 24, :_reduce_27,
159
- 1, 24, :_reduce_none,
160
- 3, 27, :_reduce_29,
161
- 1, 27, :_reduce_30 ]
168
+ 3, 29, :_reduce_31,
169
+ 1, 29, :_reduce_32 ]
162
170
 
163
- racc_reduce_n = 31
171
+ racc_reduce_n = 33
164
172
 
165
- racc_shift_n = 58
173
+ racc_shift_n = 64
166
174
 
167
175
  racc_token_table = {
168
176
  false => 0,
@@ -173,19 +181,21 @@ racc_token_table = {
173
181
  :H => 5,
174
182
  :G => 6,
175
183
  :F => 7,
176
- :PLUS => 8,
177
- :MINUS => 9,
178
- :ASTERISK => 10,
179
- :SLASH => 11,
180
- :PARENL => 12,
181
- :PARENR => 13,
182
- :BRACKETL => 14,
183
- :BRACKETR => 15,
184
- :AT => 16,
185
- :SHARP => 17,
186
- :DOLLAR => 18 }
187
-
188
- racc_nt_base = 19
184
+ :S => 8,
185
+ :T => 9,
186
+ :PLUS => 10,
187
+ :MINUS => 11,
188
+ :ASTERISK => 12,
189
+ :SLASH => 13,
190
+ :PARENL => 14,
191
+ :PARENR => 15,
192
+ :BRACKETL => 16,
193
+ :BRACKETR => 17,
194
+ :AT => 18,
195
+ :SHARP => 19,
196
+ :DOLLAR => 20 }
197
+
198
+ racc_nt_base = 21
189
199
 
190
200
  racc_use_result_var = true
191
201
 
@@ -214,6 +224,8 @@ Racc_token_to_s_table = [
214
224
  "H",
215
225
  "G",
216
226
  "F",
227
+ "S",
228
+ "T",
217
229
  "PLUS",
218
230
  "MINUS",
219
231
  "ASTERISK",
@@ -361,7 +373,10 @@ end
361
373
 
362
374
  def _reduce_14(val, _values, result)
363
375
  option, _, _ = val
364
- raise ParseError unless [:v2_5, :v2_0].include?(@version) && option[:greatest_fortune].nil?
376
+ raise ParseError unless [:v2_5, :v2_0].include?(@version)
377
+ raise ParseError unless option[:greatest_fortune].nil?
378
+ raise ParseError unless option[:semi_fixed_val].nil?
379
+ raise ParseError unless option[:tmp_fixed_val].nil?
365
380
 
366
381
  option[:greatest_fortune] = true
367
382
  result = option
@@ -370,32 +385,48 @@ def _reduce_14(val, _values, result)
370
385
  end
371
386
 
372
387
  def _reduce_15(val, _values, result)
373
- option, _, term = val
374
- raise ParseError unless @version == :v2_5 && option[:kept_modify].nil?
388
+ option, _, _, term = val
389
+ raise ParseError unless [:v2_5, :v2_0].include?(@version)
390
+ raise ParseError unless option[:greatest_fortune].nil?
391
+ raise ParseError unless option[:semi_fixed_val].nil?
392
+ raise ParseError unless option[:tmp_fixed_val].nil?
375
393
 
376
- option[:kept_modify] = term
394
+ option[:semi_fixed_val] = term.to_i
377
395
  result = option
378
396
 
379
397
  result
380
398
  end
381
399
 
382
400
  def _reduce_16(val, _values, result)
383
- result = val[1]
401
+ option, _, _, term = val
402
+ raise ParseError unless [:v2_5, :v2_0].include?(@version)
403
+ raise ParseError unless option[:greatest_fortune].nil?
404
+ raise ParseError unless option[:semi_fixed_val].nil?
405
+ raise ParseError unless option[:tmp_fixed_val].nil?
406
+
407
+ option[:tmp_fixed_val] = term.to_i
408
+ result = option
409
+
384
410
  result
385
411
  end
386
412
 
387
413
  def _reduce_17(val, _values, result)
388
- result = Arithmetic::Node::Negative.new(val[1])
414
+ option, _, term = val
415
+ raise ParseError unless @version == :v2_5 && option[:kept_modify].nil?
416
+
417
+ option[:kept_modify] = term
418
+ result = option
419
+
389
420
  result
390
421
  end
391
422
 
392
423
  def _reduce_18(val, _values, result)
393
- result = Arithmetic::Node::BinaryOp.new(val[0], :+, val[2])
424
+ result = val[1]
394
425
  result
395
426
  end
396
427
 
397
428
  def _reduce_19(val, _values, result)
398
- result = Arithmetic::Node::BinaryOp.new(val[0], :-, val[2])
429
+ result = Arithmetic::Node::Negative.new(val[1])
399
430
  result
400
431
  end
401
432
 
@@ -409,39 +440,49 @@ def _reduce_21(val, _values, result)
409
440
  result
410
441
  end
411
442
 
412
- # reduce 22 omitted
443
+ def _reduce_22(val, _values, result)
444
+ result = Arithmetic::Node::BinaryOp.new(val[0], :+, val[2])
445
+ result
446
+ end
413
447
 
414
448
  def _reduce_23(val, _values, result)
449
+ result = Arithmetic::Node::BinaryOp.new(val[0], :-, val[2])
450
+ result
451
+ end
452
+
453
+ # reduce 24 omitted
454
+
455
+ def _reduce_25(val, _values, result)
415
456
  result = Arithmetic::Node::BinaryOp.new(val[0], :*, val[2])
416
457
  result
417
458
  end
418
459
 
419
- def _reduce_24(val, _values, result)
460
+ def _reduce_26(val, _values, result)
420
461
  result = Arithmetic::Node::DivideWithGameSystemDefault.new(val[0], val[2])
421
462
 
422
463
  result
423
464
  end
424
465
 
425
- # reduce 25 omitted
466
+ # reduce 27 omitted
426
467
 
427
- def _reduce_26(val, _values, result)
468
+ def _reduce_28(val, _values, result)
428
469
  result = val[1]
429
470
  result
430
471
  end
431
472
 
432
- def _reduce_27(val, _values, result)
473
+ def _reduce_29(val, _values, result)
433
474
  result = Arithmetic::Node::Negative.new(val[1])
434
475
  result
435
476
  end
436
477
 
437
- # reduce 28 omitted
478
+ # reduce 30 omitted
438
479
 
439
- def _reduce_29(val, _values, result)
480
+ def _reduce_31(val, _values, result)
440
481
  result = val[1]
441
482
  result
442
483
  end
443
484
 
444
- def _reduce_30(val, _values, result)
485
+ def _reduce_32(val, _values, result)
445
486
  result = Arithmetic::Node::Number.new(val[0])
446
487
  result
447
488
  end
@@ -1,8 +1,18 @@
1
+ require "bcdice/result"
2
+
1
3
  module BCDice
2
4
  module GameSystem
3
5
  class SwordWorld2_0 < SwordWorld
4
6
  # 超越判定のノード
5
7
  class TranscendentTest
8
+ RESULT_STR = {
9
+ success: "成功",
10
+ failure: "失敗",
11
+ super_success: "超成功",
12
+ critical: "自動的成功",
13
+ fumble: "自動的失敗",
14
+ }.freeze
15
+
6
16
  # @param [Integer] critical_value クリティカル値
7
17
  # @param [Integer] modifier 修正値
8
18
  # @param [String, nil] cmp_op 比較演算子(> または >=)
@@ -40,14 +50,21 @@ module BCDice
40
50
  sum = sum_of_dice(value_groups)
41
51
  total_sum = sum + @modifier
42
52
 
53
+ result = result_status(total_sum, value_groups.length, fumble, critical)
43
54
  parts = [
44
55
  "(#{@expression})",
45
56
  "#{dice_str(value_groups, sum)}#{@modifier_str}",
46
57
  total_sum,
47
- @target && result_str(total_sum, value_groups.length, fumble, critical)
58
+ RESULT_STR[result],
48
59
  ].compact
49
60
 
50
- return parts.join(" ")
61
+ return Result.new.tap do |r|
62
+ r.text = parts.join(" > ")
63
+ r.fumble = result == :fumble
64
+ r.critical = result == :critical
65
+ r.success = [:success, :super_success, :critical].include?(result)
66
+ r.failure = [:failure, :fumble].include?(result)
67
+ end
51
68
  end
52
69
 
53
70
  private
@@ -86,16 +103,17 @@ module BCDice
86
103
  # @param [Integer] n_value_groups 出目のグループの数
87
104
  # @param [Boolean] fumble ファンブルかどうか
88
105
  # @param [Boolean] critical クリティカルかどうか
89
- # @return [String]
90
- def result_str(total_sum, n_value_groups, fumble, critical)
91
- return "自動的失敗" if fumble
92
- return "自動的成功" if critical
106
+ # @return [Symbol]
107
+ def result_status(total_sum, n_value_groups, fumble, critical)
108
+ return :no_target unless @target
109
+ return :fumble if fumble
110
+ return :critical if critical
93
111
 
94
112
  if total_sum.send(@cmp_op, @target)
95
113
  # 振り足しが行われ、合計値が41以上ならば「超成功」
96
- n_value_groups >= 2 && total_sum >= 41 ? "超成功" : "成功"
114
+ n_value_groups >= 2 && total_sum >= 41 ? :super_success : :success
97
115
  else
98
- "失敗"
116
+ :failure
99
117
  end
100
118
  end
101
119
  end