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

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