bcdice 3.0.0.pre.alpha.1 → 3.0.0.pre.alpha.2

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 (255) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +1 -1
  3. data/.rubocop.yml +12 -0
  4. data/.rubocop_todo.yml +1 -0
  5. data/CHANGELOG.md +34 -0
  6. data/Gemfile +6 -3
  7. data/Rakefile +52 -18
  8. data/bcdice.gemspec +2 -0
  9. data/i18n/Amadeus/ja_jp.yml +386 -0
  10. data/i18n/Amadeus/ko_kr.yml +148 -0
  11. data/i18n/Cthulhu/ja_jp.yml +11 -0
  12. data/i18n/Cthulhu/ko_kr.yml +11 -0
  13. data/i18n/Cthulhu/zh_hant.yml +11 -0
  14. data/i18n/DetatokoSaga/ja_jp.yml +74 -0
  15. data/i18n/DetatokoSaga/ko_kr.yml +74 -0
  16. data/i18n/DoubleCross/ja_jp.yml +53 -0
  17. data/i18n/DoubleCross/ko_kr.yml +53 -0
  18. data/i18n/Dracurouge/ja_jp.yml +1374 -0
  19. data/i18n/Dracurouge/ko_kr.yml +295 -0
  20. data/i18n/Fiasco/ja_jp.yml +10 -0
  21. data/i18n/Fiasco/ko_kr.yml +10 -0
  22. data/i18n/FutariSousa/ja_jp.yml +720 -0
  23. data/i18n/FutariSousa/ko_kr.yml +746 -0
  24. data/i18n/Insane/ja_jp.yml +454 -0
  25. data/i18n/Insane/ko_kr.yml +502 -0
  26. data/i18n/Kamigakari/ja_jp.yml +276 -0
  27. data/i18n/Kamigakari/ko_kr.yml +204 -0
  28. data/i18n/KillDeathBusiness/ja_jp.yml +1092 -0
  29. data/i18n/KillDeathBusiness/ko_kr.yml +1062 -0
  30. data/i18n/LogHorizon/ja_jp.yml +3082 -0
  31. data/i18n/LogHorizon/ko_kr.yml +923 -0
  32. data/i18n/MagicaLogia/ja_jp.yml +564 -0
  33. data/i18n/MonotoneMuseum/ja_jp.yml +525 -0
  34. data/i18n/MonotoneMuseum/ko_kr.yml +89 -0
  35. data/i18n/Nechronica/ja_jp.yml +57 -0
  36. data/i18n/Nechronica/ko_kr.yml +14 -0
  37. data/i18n/StratoShout/ja_jp.yml +160 -0
  38. data/i18n/StratoShout/ko_kr.yml +160 -0
  39. data/i18n/ja_jp.yml +5 -0
  40. data/i18n/ko_kr.yml +7 -0
  41. data/i18n/zh_hant.yml +3 -0
  42. data/lib/bcdice/arithmetic/node.rb +154 -0
  43. data/lib/bcdice/base.rb +87 -101
  44. data/lib/bcdice/common_command.rb +2 -0
  45. data/lib/bcdice/common_command/add_dice.rb +5 -41
  46. data/lib/bcdice/common_command/add_dice/node.rb +92 -16
  47. data/lib/bcdice/common_command/add_dice/parser.rb +374 -274
  48. data/lib/bcdice/common_command/add_dice/parser.y +153 -0
  49. data/lib/bcdice/common_command/add_dice/randomizer.rb +25 -33
  50. data/lib/bcdice/common_command/barabara_dice.rb +6 -47
  51. data/lib/bcdice/common_command/barabara_dice/node.rb +84 -0
  52. data/lib/bcdice/common_command/barabara_dice/parser.rb +336 -0
  53. data/lib/bcdice/common_command/barabara_dice/parser.y +107 -0
  54. data/lib/bcdice/common_command/calc.rb +7 -30
  55. data/lib/bcdice/common_command/calc/node.rb +30 -0
  56. data/lib/bcdice/common_command/calc/parser.rb +271 -0
  57. data/lib/bcdice/common_command/calc/parser.y +79 -0
  58. data/lib/bcdice/common_command/choice.rb +137 -19
  59. data/lib/bcdice/common_command/d66_dice.rb +48 -34
  60. data/lib/bcdice/common_command/lexer.rb +46 -0
  61. data/lib/bcdice/common_command/repeat.rb +102 -0
  62. data/lib/bcdice/common_command/reroll_dice.rb +8 -158
  63. data/lib/bcdice/common_command/reroll_dice/node.rb +198 -0
  64. data/lib/bcdice/common_command/reroll_dice/parser.rb +421 -0
  65. data/lib/bcdice/common_command/reroll_dice/parser.y +158 -0
  66. data/lib/bcdice/common_command/upper_dice.rb +10 -129
  67. data/lib/bcdice/common_command/upper_dice/node.rb +181 -0
  68. data/lib/bcdice/common_command/upper_dice/parser.rb +412 -0
  69. data/lib/bcdice/common_command/upper_dice/parser.y +143 -0
  70. data/lib/bcdice/common_command/version.rb +9 -17
  71. data/lib/bcdice/deprecated/checker.rb +78 -0
  72. data/lib/bcdice/dice_table/d66_grid_table.rb +8 -0
  73. data/lib/bcdice/dice_table/d66_table.rb +10 -0
  74. data/lib/bcdice/dice_table/sai_fic_skill_table.rb +75 -17
  75. data/lib/bcdice/dice_table/sai_fic_skill_table/category.rb +25 -0
  76. data/lib/bcdice/dice_table/sai_fic_skill_table/skill.rb +23 -0
  77. data/lib/bcdice/dice_table/table.rb +8 -0
  78. data/lib/bcdice/game_system.rb +7 -1
  79. data/lib/bcdice/game_system/AFF2e.rb +1 -1
  80. data/lib/bcdice/game_system/AceKillerGene.rb +2 -2
  81. data/lib/bcdice/game_system/Airgetlamh.rb +3 -3
  82. data/lib/bcdice/game_system/Alsetto.rb +1 -1
  83. data/lib/bcdice/game_system/Alshard.rb +1 -1
  84. data/lib/bcdice/game_system/AlterRaise.rb +2 -2
  85. data/lib/bcdice/game_system/Amadeus.rb +46 -507
  86. data/lib/bcdice/game_system/Amadeus_Korean.rb +12 -456
  87. data/lib/bcdice/game_system/AnimaAnimus.rb +1 -1
  88. data/lib/bcdice/game_system/Arianrhod.rb +0 -1
  89. data/lib/bcdice/game_system/ArsMagica.rb +1 -1
  90. data/lib/bcdice/game_system/Avandner.rb +1 -1
  91. data/lib/bcdice/game_system/BBN.rb +1 -1
  92. data/lib/bcdice/game_system/BadLife.rb +1 -1
  93. data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
  94. data/lib/bcdice/game_system/BeastBindTrinity.rb +1 -2
  95. data/lib/bcdice/game_system/BeginningIdol.rb +2 -3
  96. data/lib/bcdice/game_system/BeginningIdol_Korean.rb +2 -3
  97. data/lib/bcdice/game_system/BladeOfArcana.rb +2 -2
  98. data/lib/bcdice/game_system/BlindMythos.rb +1 -1
  99. data/lib/bcdice/game_system/BloodCrusade.rb +0 -1
  100. data/lib/bcdice/game_system/BloodMoon.rb +0 -1
  101. data/lib/bcdice/game_system/CardRanker.rb +1 -2
  102. data/lib/bcdice/game_system/ChaosFlare.rb +1 -1
  103. data/lib/bcdice/game_system/Chill.rb +1 -1
  104. data/lib/bcdice/game_system/CodeLayerd.rb +1 -1
  105. data/lib/bcdice/game_system/ColossalHunter.rb +1 -2
  106. data/lib/bcdice/game_system/Comes.rb +50 -0
  107. data/lib/bcdice/game_system/CrashWorld.rb +1 -1
  108. data/lib/bcdice/game_system/Cthulhu.rb +94 -97
  109. data/lib/bcdice/game_system/Cthulhu7th.rb +108 -67
  110. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
  111. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
  112. data/lib/bcdice/game_system/CthulhuTech.rb +8 -14
  113. data/lib/bcdice/game_system/Cthulhu_ChineseTraditional.rb +7 -190
  114. data/lib/bcdice/game_system/Cthulhu_Korean.rb +5 -186
  115. data/lib/bcdice/game_system/DarkBlaze.rb +9 -5
  116. data/lib/bcdice/game_system/DarkDaysDrive.rb +17 -15
  117. data/lib/bcdice/game_system/DarkSouls.rb +1 -1
  118. data/lib/bcdice/game_system/DeadlineHeroes.rb +2 -2
  119. data/lib/bcdice/game_system/DemonParasite.rb +1 -2
  120. data/lib/bcdice/game_system/DetatokoSaga.rb +48 -149
  121. data/lib/bcdice/game_system/DetatokoSaga_Korean.rb +6 -274
  122. data/lib/bcdice/game_system/DiceOfTheDead.rb +9 -6
  123. data/lib/bcdice/game_system/DoubleCross.rb +102 -81
  124. data/lib/bcdice/game_system/DoubleCross_Korean.rb +13 -330
  125. data/lib/bcdice/game_system/Dracurouge.rb +376 -1678
  126. data/lib/bcdice/game_system/Dracurouge_Korean.rb +16 -271
  127. data/lib/bcdice/game_system/EarthDawn.rb +1 -1
  128. data/lib/bcdice/game_system/EarthDawn3.rb +1 -1
  129. data/lib/bcdice/game_system/EarthDawn4.rb +1 -1
  130. data/lib/bcdice/game_system/Elysion.rb +3 -4
  131. data/lib/bcdice/game_system/EmbryoMachine.rb +1 -1
  132. data/lib/bcdice/game_system/Emoklore.rb +131 -0
  133. data/lib/bcdice/game_system/EndBreaker.rb +1 -2
  134. data/lib/bcdice/game_system/EtrianOdysseySRS.rb +1 -1
  135. data/lib/bcdice/game_system/Fiasco.rb +87 -70
  136. data/lib/bcdice/game_system/Fiasco_Korean.rb +7 -95
  137. data/lib/bcdice/game_system/FilledWith.rb +462 -566
  138. data/lib/bcdice/game_system/FullMetalPanic.rb +1 -1
  139. data/lib/bcdice/game_system/FutariSousa.rb +103 -938
  140. data/lib/bcdice/game_system/FutariSousa_Korean.rb +7 -948
  141. data/lib/bcdice/game_system/{Gurps.rb → GURPS.rb} +184 -217
  142. data/lib/bcdice/game_system/Garako.rb +131 -39
  143. data/lib/bcdice/game_system/GardenOrder.rb +2 -2
  144. data/lib/bcdice/game_system/GehennaAn.rb +1 -1
  145. data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +1 -1
  146. data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
  147. data/lib/bcdice/game_system/GoldenSkyStories.rb +1 -1
  148. data/lib/bcdice/game_system/Gorilla.rb +1 -1
  149. data/lib/bcdice/game_system/GranCrest.rb +2 -3
  150. data/lib/bcdice/game_system/GundogRevised.rb +1 -1
  151. data/lib/bcdice/game_system/GundogZero.rb +1 -1
  152. data/lib/bcdice/game_system/GurpsFW.rb +2 -3
  153. data/lib/bcdice/game_system/HarnMaster.rb +2 -2
  154. data/lib/bcdice/game_system/HatsuneMiku.rb +1 -2
  155. data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
  156. data/lib/bcdice/game_system/HuntersMoon.rb +1 -2
  157. data/lib/bcdice/game_system/Illusio.rb +2 -2
  158. data/lib/bcdice/game_system/Insane.rb +90 -717
  159. data/lib/bcdice/game_system/Insane_Korean.rb +7 -719
  160. data/lib/bcdice/game_system/Kamigakari.rb +47 -242
  161. data/lib/bcdice/game_system/Kamigakari_Korean.rb +6 -394
  162. data/lib/bcdice/game_system/KanColle.rb +3 -3
  163. data/lib/bcdice/game_system/KemonoNoMori.rb +1 -1
  164. data/lib/bcdice/game_system/KillDeathBusiness.rb +162 -1144
  165. data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +6 -1459
  166. data/lib/bcdice/game_system/KurayamiCrying.rb +1 -1
  167. data/lib/bcdice/game_system/LiveraDoll.rb +2 -2
  168. data/lib/bcdice/game_system/LogHorizon.rb +350 -3379
  169. data/lib/bcdice/game_system/LogHorizon_Korean.rb +55 -1357
  170. data/lib/bcdice/game_system/LostRecord.rb +0 -1
  171. data/lib/bcdice/game_system/LostRoyal.rb +1 -2
  172. data/lib/bcdice/game_system/MagicaLogia.rb +158 -1044
  173. data/lib/bcdice/game_system/MeikyuDays.rb +1 -2
  174. data/lib/bcdice/game_system/MeikyuKingdom.rb +4 -4
  175. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +4 -5
  176. data/lib/bcdice/game_system/MetalHead.rb +1 -1
  177. data/lib/bcdice/game_system/MetalHeadExtream.rb +2 -2
  178. data/lib/bcdice/game_system/MetallicGuardian.rb +1 -1
  179. data/lib/bcdice/game_system/MonotoneMuseum.rb +38 -239
  180. data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +10 -270
  181. data/lib/bcdice/game_system/NSSQ.rb +159 -0
  182. data/lib/bcdice/game_system/Nechronica.rb +34 -73
  183. data/lib/bcdice/game_system/Nechronica_Korean.rb +11 -128
  184. data/lib/bcdice/game_system/NeverCloud.rb +1 -1
  185. data/lib/bcdice/game_system/NightWizard.rb +1 -1
  186. data/lib/bcdice/game_system/NightWizard3rd.rb +1 -1
  187. data/lib/bcdice/game_system/NinjaSlayer.rb +12 -11
  188. data/lib/bcdice/game_system/NjslyrBattle.rb +1 -1
  189. data/lib/bcdice/game_system/OneWayHeroics.rb +1 -2
  190. data/lib/bcdice/game_system/OracleEngine.rb +1 -1
  191. data/lib/bcdice/game_system/OrgaRain.rb +2 -2
  192. data/lib/bcdice/game_system/Paradiso.rb +1 -1
  193. data/lib/bcdice/game_system/Paranoia.rb +1 -1
  194. data/lib/bcdice/game_system/ParanoiaRebooted.rb +1 -1
  195. data/lib/bcdice/game_system/ParasiteBlood.rb +1 -1
  196. data/lib/bcdice/game_system/Peekaboo.rb +22 -122
  197. data/lib/bcdice/game_system/Postman.rb +2 -2
  198. data/lib/bcdice/game_system/PulpCthulhu.rb +3 -3
  199. data/lib/bcdice/game_system/Raisondetre.rb +2 -2
  200. data/lib/bcdice/game_system/RecordOfLodossWar.rb +1 -1
  201. data/lib/bcdice/game_system/RecordOfSteam.rb +1 -1
  202. data/lib/bcdice/game_system/RokumonSekai2.rb +1 -1
  203. data/lib/bcdice/game_system/RuinBreakers.rb +296 -0
  204. data/lib/bcdice/game_system/Ryutama.rb +1 -1
  205. data/lib/bcdice/game_system/SRS.rb +1 -2
  206. data/lib/bcdice/game_system/SamsaraBallad.rb +1 -1
  207. data/lib/bcdice/game_system/Satasupe.rb +1 -2
  208. data/lib/bcdice/game_system/ScreamHighSchool.rb +2 -2
  209. data/lib/bcdice/game_system/SevenFortressMobius.rb +1 -1
  210. data/lib/bcdice/game_system/ShadowRun5.rb +2 -2
  211. data/lib/bcdice/game_system/SharedFantasia.rb +1 -1
  212. data/lib/bcdice/game_system/ShinMegamiTenseiKakuseihen.rb +1 -1
  213. data/lib/bcdice/game_system/ShinkuuGakuen.rb +2 -2
  214. data/lib/bcdice/game_system/ShinobiGami.rb +1 -2
  215. data/lib/bcdice/game_system/ShoujoTenrankai.rb +2 -2
  216. data/lib/bcdice/game_system/Skynauts.rb +1 -1
  217. data/lib/bcdice/game_system/SteamPunkers.rb +1 -1
  218. data/lib/bcdice/game_system/StellarKnights.rb +1 -2
  219. data/lib/bcdice/game_system/SterileLife.rb +1 -1
  220. data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -2
  221. data/lib/bcdice/game_system/StratoShout.rb +44 -247
  222. data/lib/bcdice/game_system/StratoShout_Korean.rb +6 -282
  223. data/lib/bcdice/game_system/Strave.rb +2 -2
  224. data/lib/bcdice/game_system/SwordWorld.rb +8 -9
  225. data/lib/bcdice/game_system/SwordWorld2_0.rb +2 -3
  226. data/lib/bcdice/game_system/SwordWorld2_5.rb +2 -3
  227. data/lib/bcdice/game_system/TherapieSein.rb +1 -1
  228. data/lib/bcdice/game_system/TokumeiTenkousei.rb +1 -1
  229. data/lib/bcdice/game_system/TokyoGhostResearch.rb +2 -2
  230. data/lib/bcdice/game_system/Torg.rb +2 -2
  231. data/lib/bcdice/game_system/Torg1_5.rb +1 -1
  232. data/lib/bcdice/game_system/TorgEternity.rb +1 -1
  233. data/lib/bcdice/game_system/TrinitySeven.rb +1 -1
  234. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +1 -1
  235. data/lib/bcdice/game_system/TwilightGunsmoke.rb +1 -2
  236. data/lib/bcdice/game_system/UnsungDuet.rb +139 -0
  237. data/lib/bcdice/game_system/Utakaze.rb +1 -1
  238. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +1 -1
  239. data/lib/bcdice/game_system/Villaciel.rb +1 -2
  240. data/lib/bcdice/game_system/Warhammer.rb +1 -1
  241. data/lib/bcdice/game_system/Warhammer4.rb +329 -0
  242. data/lib/bcdice/game_system/WitchQuest.rb +1 -1
  243. data/lib/bcdice/game_system/WorldOfDarkness.rb +1 -1
  244. data/lib/bcdice/game_system/YankeeYogSothoth.rb +15 -15
  245. data/lib/bcdice/game_system/YearZeroEngine.rb +1 -1
  246. data/lib/bcdice/game_system/ZettaiReido.rb +1 -1
  247. data/lib/bcdice/game_system/filled_with/cook_tables.rb +119 -0
  248. data/lib/bcdice/game_system/filled_with/lot_tables.rb +155 -0
  249. data/lib/bcdice/loader.rb +6 -8
  250. data/lib/bcdice/preprocessor.rb +15 -40
  251. data/lib/bcdice/repl.rb +1 -1
  252. data/lib/bcdice/result.rb +83 -0
  253. data/lib/bcdice/translate.rb +11 -0
  254. data/lib/bcdice/version.rb +1 -1
  255. metadata +80 -4
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "bcdice/game_system/Cthulhu"
4
+
3
5
  module BCDice
4
6
  module GameSystem
5
- class Cthulhu_Korean < Base
7
+ class Cthulhu_Korean < Cthulhu
6
8
  # ゲームシステムの識別子
7
9
  ID = 'Cthulhu:Korean'
8
10
 
@@ -45,195 +47,12 @@ module BCDice
45
47
  위와 동일
46
48
  INFO_MESSAGE_TEXT
47
49
 
48
- register_prefix(['CC(B)?\(\d+\)', 'CC(B)?.*', 'RES(B)?.*', 'CBR(B)?\(\d+,\d+\)'])
50
+ register_prefix_from_super_class()
49
51
 
50
52
  def initialize(command)
51
53
  super(command)
52
- @special_percentage = 20
53
- @critical_percentage = 1
54
- @fumble_percentage = 1
55
- end
56
-
57
- def eval_game_system_specific_command(command)
58
- case command
59
- when /CCB/i
60
- # 5%
61
- @critical_percentage = 5
62
- @fumble_percentage = 5
63
- return getCheckResult(command)
64
- when /CC/i
65
- # 1%
66
- @critical_percentage = 1
67
- @fumble_percentage = 1
68
- return getCheckResult(command)
69
- when /RESB/i
70
- # 5%
71
- @critical_percentage = 5
72
- @fumble_percentage = 5
73
- return getRegistResult(command)
74
- when /CBRB/i
75
- # 5%
76
- @critical_percentage = 5
77
- @fumble_percentage = 5
78
- return getCombineRoll(command)
79
- when /RES/i
80
- # 1%
81
- @critical_percentage = 1
82
- @fumble_percentage = 1
83
- return getRegistResult(command)
84
- when /CBR/i
85
- # 1%
86
- @critical_percentage = 1
87
- @fumble_percentage = 1
88
- return getCombineRoll(command)
89
- end
90
-
91
- return nil
92
- end
93
-
94
- def getCheckResult(command)
95
- broken_num = 0
96
- diff = 0
97
-
98
- if (m = /CC(B)?(\d+)<=(\d+)/i.match(command))
99
- # /\(\d+\)/의()는 pattern-killer로 해석되는 듯 함
100
- broken_num = m[2].to_i
101
- diff = m[3].to_i
102
- elsif (m = /CC(B)?<=(\d+)/i.match(command))
103
- diff = m[2].to_i
104
- end
105
-
106
- output = ""
107
-
108
- if diff > 0
109
- output = "(1D100<=#{diff})"
110
-
111
- if broken_num > 0
112
- output += " 고장넘버[#{broken_num}]"
113
- end
114
-
115
- total_n = @randomizer.roll_once(100)
116
-
117
- output += " > #{total_n}"
118
- output += " > #{getCheckResultText(total_n, diff, broken_num)}"
119
- else
120
- # 1D100단순 치환 취급
121
- # 필요없을지도
122
- total_n = @randomizer.roll_once(100)
123
- output = "(1D100) > #{total_n}"
124
- end
125
-
126
- return output
127
- end
128
-
129
- def getCheckResultText(total_n, diff, broken_num = 0)
130
- result = ""
131
- diff_special = 0
132
- fumble = false
133
-
134
- if @special_percentage > 0
135
- # special의 값설정이 없는 경우 크리티컬/펌블 판정도 없다
136
- diff_special = (diff * @special_percentage / 100).floor
137
- if diff_special < 1
138
- diff_special = 1
139
- end
140
- end
141
-
142
- if (total_n <= diff) && (total_n < 100)
143
- result = "성공"
144
-
145
- if diff_special > 0
146
- if total_n <= @critical_percentage
147
- if total_n <= diff_special
148
- result = "크리티컬/스페셜"
149
- else
150
- result = "크리티컬"
151
- end
152
- else
153
- if total_n <= diff_special
154
- result = "스페셜"
155
- end
156
- end
157
- end
158
- else
159
- result = "실패"
160
-
161
- if diff_special > 0
162
- if (total_n >= (101 - @fumble_percentage)) && (diff < 100)
163
- result = "펌블"
164
- fumble = true
165
- end
166
- end
167
- end
168
-
169
- if broken_num > 0
170
- if total_n >= broken_num
171
- if fumble
172
- result += "/고장"
173
- else
174
- result = "고장"
175
- end
176
- end
177
- end
178
-
179
- return result
180
- end
181
-
182
- def getRegistResult(command)
183
- m = /RES(B)?([-\d]+)/i.match(command)
184
- unless m
185
- return "1"
186
- end
187
-
188
- value = m[2].to_i
189
- target = value * 5 + 50
190
-
191
- if target < 5
192
- return "(1d100<=#{target}) > 자동실패"
193
- end
194
-
195
- if target > 95
196
- return "(1d100<=#{target}) > 자동성공"
197
- end
198
-
199
- # 통상판정
200
- total_n = @randomizer.roll_once(100)
201
- result = getCheckResultText(total_n, target)
202
-
203
- return "(1d100<=#{target}) > #{total_n} > #{result}"
204
- end
205
-
206
- def getCombineRoll(command)
207
- m = /CBR(B)?\((\d+),(\d+)\)/i.match(command)
208
- unless m
209
- return "1"
210
- end
211
-
212
- diff_1 = m[2].to_i
213
- diff_2 = m[3].to_i
214
-
215
- total = @randomizer.roll_once(100)
216
-
217
- result_1 = getCheckResultText(total, diff_1)
218
- result_2 = getCheckResultText(total, diff_2)
219
-
220
- successList = ["크리티컬/스페셜", "크리티컬", "스페셜", "성공"]
221
-
222
- succesCount = 0
223
- succesCount += 1 if successList.include?(result_1)
224
- succesCount += 1 if successList.include?(result_2)
225
- debug("succesCount", succesCount)
226
-
227
- rank =
228
- if succesCount >= 2
229
- "성공"
230
- elsif succesCount == 1
231
- "부분적 성공"
232
- else
233
- "실패"
234
- end
235
54
 
236
- return "(1d100<=#{diff_1},#{diff_2}) > #{total}[#{result_1},#{result_2}] > #{rank}"
55
+ @locale = :ko_kr
237
56
  end
238
57
  end
239
58
  end
@@ -29,7 +29,7 @@ module BCDice
29
29
   例)BT1   BT2   BT[1...3]
30
30
  INFO_MESSAGE_TEXT
31
31
 
32
- register_prefix(['DB.*', 'BT.*', '3R6.*'])
32
+ register_prefix('DB.*', 'BT.*', '3R6.*')
33
33
 
34
34
  def replace_text(string)
35
35
  return string unless string =~ /DB/i
@@ -78,13 +78,17 @@ module BCDice
78
78
  diff = m[9].to_i
79
79
  end
80
80
 
81
- total, out_str, dice_list = get_dice(mod, abl, skl)
81
+ total, out_str = get_dice(mod, abl, skl)
82
82
  output = "(#{string}) > #{out_str}"
83
83
 
84
84
  if signOfInequality != "" # 成功度判定処理
85
- dice_total = dice_list.inject(&:+)
86
85
  cmp_op = Normalize.comparison_operator(signOfInequality)
87
- output += check_result(total, dice_total, dice_list, 6, cmp_op, diff)
86
+ output +=
87
+ if total.send(cmp_op, diff)
88
+ " > 成功"
89
+ else
90
+ " > 失敗"
91
+ end
88
92
  end
89
93
 
90
94
  return output
@@ -126,7 +130,7 @@ module BCDice
126
130
 
127
131
  output = "#{total}[#{dice_str}]#{resultText}"
128
132
 
129
- return total, output, dice_arr
133
+ return total, output
130
134
  end
131
135
 
132
136
  def eval_game_system_specific_command(command)
@@ -17,7 +17,8 @@ module BCDice
17
17
  ・判定
18
18
  スペシャル/ファンブル/成功/失敗を判定
19
19
  ・各種表
20
- RTT ランダム特技決定表
20
+ RTTn ランダム特技決定表(n:分野番号、省略可能)
21
+ RCT ランダム分野決定表
21
22
  ABRT アビリティ決定表
22
23
  DT ダメージ表
23
24
  FT 失敗表
@@ -46,7 +47,6 @@ module BCDice
46
47
 
47
48
  def initialize(command)
48
49
  super(command)
49
- @enabled_d66 = true
50
50
  @d66_sort_type = D66SortType::ASC
51
51
  end
52
52
 
@@ -67,20 +67,22 @@ module BCDice
67
67
  end
68
68
 
69
69
  def eval_game_system_specific_command(command)
70
- roll_tables(command, TABLES)
70
+ roll_tables(command, TABLES) ||
71
+ RTT.roll_command(randomizer, command)
71
72
  end
72
-
73
+ RTT = DiceTable::SaiFicSkillTable.new(
74
+ [
75
+ ['背景', ['呪い', '絶望', '孤児', '死別', '一般人', '獲物', '憧れ', '友人', '挑戦者', '血縁', '永遠']],
76
+ ['仕事', ['脅迫', '捨てる', '拉致', '盗む', 'ハッキング', '侵入', '変装', 'だます', '隠す', 'のぞく', '聞き出す']],
77
+ ['捜索', ['トイレ', '食事', '自然', '運動施設', '街', '友愛会', '暗部', '史跡', '文化施設', '温泉', '宿泊']],
78
+ ['趣味', ['お酒', 'グルメ', 'ダンス', 'スポーツ', '健康', 'ファッション', '恋愛', 'フェス', '音楽', '物語', '学問']],
79
+ ['雰囲気', ['だらしない', 'のんびり', '暖かい', '明るい', '甘い', '普通', '洗練', '渋い', '静か', '真面目', '冷たい']],
80
+ ['戦闘法', ['忍術', '古武術', '剣術', '棒術', '拳法', 'ケンカ', '総合格闘技', 'レスリング', '軍隊格闘術', '射撃', '弓術']],
81
+ ],
82
+ rtt_format: "ランダム指定特技表(%<category_dice>d,%<row_dice>d) > %<category_name>s《%<skill_name>s》"
83
+ )
73
84
  TABLES = {
74
- "RTT" => DiceTable::SaiFicSkillTable.new(
75
- [
76
- ['背景', ['呪い', '絶望', '孤児', '死別', '一般人', '獲物', '憧れ', '友人', '挑戦者', '血縁', '永遠']],
77
- ['仕事', ['脅迫', '捨てる', '拉致', '盗む', 'ハッキング', '侵入', '変装', 'だます', '隠す', 'のぞく', '聞き出す']],
78
- ['捜索', ['トイレ', '食事', '自然', '運動施設', '街', '友愛会', '暗部', '史跡', '文化施設', '温泉', '宿泊']],
79
- ['趣味', ['お酒', 'グルメ', 'ダンス', 'スポーツ', '健康', 'ファッション', '恋愛', 'フェス', '音楽', '物語', '学問']],
80
- ['雰囲気', ['だらしない', 'のんびり', '暖かい', '明るい', '甘い', '普通', '洗練', '渋い', '静か', '真面目', '冷たい']],
81
- ['戦闘法', ['忍術', '古武術', '剣術', '棒術', '拳法', 'ケンカ', '総合格闘技', 'レスリング', '軍隊格闘術', '射撃', '弓術']],
82
- ]
83
- ),
85
+
84
86
  "ABRT" => DiceTable::D66Table.new(
85
87
  "アビリティ決定表",
86
88
  D66SortType::ASC,
@@ -419,7 +421,7 @@ module BCDice
419
421
  ),
420
422
  }.freeze
421
423
 
422
- register_prefix(['RTT'] + TABLES.keys)
424
+ register_prefix(RTT.prefixes, TABLES.keys)
423
425
  end
424
426
  end
425
427
  end
@@ -25,7 +25,7 @@ module BCDice
25
25
    DS+2@10 → 2D6+2で目標値10の判定
26
26
  MESSAGETEXT
27
27
 
28
- register_prefix(['(\d+)?(A)?DS([-+\d]*)(@\d+)?'])
28
+ register_prefix('(\d+)?(A)?DS([-+\d]*)(@\d+)?')
29
29
 
30
30
  def eval_game_system_specific_command(command)
31
31
  return nil unless (m = /(\d+)?(A)?DS([-+\d]*)(@(\d+))?$/i.match(command.upcase))
@@ -32,12 +32,12 @@ module BCDice
32
32
  ・リアルネームチャート 日本(RNCJ)、海外(RNCO)
33
33
  INFO_MESSAGE_TEXT
34
34
 
35
- register_prefix([
35
+ register_prefix(
36
36
  'DLH\\d+([\\+\\-]\\d+)*',
37
37
  'DC(L|S|C)\d+',
38
38
  'RNC[JO]',
39
39
  'HNC'
40
- ])
40
+ )
41
41
 
42
42
  def eval_game_system_specific_command(command)
43
43
  case command
@@ -28,13 +28,12 @@ module BCDice
28
28
  ・D66ダイスあり
29
29
  INFO_MESSAGE_TEXT
30
30
 
31
- register_prefix(['[NAMUC]?URGE\d+'])
31
+ register_prefix('[NAMUC]?URGE\d+')
32
32
 
33
33
  def initialize(command)
34
34
  super(command)
35
35
 
36
36
  @sort_add_dice = true
37
- @enabled_d66 = true
38
37
  @d66_sort_type = D66SortType::NO_SORT
39
38
  end
40
39
 
@@ -26,19 +26,12 @@ module BCDice
26
26
  ・気力バッドエンド表 WBET (WillBadEndTable)
27
27
  INFO_MESSAGE_TEXT
28
28
 
29
- register_prefix([
30
- '\d+DS.*', '\d+JD.*',
31
- 'SST', 'StrengthStigmaTable',
32
- 'WST', 'WillStigmaTable',
33
- 'SBET', 'StrengthBadEndTable',
34
- 'WBET', 'WillBadEndTable'
35
- ])
29
+ register_prefix('\d+DS', '\d+JD')
36
30
 
37
31
  def initialize(command)
38
32
  super(command)
39
33
 
40
34
  @sort_add_dice = true
41
- @enabled_d66 = true
42
35
  @d66_sort_type = D66SortType::ASC
43
36
  end
44
37
 
@@ -46,31 +39,32 @@ module BCDice
46
39
  debug("eval_game_system_specific_command begin string", command)
47
40
 
48
41
  result = checkRoll(command)
49
- return result unless result.empty?
42
+ return result if result
50
43
 
51
44
  result = checkJudgeValue(command)
52
- return result unless result.empty?
45
+ return result if result
53
46
 
54
47
  debug("各種表として処理")
55
- return rollTableCommand(command)
48
+ return roll_tables(ALIAS[command] || command, self.class::TABLES)
56
49
  end
57
50
 
58
51
  # 通常判定 xDS or xDSy or xDS>=z or xDSy>=z
59
52
  def checkRoll(string)
60
53
  debug("checkRoll begin string", string)
61
54
 
62
- return '' unless /^(\d+)DS(\d+)?((>=)(\d+))?$/i =~ string
63
-
64
- target = 8
55
+ m = /^(\d+)DS(\d+)?(?:>=(\d+))?$/i.match(string)
56
+ unless m
57
+ return nil
58
+ end
65
59
 
66
- skill = Regexp.last_match(1).to_i
67
- flag = Regexp.last_match(2).to_i
68
- target = Regexp.last_match(5).to_i unless Regexp.last_match(5).nil?
60
+ skill = m[1].to_i
61
+ flag = m[2].to_i
62
+ target = m[3]&.to_i || 8
69
63
 
70
- result = "判定! スキルレベル:#{skill} フラグ:#{flag} 目標値:#{target}"
64
+ result = translate("DetatokoSaga.DS.input_options", skill: skill, flag: flag, target: target)
71
65
 
72
66
  total, rollText = getRollResult(skill)
73
- result += " > #{total}[#{rollText}] > 判定値:#{total}"
67
+ result += " > #{total}[#{rollText}] > " + translate("DetatokoSaga.total_value", total: total)
74
68
 
75
69
  success = getSuccess(total, target)
76
70
  result += " > #{success}"
@@ -97,10 +91,10 @@ module BCDice
97
91
 
98
92
  def getSuccess(check, target)
99
93
  if check >= target
100
- return "目標値以上!【成功】"
94
+ translate("DetatokoSaga.DS.success")
95
+ else
96
+ translate("DetatokoSaga.DS.failure")
101
97
  end
102
-
103
- return "目標値未満…【失敗】"
104
98
  end
105
99
 
106
100
  def getCheckFlagResult(total, flag)
@@ -108,11 +102,8 @@ module BCDice
108
102
  return ""
109
103
  end
110
104
 
111
- willText = getDownWill(flag)
112
- result = "、フラグ以下!【気力#{willText}点減少】"
113
- result += "【判定値変更不可】"
114
-
115
- return result
105
+ will = getDownWill(flag)
106
+ return translate("DetatokoSaga.less_than_flag", will: will)
116
107
  end
117
108
 
118
109
  def getDownWill(flag)
@@ -128,17 +119,20 @@ module BCDice
128
119
  def checkJudgeValue(string)
129
120
  debug("checkJudgeValue begin string", string)
130
121
 
131
- return '' unless %r{^(\d+)JD(\d+)?(([+]|[-]|[/])(\d+))?$}i =~ string
122
+ m = %r{^(\d+)JD(\d+)?(([+-/])(\d+))?$}i.match(string)
123
+ unless m
124
+ return nil
125
+ end
132
126
 
133
- skill = Regexp.last_match(1).to_i
134
- flag = Regexp.last_match(2).to_i
135
- operator = Regexp.last_match(4)
136
- value = Regexp.last_match(5).to_i
127
+ skill = m[1].to_i
128
+ flag = m[2].to_i
129
+ operator = m[4]
130
+ value = m[5].to_i
137
131
 
138
- result = "判定! スキルレベル:#{skill} フラグ:#{flag}"
132
+ result = translate("DetatokoSaga.JD.input_options", skill: skill, flag: flag)
139
133
 
140
134
  modifyText = getModifyText(operator, value)
141
- result += " 修正値:#{modifyText}" unless modifyText.empty?
135
+ result += translate("DetatokoSaga.JD.modifier", modifier: modifyText) unless modifyText.empty?
142
136
 
143
137
  total, rollText = getRollResult(skill)
144
138
  result += " > #{total}[#{rollText}]#{modifyText}"
@@ -172,139 +166,44 @@ module BCDice
172
166
  def getTotalResultValue(total, value, operator)
173
167
  case operator
174
168
  when "+"
175
- return "#{total}+#{value} > 判定値:#{total + value}"
169
+ return "#{total}+#{value} > " + translate("DetatokoSaga.total_value", total: total + value)
176
170
  when "-"
177
- return "#{total}-#{value} > 判定値:#{total - value}"
171
+ return "#{total}-#{value} > " + translate("DetatokoSaga.total_value", total: total - value)
178
172
  when "/"
179
173
  return getTotalResultValueWhenSlash(total, value)
180
174
  else
181
- return "判定値:#{total}"
175
+ return translate("DetatokoSaga.total_value", total: total)
182
176
  end
183
177
  end
184
178
 
185
179
  def getTotalResultValueWhenSlash(total, value)
186
- return "0では割れません" if value == 0
180
+ return translate("DetatokoSaga.division_by_zero_error") if value == 0
187
181
 
188
182
  quotient = ((1.0 * total) / value).ceil
189
183
 
190
- result = "#{total}÷#{value} > 判定値:#{quotient}"
184
+ result = "#{total}÷#{value} > " + translate("DetatokoSaga.total_value", total: quotient)
191
185
  return result
192
186
  end
193
187
 
194
- ####################
195
- # 各種表
196
-
197
- def rollTableCommand(command)
198
- command = command.upcase
199
-
200
- debug("eval_game_system_specific_command command", command)
188
+ ALIAS = {
189
+ "StrengthStigmaTable" => "SST",
190
+ "WillStigmaTable" => "WST",
191
+ "StrengthBadEndTable" => "SBET",
192
+ "WillBadEndTable" => "WBET",
193
+ }.transform_keys(&:upcase).freeze
201
194
 
202
- name = ''
203
- text = ''
204
- total = 0
205
-
206
- case command.upcase
207
- when "SST", "StrengthStigmaTable".upcase
208
- name, text, total = choiceStrengthStigmaTable()
209
- when "WST", "WillStigmaTable".upcase
210
- name, text, total = choiceWillStigmaTable()
211
- when "SBET", "StrengthBadEndTable".upcase
212
- name, text, total = choiceStrengthBadEndTable()
213
- when "WBET", "WillBadEndTable".upcase
214
- name, text, total = choiceWillBadEndTable()
215
- else
216
- return
217
- end
218
-
219
- result = "#{name}(#{total}) > #{text}"
220
-
221
- return result
222
- end
223
-
224
- # ##表一覧
225
-
226
- def choiceStrengthStigmaTable()
227
- name = "体力烙印表"
228
- table = [
229
- 'あなたは【烙印】を2つ受ける。この表をさらに2回振って受ける【烙印】を決める(その結果、再びこの出目が出ても【烙印】は増えない)。',
230
- '【痛手】手負い傷を負った。何とか戦えているが……。',
231
- '【流血】血があふれ出し、目がかすむ……。',
232
- '【衰弱】体が弱り、その心さえも萎えてしまいそうだ……。',
233
- '【苦悶】痛みと苦しみ、情けなさ。目に涙がにじむ。',
234
- '【衝撃】吹き飛ばされ、壁や樹木にめりこむ。早く起き上がらねば。',
235
- '【疲労】あなたの顔に疲労の色が強まる……この戦いがつらくなってきた。',
236
- '【怒号】うっとうしい攻撃に怒りの叫びを放つ。怒りが戦いを迷わせるか?',
237
- '【負傷】手傷を負わされた……。',
238
- '【軽症】あなたの肌に傷が残った。これだけなら何ということもない。',
239
- '奇跡的にあなたは【烙印】を受けなかった。'
240
- ]
241
-
242
- text, total = get_table_by_2d6(table)
243
- return name, text, total
195
+ def self.translate_tables(locale)
196
+ {
197
+ "SST" => DiceTable::Table.from_i18n("DetatokoSaga.table.SST", locale),
198
+ "WST" => DiceTable::Table.from_i18n("DetatokoSaga.table.WST", locale),
199
+ "SBET" => DiceTable::Table.from_i18n("DetatokoSaga.table.SBET", locale),
200
+ "WBET" => DiceTable::Table.from_i18n("DetatokoSaga.table.WBET", locale),
201
+ }
244
202
  end
245
203
 
246
- def choiceWillStigmaTable()
247
- name = "気力烙印表"
248
-
249
- table = [
250
- 'あなたは【烙印】を2つ受ける。この表をさらに2回振って受ける【烙印】を決める(その結果、再びこの出目が出ても【烙印】は増えない)。',
251
- '【絶望】どうしようもない状況。希望は失われ……膝を付くことしかできない。',
252
- '【号泣】あまりの理不尽に、子供のように泣き叫ぶことしかできない。',
253
- '【後悔】こんなはずじゃなかったのに。しかし現実は非情だった。',
254
- '【恐怖】恐怖に囚われてしまった!敵が、己の手が、恐ろしくてならない!',
255
- '【葛藤】本当にこれでいいのか?何度も自身への問いかけが起こる……。',
256
- '【憎悪】怒りと憎しみに囚われたあなたは、本来の力を発揮できるだろうか?',
257
- '【呆然】これは現実なのか?ぼんやりとしながらあなたは考える。',
258
- '【迷い】迷いを抱いてしまった。それは戦う意志を鈍らせるだろうか?',
259
- '【悪夢】これから時折、あなたはこの時を悪夢に見ることだろう。',
260
- '奇跡的にあなたは【烙印】を受けなかった。'
261
- ]
262
-
263
- text, total = get_table_by_2d6(table)
264
- return name, text, total
265
- end
204
+ TABLES = translate_tables(:ja_jp).freeze
266
205
 
267
- def choiceStrengthBadEndTable()
268
- name = "体力バッドエンド表"
269
-
270
- table = [
271
- '【死亡】あなたは死んだ。次のセッションに参加するには、クラス1つを『モンスター』か『暗黒』にクラスチェンジしなくてはいけない。',
272
- '【命乞】あなたは恐怖に駆られ、命乞いをしてしまった!次のセッション開始時に、クラス1つが『ザコ』に変更される!',
273
- '【忘却】あなたは記憶を失い、ぼんやりと立ち尽くす。次のセッションに参加するには、クラス1つを変更しなくてはならない。',
274
- '【悲劇】あなたの攻撃は敵ではなく味方を撃った!全てが終わるまであなたは立ち尽くしていた。任意の味方の【体力】を1D6点減少させる。',
275
- '【暴走】あなたは正気を失い、衝動のまま暴走する!同じシーンにいる全員の【体力】を1D6点減少させる。',
276
- '【転落】あなたは断崖絶壁から転落した。',
277
- '【虜囚】あなたは敵に囚われた。',
278
- '【逃走】あなたは恐れをなし、仲間を見捨てて逃げ出した。',
279
- '【重症】あなたはどうしようもない痛手を負い、倒れた。',
280
- '【気絶】あなたは気を失った。そして目覚めれば全てが終わっていた。',
281
- 'それでもまだ立ち上がる!あなたはバッドエンドを迎えなかった。体力の【烙印】を1つ打ち消してよい。'
282
- ]
283
-
284
- text, total = get_table_by_2d6(table)
285
- return name, text, total
286
- end
287
-
288
- def choiceWillBadEndTable()
289
- name = "気力バッドエンド表"
290
-
291
- table = [
292
- '【自害】あなたは自ら死を選んだ。次のセッションに参加するには、クラス1つを『暗黒』にクラスチェンジしなくてはいけない。',
293
- '【堕落】あなたは心の中の闇に飲まれた。次のセッション開始時に、クラス1つが『暗黒』か『モンスター』に変更される!',
294
- '【隷属】あなたは敵の言うことに逆らえない。次のセッションであなたのスタンスは『従属』になる。',
295
- '【裏切】裏切りの衝動。任意の味方の【体力】を1D6点減少させ、その場から逃げ出す。',
296
- '【暴走】あなたは正気を失い、衝動のまま暴走する!同じシーンにいる全員の【体力】を1D6点減少させる。',
297
- '【呪い】心の闇が顕在化したのか。敵の怨嗟か。呪いに蝕まれたあなたは、のたうちまわることしかできない。',
298
- '【虜囚】あなたは敵に囚われ、その場から連れ去られる。',
299
- '【逃走】あなたは恐れをなし、仲間を見捨てて逃げ出した。',
300
- '【放心】あなたはただぼんやりと立ち尽くすしかなかった。我に返った時、全ては終わっていた。',
301
- '【気絶】あなたは気を失った。そして目覚めれば全てが終わっていた。',
302
- 'それでもまだ諦めない!あなたはバッドエンドを迎えなかった。あなたは気力の【烙印】を1つ打ち消してよい。'
303
- ]
304
-
305
- text, total = get_table_by_2d6(table)
306
- return name, text, total
307
- end
206
+ register_prefix(TABLES.keys, ALIAS.keys)
308
207
  end
309
208
  end
310
209
  end