bcdice 3.1.3 → 3.5.0

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