bcdice 3.0.0.pre.alpha.1 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (316) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +70 -0
  3. data/README.md +34 -7
  4. data/i18n/Amadeus/ja_jp.yml +386 -0
  5. data/i18n/Amadeus/ko_kr.yml +148 -0
  6. data/i18n/Cthulhu/ja_jp.yml +11 -0
  7. data/i18n/Cthulhu/ko_kr.yml +11 -0
  8. data/i18n/Cthulhu/zh_hant.yml +11 -0
  9. data/i18n/DetatokoSaga/ja_jp.yml +75 -0
  10. data/i18n/DetatokoSaga/ko_kr.yml +75 -0
  11. data/i18n/DoubleCross/ja_jp.yml +53 -0
  12. data/i18n/DoubleCross/ko_kr.yml +53 -0
  13. data/i18n/Dracurouge/ja_jp.yml +1374 -0
  14. data/i18n/Dracurouge/ko_kr.yml +295 -0
  15. data/i18n/Fiasco/ja_jp.yml +10 -0
  16. data/i18n/Fiasco/ko_kr.yml +10 -0
  17. data/i18n/FutariSousa/ja_jp.yml +720 -0
  18. data/i18n/FutariSousa/ko_kr.yml +746 -0
  19. data/i18n/Insane/ja_jp.yml +454 -0
  20. data/i18n/Insane/ko_kr.yml +502 -0
  21. data/i18n/Kamigakari/ja_jp.yml +276 -0
  22. data/i18n/Kamigakari/ko_kr.yml +204 -0
  23. data/i18n/KillDeathBusiness/ja_jp.yml +1092 -0
  24. data/i18n/KillDeathBusiness/ko_kr.yml +1063 -0
  25. data/i18n/LogHorizon/ja_jp.yml +3082 -0
  26. data/i18n/LogHorizon/ko_kr.yml +923 -0
  27. data/i18n/MagicaLogia/ja_jp.yml +564 -0
  28. data/i18n/MagicaLogia/ko_kr.yml +564 -0
  29. data/i18n/MonotoneMuseum/ja_jp.yml +561 -0
  30. data/i18n/MonotoneMuseum/ko_kr.yml +89 -0
  31. data/i18n/Nechronica/ja_jp.yml +57 -0
  32. data/i18n/Nechronica/ko_kr.yml +14 -0
  33. data/i18n/StratoShout/ja_jp.yml +160 -0
  34. data/i18n/StratoShout/ko_kr.yml +160 -0
  35. data/i18n/ja_jp.yml +5 -0
  36. data/i18n/ko_kr.yml +7 -0
  37. data/i18n/zh_hant.yml +3 -0
  38. data/lib/bcdice.rb +4 -1
  39. data/lib/bcdice/arithmetic.rb +22 -0
  40. data/lib/bcdice/arithmetic/node.rb +223 -0
  41. data/lib/bcdice/arithmetic/parser.rb +240 -0
  42. data/lib/bcdice/arithmetic_evaluator.rb +7 -156
  43. data/lib/bcdice/base.rb +94 -101
  44. data/lib/bcdice/command/lexer.rb +57 -0
  45. data/lib/bcdice/command/parsed.rb +65 -0
  46. data/lib/bcdice/command/parser.rb +489 -0
  47. data/lib/bcdice/common_command.rb +4 -0
  48. data/lib/bcdice/common_command/add_dice.rb +8 -42
  49. data/lib/bcdice/common_command/add_dice/node.rb +221 -72
  50. data/lib/bcdice/common_command/add_dice/parser.rb +391 -274
  51. data/lib/bcdice/common_command/add_dice/randomizer.rb +27 -33
  52. data/lib/bcdice/common_command/barabara_dice.rb +8 -47
  53. data/lib/bcdice/common_command/barabara_dice/node.rb +92 -0
  54. data/lib/bcdice/common_command/barabara_dice/parser.rb +336 -0
  55. data/lib/bcdice/common_command/barabara_dice/result.rb +22 -0
  56. data/lib/bcdice/common_command/calc.rb +9 -30
  57. data/lib/bcdice/common_command/calc/node.rb +39 -0
  58. data/lib/bcdice/common_command/calc/parser.rb +271 -0
  59. data/lib/bcdice/common_command/choice.rb +137 -19
  60. data/lib/bcdice/common_command/d66_dice.rb +52 -34
  61. data/lib/bcdice/common_command/lexer.rb +47 -0
  62. data/lib/bcdice/common_command/repeat.rb +102 -0
  63. data/lib/bcdice/common_command/reroll_dice.rb +8 -158
  64. data/lib/bcdice/common_command/reroll_dice/node.rb +198 -0
  65. data/lib/bcdice/common_command/reroll_dice/parser.rb +421 -0
  66. data/lib/bcdice/common_command/upper_dice.rb +12 -129
  67. data/lib/bcdice/common_command/upper_dice/node.rb +181 -0
  68. data/lib/bcdice/common_command/upper_dice/parser.rb +433 -0
  69. data/lib/bcdice/common_command/version.rb +11 -17
  70. data/lib/bcdice/deprecated/checker.rb +78 -0
  71. data/lib/bcdice/dice_table.rb +3 -0
  72. data/lib/bcdice/dice_table/chain_table.rb +2 -0
  73. data/lib/bcdice/dice_table/d66_grid_table.rb +10 -0
  74. data/lib/bcdice/dice_table/d66_parity_table.rb +36 -0
  75. data/lib/bcdice/dice_table/d66_range_table.rb +2 -0
  76. data/lib/bcdice/dice_table/d66_table.rb +12 -0
  77. data/lib/bcdice/dice_table/roll_result.rb +2 -0
  78. data/lib/bcdice/dice_table/sai_fic_skill_table.rb +75 -17
  79. data/lib/bcdice/dice_table/sai_fic_skill_table/category.rb +25 -0
  80. data/lib/bcdice/dice_table/sai_fic_skill_table/skill.rb +23 -0
  81. data/lib/bcdice/dice_table/table.rb +10 -0
  82. data/lib/bcdice/enum.rb +2 -0
  83. data/lib/bcdice/format.rb +2 -0
  84. data/lib/bcdice/game_system.rb +17 -1
  85. data/lib/bcdice/game_system/AFF2e.rb +1 -1
  86. data/lib/bcdice/game_system/AceKillerGene.rb +3 -3
  87. data/lib/bcdice/game_system/Airgetlamh.rb +3 -3
  88. data/lib/bcdice/game_system/AlchemiaStruggle.rb +346 -0
  89. data/lib/bcdice/game_system/Alsetto.rb +1 -1
  90. data/lib/bcdice/game_system/Alshard.rb +1 -2
  91. data/lib/bcdice/game_system/AlterRaise.rb +2 -2
  92. data/lib/bcdice/game_system/Amadeus.rb +47 -508
  93. data/lib/bcdice/game_system/Amadeus_Korean.rb +12 -456
  94. data/lib/bcdice/game_system/AngelGear.rb +123 -0
  95. data/lib/bcdice/game_system/AnimaAnimus.rb +2 -6
  96. data/lib/bcdice/game_system/Arianrhod.rb +0 -1
  97. data/lib/bcdice/game_system/ArsMagica.rb +1 -1
  98. data/lib/bcdice/game_system/Avandner.rb +1 -1
  99. data/lib/bcdice/game_system/BBN.rb +7 -5
  100. data/lib/bcdice/game_system/BadLife.rb +2 -2
  101. data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
  102. data/lib/bcdice/game_system/BeastBindTrinity.rb +3 -13
  103. data/lib/bcdice/game_system/BeginningIdol.rb +6 -7
  104. data/lib/bcdice/game_system/BeginningIdol_Korean.rb +6 -7
  105. data/lib/bcdice/game_system/BladeOfArcana.rb +6 -6
  106. data/lib/bcdice/game_system/BlindMythos.rb +12 -10
  107. data/lib/bcdice/game_system/BloodCrusade.rb +54 -81
  108. data/lib/bcdice/game_system/BloodMoon.rb +43 -3
  109. data/lib/bcdice/game_system/CardRanker.rb +24 -65
  110. data/lib/bcdice/game_system/ChaosFlare.rb +4 -4
  111. data/lib/bcdice/game_system/Chill.rb +1 -1
  112. data/lib/bcdice/game_system/CodeLayerd.rb +37 -67
  113. data/lib/bcdice/game_system/ColossalHunter.rb +3 -4
  114. data/lib/bcdice/game_system/Comes.rb +50 -0
  115. data/lib/bcdice/game_system/CrashWorld.rb +1 -1
  116. data/lib/bcdice/game_system/Cthulhu.rb +99 -98
  117. data/lib/bcdice/game_system/Cthulhu7th.rb +117 -370
  118. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
  119. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
  120. data/lib/bcdice/game_system/CthulhuTech.rb +8 -15
  121. data/lib/bcdice/game_system/Cthulhu_ChineseTraditional.rb +7 -190
  122. data/lib/bcdice/game_system/Cthulhu_Korean.rb +5 -186
  123. data/lib/bcdice/game_system/DarkBlaze.rb +13 -9
  124. data/lib/bcdice/game_system/DarkDaysDrive.rb +17 -15
  125. data/lib/bcdice/game_system/DarkSouls.rb +1 -1
  126. data/lib/bcdice/game_system/DeadlineHeroes.rb +3 -3
  127. data/lib/bcdice/game_system/DemonParasite.rb +1 -2
  128. data/lib/bcdice/game_system/DesperateRun.rb +163 -0
  129. data/lib/bcdice/game_system/DetatokoSaga.rb +69 -152
  130. data/lib/bcdice/game_system/DetatokoSaga_Korean.rb +9 -277
  131. data/lib/bcdice/game_system/DiceBot.rb +22 -4
  132. data/lib/bcdice/game_system/DiceOfTheDead.rb +9 -6
  133. data/lib/bcdice/game_system/DoubleCross.rb +145 -157
  134. data/lib/bcdice/game_system/DoubleCross_Korean.rb +13 -330
  135. data/lib/bcdice/game_system/Dracurouge.rb +376 -1678
  136. data/lib/bcdice/game_system/Dracurouge_Korean.rb +16 -271
  137. data/lib/bcdice/game_system/EarthDawn.rb +1 -1
  138. data/lib/bcdice/game_system/EarthDawn3.rb +1 -1
  139. data/lib/bcdice/game_system/EarthDawn4.rb +1 -1
  140. data/lib/bcdice/game_system/Elysion.rb +5 -6
  141. data/lib/bcdice/game_system/EmbryoMachine.rb +6 -6
  142. data/lib/bcdice/game_system/Emoklore.rb +131 -0
  143. data/lib/bcdice/game_system/EndBreaker.rb +1 -2
  144. data/lib/bcdice/game_system/EtrianOdysseySRS.rb +1 -2
  145. data/lib/bcdice/game_system/Fiasco.rb +87 -70
  146. data/lib/bcdice/game_system/Fiasco_Korean.rb +7 -95
  147. data/lib/bcdice/game_system/FilledWith.rb +465 -569
  148. data/lib/bcdice/game_system/FullMetalPanic.rb +1 -2
  149. data/lib/bcdice/game_system/FutariSousa.rb +103 -938
  150. data/lib/bcdice/game_system/FutariSousa_Korean.rb +7 -948
  151. data/lib/bcdice/game_system/{Gurps.rb → GURPS.rb} +184 -217
  152. data/lib/bcdice/game_system/Garako.rb +140 -39
  153. data/lib/bcdice/game_system/GardenOrder.rb +3 -3
  154. data/lib/bcdice/game_system/GehennaAn.rb +4 -4
  155. data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +1 -1
  156. data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
  157. data/lib/bcdice/game_system/GoldenSkyStories.rb +1 -1
  158. data/lib/bcdice/game_system/Gorilla.rb +1 -1
  159. data/lib/bcdice/game_system/GranCrest.rb +2 -3
  160. data/lib/bcdice/game_system/Gundog.rb +1 -1
  161. data/lib/bcdice/game_system/GundogRevised.rb +4 -4
  162. data/lib/bcdice/game_system/GundogZero.rb +3 -3
  163. data/lib/bcdice/game_system/GurpsFW.rb +4 -8
  164. data/lib/bcdice/game_system/HarnMaster.rb +2 -2
  165. data/lib/bcdice/game_system/HatsuneMiku.rb +2 -3
  166. data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
  167. data/lib/bcdice/game_system/HuntersMoon.rb +17 -111
  168. data/lib/bcdice/game_system/Illusio.rb +27 -36
  169. data/lib/bcdice/game_system/InfiniteBabeL.rb +518 -0
  170. data/lib/bcdice/game_system/Insane.rb +90 -717
  171. data/lib/bcdice/game_system/Insane_Korean.rb +7 -719
  172. data/lib/bcdice/game_system/JekyllAndHyde.rb +42 -0
  173. data/lib/bcdice/game_system/JuinKansen.rb +251 -0
  174. data/lib/bcdice/game_system/Kamigakari.rb +47 -242
  175. data/lib/bcdice/game_system/Kamigakari_Korean.rb +6 -394
  176. data/lib/bcdice/game_system/KanColle.rb +20 -169
  177. data/lib/bcdice/game_system/KemonoNoMori.rb +1 -1
  178. data/lib/bcdice/game_system/KillDeathBusiness.rb +189 -1180
  179. data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +8 -1460
  180. data/lib/bcdice/game_system/KurayamiCrying.rb +1 -1
  181. data/lib/bcdice/game_system/LiveraDoll.rb +2 -2
  182. data/lib/bcdice/game_system/LogHorizon.rb +350 -3379
  183. data/lib/bcdice/game_system/LogHorizon_Korean.rb +55 -1357
  184. data/lib/bcdice/game_system/LostRecord.rb +0 -1
  185. data/lib/bcdice/game_system/LostRoyal.rb +3 -6
  186. data/lib/bcdice/game_system/MagicaLogia.rb +158 -1044
  187. data/lib/bcdice/game_system/MagicaLogia_Korean.rb +66 -0
  188. data/lib/bcdice/game_system/MeikyuDays.rb +2 -3
  189. data/lib/bcdice/game_system/MeikyuKingdom.rb +7 -7
  190. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +7 -8
  191. data/lib/bcdice/game_system/MetalHead.rb +1 -1
  192. data/lib/bcdice/game_system/MetalHeadExtream.rb +7 -7
  193. data/lib/bcdice/game_system/MetallicGuardian.rb +1 -2
  194. data/lib/bcdice/game_system/MonotoneMuseum.rb +41 -241
  195. data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +10 -270
  196. data/lib/bcdice/game_system/NSSQ.rb +159 -0
  197. data/lib/bcdice/game_system/Nechronica.rb +37 -76
  198. data/lib/bcdice/game_system/Nechronica_Korean.rb +11 -128
  199. data/lib/bcdice/game_system/NeverCloud.rb +540 -5
  200. data/lib/bcdice/game_system/NightWizard.rb +2 -2
  201. data/lib/bcdice/game_system/NightWizard3rd.rb +1 -1
  202. data/lib/bcdice/game_system/NightmareHunterDeep.rb +3 -4
  203. data/lib/bcdice/game_system/NinjaSlayer.rb +33 -43
  204. data/lib/bcdice/game_system/NjslyrBattle.rb +1 -1
  205. data/lib/bcdice/game_system/OneWayHeroics.rb +1 -2
  206. data/lib/bcdice/game_system/OracleEngine.rb +14 -18
  207. data/lib/bcdice/game_system/OrgaRain.rb +19 -27
  208. data/lib/bcdice/game_system/Paradiso.rb +3 -3
  209. data/lib/bcdice/game_system/Paranoia.rb +1 -1
  210. data/lib/bcdice/game_system/ParanoiaRebooted.rb +1 -1
  211. data/lib/bcdice/game_system/ParasiteBlood.rb +1 -1
  212. data/lib/bcdice/game_system/Peekaboo.rb +23 -123
  213. data/lib/bcdice/game_system/PhantasmAdventure.rb +0 -4
  214. data/lib/bcdice/game_system/Postman.rb +3 -3
  215. data/lib/bcdice/game_system/PulpCthulhu.rb +3 -3
  216. data/lib/bcdice/game_system/Raisondetre.rb +3 -3
  217. data/lib/bcdice/game_system/RecordOfLodossWar.rb +8 -7
  218. data/lib/bcdice/game_system/RecordOfSteam.rb +1 -1
  219. data/lib/bcdice/game_system/RokumonSekai2.rb +3 -3
  220. data/lib/bcdice/game_system/RuinBreakers.rb +296 -0
  221. data/lib/bcdice/game_system/RyuTuber.rb +6 -4
  222. data/lib/bcdice/game_system/Ryutama.rb +2 -2
  223. data/lib/bcdice/game_system/SRS.rb +1 -7
  224. data/lib/bcdice/game_system/SamsaraBallad.rb +5 -4
  225. data/lib/bcdice/game_system/Satasupe.rb +90 -866
  226. data/lib/bcdice/game_system/ScreamHighSchool.rb +4 -4
  227. data/lib/bcdice/game_system/SevenFortressMobius.rb +1 -1
  228. data/lib/bcdice/game_system/ShadowRun5.rb +2 -2
  229. data/lib/bcdice/game_system/SharedFantasia.rb +1 -1
  230. data/lib/bcdice/game_system/ShinMegamiTenseiKakuseihen.rb +1 -1
  231. data/lib/bcdice/game_system/ShinkuuGakuen.rb +5 -5
  232. data/lib/bcdice/game_system/ShinobiGami.rb +75 -40
  233. data/lib/bcdice/game_system/ShoujoTenrankai.rb +3 -3
  234. data/lib/bcdice/game_system/Skynauts.rb +2 -2
  235. data/lib/bcdice/game_system/SteamPunkers.rb +7 -5
  236. data/lib/bcdice/game_system/StellarKnights.rb +2 -5
  237. data/lib/bcdice/game_system/SterileLife.rb +2 -2
  238. data/lib/bcdice/game_system/StrangerOfSwordCity.rb +2 -3
  239. data/lib/bcdice/game_system/StratoShout.rb +39 -268
  240. data/lib/bcdice/game_system/StratoShout_Korean.rb +8 -283
  241. data/lib/bcdice/game_system/Strave.rb +2 -2
  242. data/lib/bcdice/game_system/SwordWorld.rb +52 -189
  243. data/lib/bcdice/game_system/SwordWorld2_0.rb +21 -150
  244. data/lib/bcdice/game_system/SwordWorld2_5.rb +126 -41
  245. data/lib/bcdice/game_system/TherapieSein.rb +3 -3
  246. data/lib/bcdice/game_system/TokumeiTenkousei.rb +2 -2
  247. data/lib/bcdice/game_system/TokyoGhostResearch.rb +2 -2
  248. data/lib/bcdice/game_system/Torg.rb +3 -3
  249. data/lib/bcdice/game_system/Torg1_5.rb +1 -1
  250. data/lib/bcdice/game_system/TorgEternity.rb +5 -8
  251. data/lib/bcdice/game_system/TrinitySeven.rb +3 -3
  252. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +7 -7
  253. data/lib/bcdice/game_system/TwilightGunsmoke.rb +2 -3
  254. data/lib/bcdice/game_system/UnsungDuet.rb +139 -0
  255. data/lib/bcdice/game_system/Utakaze.rb +2 -2
  256. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +1 -1
  257. data/lib/bcdice/game_system/Villaciel.rb +1 -2
  258. data/lib/bcdice/game_system/Warhammer.rb +7 -7
  259. data/lib/bcdice/game_system/Warhammer4.rb +326 -0
  260. data/lib/bcdice/game_system/WitchQuest.rb +1 -1
  261. data/lib/bcdice/game_system/WorldOfDarkness.rb +1 -1
  262. data/lib/bcdice/game_system/YankeeYogSothoth.rb +15 -15
  263. data/lib/bcdice/game_system/YearZeroEngine.rb +1 -1
  264. data/lib/bcdice/game_system/Yggdrasill.rb +605 -0
  265. data/lib/bcdice/game_system/ZettaiReido.rb +2 -2
  266. data/lib/bcdice/game_system/cthulhu7th/full_auto.rb +294 -0
  267. data/lib/bcdice/game_system/cthulhu7th/rollable.rb +41 -0
  268. data/lib/bcdice/game_system/filled_with/cook_tables.rb +119 -0
  269. data/lib/bcdice/game_system/filled_with/lot_tables.rb +155 -0
  270. data/lib/bcdice/game_system/meikyu_kingdom/item_table.rb +2 -0
  271. data/lib/bcdice/game_system/meikyu_kingdom/kingdom_name_table.rb +2 -0
  272. data/lib/bcdice/game_system/meikyu_kingdom/landscape_table.rb +2 -0
  273. data/lib/bcdice/game_system/meikyu_kingdom/name_tables.rb +2 -0
  274. data/lib/bcdice/game_system/meikyu_kingdom/placename_table.rb +2 -0
  275. data/lib/bcdice/game_system/meikyu_kingdom/tables.rb +2 -0
  276. data/lib/bcdice/game_system/meikyu_kingdom/word_table.rb +2 -0
  277. data/lib/bcdice/game_system/meikyu_kingdom_basic/item_table.rb +2 -0
  278. data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +2 -0
  279. data/lib/bcdice/game_system/meikyu_kingdom_basic/name_table.rb +2 -0
  280. data/lib/bcdice/game_system/meikyu_kingdom_basic/table.rb +2 -0
  281. data/lib/bcdice/game_system/meikyu_kingdom_basic/word_table.rb +2 -0
  282. data/lib/bcdice/game_system/one_way_heroics/dungeon_table.rb +2 -0
  283. data/lib/bcdice/game_system/one_way_heroics/random_event_table.rb +2 -0
  284. data/lib/bcdice/game_system/one_way_heroics/tables.rb +2 -0
  285. data/lib/bcdice/game_system/satasupe/tables.rb +723 -0
  286. data/lib/bcdice/game_system/sword_world/rating_lexer.rb +47 -0
  287. data/lib/bcdice/game_system/sword_world/rating_parsed.rb +99 -0
  288. data/lib/bcdice/game_system/sword_world/rating_parser.rb +457 -0
  289. data/lib/bcdice/game_system/sword_world/transcendent_test.rb +104 -0
  290. data/lib/bcdice/loader.rb +17 -12
  291. data/lib/bcdice/normalize.rb +3 -1
  292. data/lib/bcdice/preprocessor.rb +23 -44
  293. data/lib/bcdice/randomizer.rb +14 -0
  294. data/lib/bcdice/repl.rb +4 -2
  295. data/lib/bcdice/result.rb +87 -0
  296. data/lib/bcdice/translate.rb +13 -0
  297. data/lib/bcdice/user_defined_dice_table.rb +28 -15
  298. data/lib/bcdice/version.rb +3 -1
  299. metadata +101 -24
  300. data/.editorconfig +0 -21
  301. data/.github/.codecov.yaml +0 -10
  302. data/.github/workflows/coverage.yaml +0 -21
  303. data/.github/workflows/lint.yaml +0 -13
  304. data/.github/workflows/test.yml +0 -20
  305. data/.gitignore +0 -14
  306. data/.rubocop.yml +0 -96
  307. data/.rubocop_todo.yml +0 -113
  308. data/Gemfile +0 -11
  309. data/ROADMAP.md +0 -30
  310. data/Rakefile +0 -118
  311. data/bcdice.gemspec +0 -27
  312. data/bin/repl.rb +0 -21
  313. data/docs/README.txt +0 -2028
  314. data/docs/dicebot_sort_key.md +0 -72
  315. data/docs/how_to_make_dicebot.md +0 -453
  316. data/lib/bcdice/command_parser.rb +0 -242
@@ -36,22 +36,22 @@ module BCDice
36
36
   例)DCSL7 DCEL22
37
37
  INFO_MESSAGE_TEXT
38
38
 
39
- register_prefix([
39
+ register_prefix(
40
40
  '(SH|SHS)(\-?\d+)(\/\d+)?(@\d+)?',
41
41
  '(EM|TR|FE)(\-?\d+)(@\d+)?',
42
42
  'DC(SL|BL|IM|BR|RF|EL).+'
43
- ])
43
+ )
44
44
 
45
45
  def eval_game_system_specific_command(command)
46
46
  case command
47
- when /(EM|TR|FE)(\-?\d+)(@(\d+))?/i
47
+ when /(EM|TR|FE)(-?\d+)(@(\d+))?/i
48
48
  command_type = Regexp.last_match(1).upcase
49
49
  success_rate = Regexp.last_match(2).to_i
50
50
  critical_border_text = Regexp.last_match(4)
51
51
  critical_border = get_critical_border(critical_border_text, success_rate)
52
52
 
53
53
  return check_roll_sh(success_rate, critical_border, command_type)
54
- when %r{(SH|SHS)(\-?\d+)(/(\d+))?(@(\d+))?}i
54
+ when %r{(SH|SHS)(-?\d+)(/(\d+))?(@(\d+))?}i
55
55
  success_rate = Regexp.last_match(2).to_i
56
56
  repeat_count = (Regexp.last_match(4) || 1).to_i
57
57
  critical_border_text = Regexp.last_match(6)
@@ -23,7 +23,7 @@ module BCDice
23
23
   例)12SFM-5@7#2  1SFM  50SFM+5@7,10#2,5 50SFM-5+10@7,10#2,5+15+25
24
24
  INFO_MESSAGE_TEXT
25
25
 
26
- register_prefix(['([-+]?\d+)?SFM.*', '2R6.*'])
26
+ register_prefix('([-+]?\d+)?SFM', '2R6')
27
27
 
28
28
  def initialize(command)
29
29
  super(command)
@@ -21,7 +21,7 @@ module BCDice
21
21
  BコマンドとRコマンド時に、グリッチの表示を行います。
22
22
  INFO_MESSAGE_TEXT
23
23
 
24
- register_prefix(['(\d+)B6@(\d+)'])
24
+ register_prefix('(\d+)B6@(\d+)')
25
25
 
26
26
  def initialize(command)
27
27
  super(command)
@@ -40,7 +40,7 @@ module BCDice
40
40
  m = /(\d+B6)@(\d+)/.match(command)
41
41
  b_dice = m[1]
42
42
  limit = m[2].to_i
43
- output_before_limited = BCDice::CommonCommand::BarabaraDice.new(b_dice, @randomizer, self).eval()
43
+ output_before_limited = BCDice::CommonCommand::BarabaraDice.eval(b_dice, self, @randomizer).text
44
44
 
45
45
  m = /成功数(\d+)/.match(output_before_limited)
46
46
  output_after_limited = output_before_limited
@@ -21,7 +21,7 @@ module BCDice
21
21
  例) SF+4>=9 : 2D6して4を足した値が9以上なら成功
22
22
  MESSAGETEXT
23
23
 
24
- register_prefix(['SF.*', 'ST.*'])
24
+ register_prefix('SF', 'ST')
25
25
 
26
26
  def change_text(string)
27
27
  string.gsub(/SF/i, "2D6").gsub(/ST/i, "2D6")
@@ -4,7 +4,7 @@ module BCDice
4
4
  module GameSystem
5
5
  class ShinMegamiTenseiKakuseihen < Base
6
6
  # ゲームシステムの識別子
7
- ID = 'SMTKakuseihen'
7
+ ID = 'ShinMegamiTenseiKakuseihen'
8
8
 
9
9
  # ゲームシステム名
10
10
  NAME = '真・女神転生TRPG 覚醒篇'
@@ -33,13 +33,13 @@ module BCDice
33
33
   例)CSW10 CBX76
34
34
  MESSAGETEXT
35
35
 
36
- register_prefix([
37
- 'CRL.*', 'CSW.*', 'CLS.*', 'CSS.*', 'CSP.*', 'CAX.*', 'CCL.*', 'CMA.*', 'CBX.*', 'CPR.*', 'CST.*',
38
- 'RL.*', 'SW.*', 'LS.*', 'SS.*', 'SP.*', 'AX.*', 'CL.*', 'BW.*', 'MA.*', 'BX.*', 'PR.*', 'ST.*'
39
- ])
36
+ register_prefix(
37
+ 'CRL', 'CSW', 'CLS', 'CSS', 'CSP', 'CAX', 'CCL', 'CMA', 'CBX', 'CPR', 'CST',
38
+ 'RL', 'SW', 'LS', 'SS', 'SP', 'AX', 'CL', 'BW', 'MA', 'BX', 'PR', 'ST'
39
+ )
40
40
 
41
41
  def eval_game_system_specific_command(command)
42
- m = /^([A-Z]+)([\+\-]?\d+)?(?:>=(\d+))?$/i.match(command)
42
+ m = /^([A-Z]+)([+\-]?\d+)?(?:>=(\d+))?$/i.match(command)
43
43
  unless m
44
44
  return nil
45
45
  end
@@ -16,9 +16,18 @@ module BCDice
16
16
 
17
17
  # ダイスボットの使い方
18
18
  HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
19
+ ・行為判定 SG@s#f>=x
20
+  2D6の行為判定を行う
21
+  s: スペシャル値 (省略時 12)
22
+  f: ファンブル値 (省略時 2)
23
+  x: 目標値 (省略可)
24
+  例)SG, SG@11, SG@11#3, SG#3>=7
19
25
  ・各種表
20
26
   ・(無印)シーン表 ST/ファンブル表 FT/感情表 ET
21
-    /変調表 WT/戦場表 BT/異形表 MT/ランダム特技決定表 RTT
27
+    /変調表 WT/戦場表 BT/異形表 MT
28
+  ・ランダム特技決定表 RTTn (n:分野番号、省略可能)
29
+    1器術 2体術 3忍術 4謀術 5戦術 6妖術
30
+  ・ランダム分野表 RCT
22
31
   ・(弐)都市シーン表 CST/館シーン表  MST/出島シーン表 DST
23
32
   ・(参)トラブルシーン表 TST/日常シーン表 NST/回想シーン表 KST
24
33
   ・(死)東京シーン表 TKST/戦国シーン表 GST
@@ -38,53 +47,89 @@ module BCDice
38
47
  super(command)
39
48
 
40
49
  @sort_add_dice = true
41
- @enabled_d66 = true
42
50
  @d66_sort_type = D66SortType::ASC
43
51
  end
44
52
 
45
- def check_2D6(total, dice_total, _dice_list, cmp_op, target)
46
- return '' unless cmp_op == :>=
53
+ SPECIAL = "スペシャル(【生命力】1点か変調一つを回復)"
54
+
55
+ def result_2d6(total, dice_total, _dice_list, cmp_op, target)
56
+ return nil unless cmp_op == :>=
47
57
 
48
58
  if dice_total <= 2
49
- "ファンブル"
59
+ Result.fumble("ファンブル")
50
60
  elsif dice_total >= 12
51
- " > スペシャル(【生命力】1点か変調一つを回復)"
61
+ Result.critical(SPECIAL)
52
62
  elsif target == "?"
53
- ""
63
+ nil
54
64
  elsif total >= target
55
- "成功"
65
+ Result.success("成功")
56
66
  else
57
- "失敗"
67
+ Result.failure("失敗")
58
68
  end
59
69
  end
60
70
 
61
- def eval_game_system_specific_command(command)
62
- string = command.upcase
63
-
64
- result = roll_tables(command, TABLES)
65
- if result
66
- return result
67
- end
71
+ register_prefix("SG")
68
72
 
69
- case string
70
- when /\w*RTT/ # ランダム特技決定表
71
- return sinobigami_random_skill_table()
72
- when 'MT' # 異形表
73
- return sinobigami_metamorphose_table()
74
- end
73
+ def eval_game_system_specific_command(command)
74
+ result = action_roll(command) || roll_tables(command, TABLES) || RTT.roll_command(@randomizer, command)
75
+ return result if result
76
+ return sinobigami_metamorphose_table() if command == 'MT'
75
77
 
76
- return nil
78
+ nil
77
79
  end
78
80
 
81
+ RTT = DiceTable::SaiFicSkillTable.new(
82
+ [
83
+ ['器術', ['絡繰術', '火術', '水術', '針術', '仕込み', '衣装術', '縄術', '登術', '拷問術', '壊器術', '掘削術']],
84
+ ['体術', ['騎乗術', '砲術', '手裏剣術', '手練', '身体操術', '歩法', '走法', '飛術', '骨法術', '刀術', '怪力']],
85
+ ['忍術', ['生存術', '潜伏術', '遁走術', '盗聴術', '腹話術', '隠形術', '変装術', '香術', '分身の術', '隠蔽術', '第六感']],
86
+ ['謀術', ['医術', '毒術', '罠術', '調査術', '詐術', '対人術', '遊芸', '九ノ一の術', '傀儡の術', '流言の術', '経済力']],
87
+ ['戦術', ['兵糧術', '鳥獣術', '野戦術', '地の利', '意気', '用兵術', '記憶術', '見敵術', '暗号術', '伝達術', '人脈']],
88
+ ['妖術', ['異形化', '召喚術', '死霊術', '結界術', '封術', '言霊術', '幻術', '瞳術', '千里眼の術', '憑依術', '呪術']],
89
+ ],
90
+ s_format: "『%<category_name>s』%<skill_name>s",
91
+ rtt_format: "ランダム指定特技表(%<category_dice>d,%<row_dice>d) > %<text>s"
92
+ )
93
+
79
94
  private
80
95
 
81
- # ランダム指定特技表
82
- def sinobigami_random_skill_table()
83
- skill_table, value1 = get_table_by_1d6(RANDOM_SKILL_TABLE)
84
- table_name, skill_table = skill_table
85
- skill, value2 = get_table_by_2d6(skill_table)
96
+ def action_roll(command)
97
+ parser = Command::Parser.new("SG", round_type: round_type)
98
+ .restrict_cmp_op_to(:>=, nil)
99
+ .enable_critical
100
+ .enable_fumble
101
+ cmd = parser.parse(command)
102
+ return nil unless cmd
86
103
 
87
- return "ランダム指定特技表(#{value1},#{value2}) > 『#{table_name}』#{skill}"
104
+ cmd.critical ||= 12
105
+ cmd.fumble ||= 2
106
+
107
+ dice_list = @randomizer.roll_barabara(2, 6).sort
108
+ dice_total = dice_list.sum()
109
+ total = dice_total + cmd.modify_number
110
+
111
+ result =
112
+ if dice_total <= cmd.fumble
113
+ Result.fumble("ファンブル")
114
+ elsif dice_total >= cmd.critical
115
+ Result.critical(SPECIAL)
116
+ elsif cmd.cmp_op.nil?
117
+ Result.new
118
+ elsif total >= cmd.target_number
119
+ Result.success("成功")
120
+ else
121
+ Result.failure("失敗")
122
+ end
123
+
124
+ sequence = [
125
+ "(#{cmd.to_s(:after_modify_number)})",
126
+ "#{dice_total}[#{dice_list.join(',')}]#{Format.modifier(cmd.modify_number)}",
127
+ total,
128
+ result.text
129
+ ].compact
130
+
131
+ result.text = sequence.join(" > ")
132
+ result
88
133
  end
89
134
 
90
135
  # 異形表
@@ -614,16 +659,6 @@ module BCDice
614
659
  ),
615
660
  }.freeze
616
661
 
617
- # ランダム指定特技表
618
- RANDOM_SKILL_TABLE = [
619
- ['器術', ['絡繰術', '火術', '水術', '針術', '仕込み', '衣装術', '縄術', '登術', '拷問術', '壊器術', '掘削術']],
620
- ['体術', ['騎乗術', '砲術', '手裏剣術', '手練', '身体操術', '歩法', '走法', '飛術', '骨法術', '刀術', '怪力']],
621
- ['忍術', ['生存術', '潜伏術', '遁走術', '盗聴術', '腹話術', '隠形術', '変装術', '香術', '分身の術', '隠蔽術', '第六感']],
622
- ['謀術', ['医術', '毒術', '罠術', '調査術', '詐術', '対人術', '遊芸', '九ノ一の術', '傀儡の術', '流言の術', '経済力']],
623
- ['戦術', ['兵糧術', '鳥獣術', '野戦術', '地の利', '意気', '用兵術', '記憶術', '見敵術', '暗号術', '伝達術', '人脈']],
624
- ['妖術', ['異形化', '召喚術', '死霊術', '結界術', '封術', '言霊術', '幻術', '瞳術', '千里眼の術', '憑依術', '呪術']],
625
- ].freeze
626
-
627
662
  # 異形表
628
663
  METAMORPHOSE_TABLE = [
629
664
  '1D6を振り、「妖魔忍法表A」で、ランダムに忍法の種類を決定する。妖魔化している間、その妖魔忍法を修得しているものとして扱う。この異形は、違う種類の妖魔忍法である限り、違う異形として扱う。',
@@ -674,7 +709,7 @@ module BCDice
674
709
  }
675
710
  ].freeze
676
711
 
677
- register_prefix(['MT', 'RTT'] + TABLES.keys)
712
+ register_prefix('MT', RTT.prefixes, TABLES.keys)
678
713
  end
679
714
  end
680
715
  end
@@ -24,7 +24,7 @@ module BCDice
24
24
   NORBLE 貴族趣味/MARCHEN メルヒェン/COLONIAL コロニアル/
25
25
   SHELF 本棚のある場所/LITTLE 小さな妹の部屋/
26
26
   ELDER 素敵なお姉さまの部屋/ATERIEL アトリエ/OPEN 集まれる場所/
27
-  HAUNTED SIMPLE 侘び住まい
27
+  HAUNTED 精神的瑕疵物件/SIMPLE 侘び住まい
28
28
  ・いろいろな場所
29
29
   LARGE 広い場所/CORRIDOR 廊下/STAIRS 階段/
30
30
   COSY 居心地のいい場所/TERRACE テラス・ベランダ/
@@ -33,10 +33,10 @@ module BCDice
33
33
   RUIN 廃屋/SHORE 水のほとり
34
34
  MESSAGETEXT
35
35
 
36
- register_prefix(["SPRING", "SUMMER", "AUTUMN", "WINTER", "MORNING", "NOON", "AFTERNOON", "TWILIGHT", "NIGHT", "MIDNIGHT", "NORBLE", "MARCHEN", "COLONIAL", "SHELF", "LITTLE", "ELDER", "ATERIEL", "OPEN", "HAUNTED", "SIMPLE", "LARGE", "CORRIDOR", "STAIRS", "COSY", "TERRACE", "GARRET", "KITCHEN", "BATH", "REST", "CELLER", "LUMBER", "GARDEN", "WASTED", "RUIN", "SHORE"])
36
+ register_prefix("SPRING", "SUMMER", "AUTUMN", "WINTER", "MORNING", "NOON", "AFTERNOON", "TWILIGHT", "NIGHT", "MIDNIGHT", "NORBLE", "MARCHEN", "COLONIAL", "SHELF", "LITTLE", "ELDER", "ATERIEL", "OPEN", "HAUNTED", "SIMPLE", "LARGE", "CORRIDOR", "STAIRS", "COSY", "TERRACE", "GARRET", "KITCHEN", "BATH", "REST", "CELLER", "LUMBER", "GARDEN", "WASTED", "RUIN", "SHORE")
37
37
 
38
38
  def eval_game_system_specific_command(command)
39
- info = EVENT_TABLES[command.upcase]
39
+ info = self.class::EVENT_TABLES[command]
40
40
 
41
41
  return nil if info.nil?
42
42
 
@@ -25,14 +25,14 @@ module BCDice
25
25
  ◆砲撃判定+ダメージチェック (BOMn/Dx/y@m) n:目標値(省略時:7)
26
26
   x:ダメージ左側の値、y:ダメージ右側の値
27
27
   m:《弾道学》(省略可)上:8、下:2、左:4、右:6
28
-  例) BOM/D/4 BOM9/D19@4
28
+  例) BOM/D/4 BOM9/D19/2@4
29
29
  ◆《回避運動》 (AVOn@mXX) n:目標値(省略時:7)
30
30
   m:回避方向。上:8、下:2、左:4、右:6、XX:ダメージチェック結果
31
31
   例)
32
32
   AVO9@8[縦1,横4],[縦2,横6],[縦3,横8] AVO@2[縦6,横4],[縦2,横6]
33
33
  MESSAGETEXT
34
34
 
35
- register_prefix(['D.*', '2[Dd]6<=.*', 'SN.*', 'NV.*', 'AVO.*', 'BOM.*'])
35
+ register_prefix('D', '2D6<=', 'SN', 'NV', 'AVO', 'BOM')
36
36
 
37
37
  def initialize(command)
38
38
  super(command)
@@ -1,13 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bcdice/dice_table/d66_range_table'
2
4
 
3
5
  module BCDice
4
6
  module GameSystem
5
7
  class SteamPunkers < Base
6
- ID = 'SteamPunkers'.freeze
7
- NAME = 'スチームパンカーズ'.freeze
8
- SORT_KEY = 'すちいむはんかあす'.freeze
8
+ ID = 'SteamPunkers'
9
+ NAME = 'スチームパンカーズ'
10
+ SORT_KEY = 'すちいむはんかあす'
9
11
 
10
- HELP_MESSAGE = <<~MESSAGETEXT.freeze
12
+ HELP_MESSAGE = <<~MESSAGETEXT
11
13
  ・判定コマンド (SPn)
12
14
  SP(判定ダイス数)>=(目標値)
13
15
  SP4>=3のように入力し、5が出たらヒット数1,6が出たらヒット数2として成功数を数えます。
@@ -479,7 +481,7 @@ module BCDice
479
481
  )
480
482
  }.freeze
481
483
 
482
- register_prefix(['SP.*'] + TABLES.keys)
484
+ register_prefix('SP', TABLES.keys)
483
485
  end
484
486
  end
485
487
  end
@@ -67,7 +67,6 @@ module BCDice
67
67
  super(command)
68
68
 
69
69
  @sort_barabara_dice = true # バラバラロール(Bコマンド)でソート有
70
- @enabled_d66 = true
71
70
  @d66_sort_type = D66SortType::NO_SORT
72
71
  end
73
72
 
@@ -127,15 +126,13 @@ module BCDice
127
126
 
128
127
  # 正規表現の都合で先頭に ',' が残っているので取っておく
129
128
  text = text[1..-1]
130
- rules = text.split(',').map do |rule|
129
+ text.split(',').map do |rule|
131
130
  v = rule.split('>').map(&:to_i)
132
131
  {
133
132
  from: v[0],
134
133
  to: v[1],
135
134
  }
136
135
  end
137
-
138
- rules
139
136
  end
140
137
 
141
138
  def roll_all_situation_b2_tables
@@ -850,7 +847,7 @@ module BCDice
850
847
  ),
851
848
  }.freeze
852
849
 
853
- register_prefix(['\d+SK\d?(,\d>\d)*', 'STB2', 'ALLS', 'PET', 'FT\d*'] + TABLES.keys)
850
+ register_prefix('\d+SK\d?(,\d>\d)*', 'STB2', 'ALLS', 'PET', 'FT\d*', TABLES.keys)
854
851
  end
855
852
  end
856
853
  end
@@ -37,7 +37,7 @@ module BCDice
37
37
   ・超未来の宇宙船内 INT
38
38
  MESSAGETEXT
39
39
 
40
- register_prefix(['(\d+)*DA.*\[(\d+),(\d+)(,(\d+))?\]', 'VPFT', 'VNFT', 'VNRT', 'AAFT', 'AST', 'RNST', 'RET', 'TRST', 'TRAT', 'TRMT', 'TROT', 'TET', 'ENT', 'CUT', 'NAT', 'INT']) # '(\d+)*DA.*\[.*\]'
40
+ register_prefix('(\d+)*DA.*\[(\d+),(\d+)(,(\d+))?\]', 'VPFT', 'VNFT', 'VNRT', 'AAFT', 'AST', 'RNST', 'RET', 'TRST', 'TRAT', 'TRMT', 'TROT', 'TET', 'ENT', 'CUT', 'NAT', 'INT') # '(\d+)*DA.*\[.*\]'
41
41
 
42
42
  def eval_game_system_specific_command(command) # ダイスロールコマンド
43
43
  # 通常判定部分をgetJudgeResultコマンドに切り分け
@@ -104,7 +104,7 @@ module BCDice
104
104
 
105
105
  def getJudgeResult(command)
106
106
  case command
107
- when /(\d+)*DA([\d\+\*\-]*[\d])?\[(\d+),(\d+)(,(\d+))?\]/i
107
+ when /(\d+)*DA([\d+*\-]*\d)?\[(\d+),(\d+)(,(\d+))?\]/i
108
108
  number = (Regexp.last_match(1) || 1).to_i
109
109
  correction = (Regexp.last_match(2) || 0).to_i
110
110
  single = (Regexp.last_match(3) || 4).to_i
@@ -21,13 +21,12 @@ module BCDice
21
21
  ・D66ダイスあり
22
22
  INFO_MESSAGE_TEXT
23
23
 
24
- register_prefix(['\d+SR.*'])
24
+ register_prefix('\d+SR')
25
25
 
26
26
  def initialize(command)
27
27
  super(command)
28
28
 
29
29
  @sort_add_dice = true
30
- @enabled_d66 = true
31
30
  @d66_sort_type = D66SortType::NO_SORT
32
31
  @round_type = RoundType::FLOOR
33
32
  end
@@ -47,7 +46,7 @@ module BCDice
47
46
  debug("checkRoll begin command", command)
48
47
 
49
48
  result = ''
50
- return result unless command =~ /^(\d+)SR([\+\-]?\d+)?(>=(\d+))?$/i
49
+ return result unless command =~ /^(\d+)SR([+\-]?\d+)?(>=(\d+))?$/i
51
50
 
52
51
  diceCount = Regexp.last_match(1).to_i
53
52
  modify = Regexp.last_match(2).to_i
@@ -17,33 +17,18 @@ module BCDice
17
17
 
18
18
  VOT, GUT, BAT, KEYT, DRT: (ボーカル、ギター、ベース、キーボード、ドラム)トラブル表
19
19
  EMO: 感情表
20
- AT[1-6]: 特技表(空: ランダム 1: 主義 2: 身体 3: モチーフ 4: エモーション 5: 行動 6: 逆境)
20
+ ATn, RTTn: 特技表(n=分野。空:ランダム 1:主義 2:身体 3:モチーフ 4:エモーション 5:行動 6:逆境)
21
+ RCT: 分野ランダム表
21
22
  SCENE, MACHI, GAKKO, BAND: (汎用、街角、学校、バンド)シーン表 接近シーンで使用
22
23
  TENKAI: シーン展開表 奔走シーン 練習シーンで使用
23
24
 
24
- []内は省略可 D66入れ替えあり
25
+ D66入れ替えあり
25
26
  INFO_MESSAGE_TEXT
26
27
 
27
- register_prefix([
28
- 'VOT',
29
- 'GUT',
30
- 'BAT',
31
- 'KEYT',
32
- 'DRT',
33
- 'EMO',
34
- 'AT[1-6]?',
35
- 'SCENE',
36
- 'MACHI',
37
- 'GAKKO',
38
- 'BAND',
39
- 'TENKAI'
40
- ])
41
-
42
28
  def initialize(command)
43
29
  super(command)
44
30
 
45
31
  @sort_add_dice = true
46
- @enabled_d66 = true
47
32
  @d66_sort_type = D66SortType::ASC
48
33
  end
49
34
 
@@ -51,266 +36,52 @@ module BCDice
51
36
  return '' if target == '?'
52
37
  return '' unless cmp_op == :>=
53
38
 
54
- if dice_total <= 2
55
- " ファンブル! (ドラマフェイズ: 【ディスコード】+2 / ライブフェイズ: 【コンディション】-2)"
56
- elsif dice_total >= 12
57
- " スペシャル! (【コンディション】+2)"
58
- elsif total >= target
59
- " 成功"
60
- else
61
- " > 失敗"
62
- end
39
+ result =
40
+ if dice_total <= 2
41
+ translate("StratoShout.fumble")
42
+ elsif dice_total >= 12
43
+ translate("StratoShout.critical")
44
+ elsif total >= target
45
+ translate("success")
46
+ else
47
+ translate("failure")
48
+ end
49
+
50
+ return " > #{result}"
63
51
  end
64
52
 
65
53
  def eval_game_system_specific_command(command)
66
- case command.upcase
67
- when 'VOT'
68
- title = 'ボーカルトラブル表(P167)'
69
- table = [
70
- "歌詞を忘れてしまった! 何も言葉が出てこない……",
71
- "マイクのコードに足を引っ掛けてしまった! 危ない!",
72
- "マイクスタンドが倒れてしまった!",
73
- "音程がズレているけど、なかなか直せない!",
74
- "リズムがズレてきている気がする……修正できない!",
75
- "喉が枯れそうだ。まずい、セーブしないと……!"
76
- ]
77
- return textFrom1D6Table(title, table)
78
- when 'GUT'
79
- title = 'ギタートラブル表(P169)'
80
- table = [
81
- "やべっ、コードを間違えた! どうにかごまかそう……",
82
- "ゲッ、シールド(信号を伝えるコード)が抜けちゃった! 音が出ない!",
83
- "ギターの音にノイズが乗ってるような……直ってくれ……!",
84
- "あれ? 今曲のどの辺りだっけ……?",
85
- "弦が切れてしまった! なんて不吉な……。",
86
- "ピックが飛んでった! 指で弾くしかない……!"
87
- ]
88
- return textFrom1D6Table(title, table)
89
- when 'BAT'
90
- title = 'ベーストラブル表(P171)'
91
- table = [
92
- "やべっ、コードを間違えた! どうにかごまかそう……",
93
- "ゲッ、シールド(信号を伝えるコード)が抜けちゃった! 音が出ない!",
94
- "ベースの音にノイズが乗ってるような……直ってくれ……!",
95
- "あれ? 今曲のどの辺りだっけ……?",
96
- "指先の感覚が麻痺してきた。動かない……!",
97
- "テンポが速くなってきているけど、止まらない!"
98
- ]
99
- return textFrom1D6Table(title, table)
100
- when 'KEYT'
101
- title = 'キーボードトラブル表(P173)'
102
- table = [
103
- "指先の感覚が麻痺してきた。動かない……!",
104
- "音量のスライドに触れてしまった! 爆音が出てしまう!",
105
- "あれ? 今曲のどの辺りだっけ……?",
106
- "音の出ない鍵がある……故障!?",
107
- "音色を間違えた! 元の音色は何番だっけ……!?",
108
- "手を置く位置が一つズレてる……! 不協和音だ!"
109
- ]
110
- return textFrom1D6Table(title, table)
111
- when 'DRT'
112
- title = 'ドラムトラブル表(P175)'
113
- table = [
114
- "手がこんがらがってきた! 軌道修正しないと……!",
115
- "あれ? 今曲のどの辺りだっけ……?",
116
- "ハイハットが開かない! ネジが緩んでるのか……!?",
117
- "アドリブ入れたけど、次のフレーズが思いつかない……!",
118
- "テンポが速くなってきているけど、止まらない!",
119
- "スティックが飛んでった! 代わりはどこだっけ……。"
120
- ]
121
- return textFrom1D6Table(title, table)
122
- when 'EMO'
123
- title = '感情表(P183)'
124
- table = [
125
- "共感/不信",
126
- "友情/嫉妬",
127
- "好敵手/苛立ち",
128
- "不可欠/敬遠",
129
- "尊敬/劣等感",
130
- "愛情/負い目"
131
- ]
132
- return textFrom1D6Table(title, table)
133
- when /^AT([1-6]?)$/
134
- value = Regexp.last_match(1).to_i
135
- return getSkillList(value)
136
- when "SCENE"
137
- title = "シーン表(P199)"
138
- table = [
139
- "一人の時間。ふと過去の記憶を辿る。そういえば以前、あんなことがあったような……。",
140
- "どこからか、言い争っているような声が聞こえてきた。喧嘩だろうか?",
141
- "夜の帳が下り、辺りは静寂に包まれている。あいつは今、何をしているだろう。",
142
- "仲間と一緒にご飯を食べていると、会話は自然とあの話に……。",
143
- "笑い声に満ちた空間。ずっとこんな時間が続けばいいのに。",
144
- "日の当たる場所。毎日の忙しさを離れ、穏やかな時間が過ぎていく。",
145
- "スマートフォンに着信の通知がついていた。電話? メッセージ? 誰からだろう。",
146
- "突然、あなたのもとに来訪者が現れた。何か伝えたいことがあるようだ。",
147
- "誰かの忘れ物を見つけた。届けてあげたほうがいいだろうか。",
148
- "誰かが噂話をしている。聞くつもりはなくとも、それは勝手に耳に入ってきた。",
149
- "なんだか悪寒がする。なにか良くないことが起きているような……。"
150
- ]
151
- return textFrom2D6Table(title, table)
152
- when "MACHI"
153
- title = "街角シーン表(P199)"
154
- table = [
155
- "入ったことのない場所に、初めて足を踏み入れた。少し緊張してしまうな。",
156
- "アルバイト先。バイト仲間から、意外なことを教えられた。",
157
- "会話もままならないような、大音量の音楽。その場にいるだけで気分が高揚する。",
158
- "横断歩道で信号を待っていると、見知った人物の姿を見つけた。",
159
- "突然の雨に、慌てて足を早める人々。自分も早く帰らなければ。",
160
- "何気なく立ち寄った店の中で、知人とばったり。こんなところで何を?",
161
- "練習を終えて立ち寄った飲食店で、意外な人物を発見。少し様子を見てみよう。",
162
- "あちこちから子どもたちのはしゃぎ声が聞こえてくる。自分にもあんな頃があったんだろうか。",
163
- "音のない、静寂の世界。たまには音から離れるのもいいものだ。",
164
- "電車の中。つり革に掴まりながら揺られていると、見覚えのある乗客を見つけた。",
165
- "カラオケの廊下を歩いていると、どこからか聞き覚えのある声が……?"
166
- ]
167
- return textFrom2D6Table(title, table)
168
- when "GAKKO"
169
- title = "学校シーン表(P199)"
170
- table = [
171
- "校舎裏、何かを話す二人組を見かけた。一体何を話しているのだろう……?",
172
- "とある部室。部員たちは集中して部活に励んでいるようだが……。",
173
- "先生から、ターゲットについて尋ねられた。なにか気になることがあるようだ。",
174
- "木々の隙間から朝日差し込む通学路。ある者は忙しそうに、またある者は楽しそうに校舎へ向かっている。",
175
- "休み時間。教室のあちこちで飛び交う、他愛のない噂話。その中から、気になる会話が聞こえてきた。",
176
- "何もかもが茜色に染まる夕暮れ時。生徒たちは学業から解放され、自由に残り少ない一日を過ごしている。",
177
- "移動教室だ。渡り廊下から下を見ると、見覚えのある人物がいた。",
178
- "昼休み。生徒は思い思いの場所で昼食を取っている。さて、自分はどこで食べようか。",
179
- "先生から頼まれごとを引き受けてしまった。さっさと済ませてしまおう。",
180
- "そろそろ学校が閉まる時間だ。明かりのついている教室はもうほとんどない。",
181
- "スピーカーから校内放送が聞こえた。誰かを呼んでいるようだが……?"
182
- ]
183
- return textFrom2D6Table(title, table)
184
- when "BAND"
185
- title = "バンドシーン表(P199)"
186
- table = [
187
- "音楽専門のニュースサイトをチェック。大小様々な記事が投稿されている。",
188
- "意外なところで練習している人物を発見。少し声をかけてみようか。",
189
- "ちょっとした壁に衝突。誰かに相談した方がいいかも……。",
190
- "ライブを見るためライブハウスへとやってきた。どんなステージになるのだろう。",
191
- "打ち合わせに行ったライブハウス。来ているのは自分たちだけじゃないようだ。",
192
- "練習が終わった帰り道。あいつも練習が終わった頃だろうか。",
193
- "どこからか楽器の音が聞こえてくる。誰か演奏しているのだろうか。",
194
- "熱気のこもる部屋を出て、スタジオの待合室でクールダウン。ソファに座っているのは……。",
195
- "訪れた楽器店で、見知った人物を発見。何をしに来ているのだろう。",
196
- "最新のヒット曲が流れるCDショップの店内。次はどんな曲をやろうか……。",
197
- "何気なく鳴らした音から、突発セッションに発展。軽く実力を見せつけてやろう。"
198
- ]
199
- return textFrom2D6Table(title, table)
200
- when 'TENKAI'
201
- title = 'シーン展開表(P201)'
202
- table = [
203
- [11, "絶望: ステップを更に大きくする、あるいはシーンプレイヤーを破滅に追い込むような状況に陥ります。【ディスコード】+2点。"],
204
- [12, "崩壊: ステップによってシーンプレイヤーの大切なものが崩壊する、あるいは崩壊目前に追い込まれます。【ディスコード】+2点。"],
205
- [13, "断絶: シーンプレイヤーはステップによって何かと絶縁状態になります。【ディスコード】+2点。"],
206
- [14, "恐怖: ステップに恐怖するような出来事に遭遇します。【ディスコード】+2点。"],
207
- [15, "誤解: シーンプレイヤーがステップに関するなんらかの誤解を受けます。【ディスコード】+2点。"],
208
- [16, "試練: シーンプレイヤーはステップに関連した試練に直面します。【ディスコード】+2点。"],
209
- [22, "悪心: シーンプレイヤーの心に魔が差し、ステップを不合理に解決しようとします。【ディスコード】+1点。"],
210
- [23, "束縛: ステップに関わるなんらかに束縛され、自由な行動ができなくなります。【ディスコード】+1点。"],
211
- [24, "凶兆: ステップについて、悪いことが起きそうな前触れが訪れます。【ディスコード】+1点。"],
212
- [25, "加速: シーンプレイヤーはステップの解決に追われます。【ディスコード】+1点。"],
213
- [26, "日常: シーンプレイヤーはのんびりとした日常を送ります。【コンディション】+1点。"],
214
- [33, "休息: ステップを忘れられるような、穏やかなひとときを過ごします。【コンディション】+1点。"],
215
- [34, "吉兆: ステップについて、いいことが起きそうな前触れが訪れます。【コンディション】+1点。"],
216
- [35, "発見: シーンプレイヤーはステップについて何かを発見します。【コンディション】+1点。"],
217
- [36, "希望: シーンプレイヤーの中に、ステップに対して前向きに取り組む意思が生まれます。【コンディション】+1点。"],
218
- [44, "成長: ステップを通して、シーンプレイヤーが成長します。【コンディション】+2点。"],
219
- [45, "愛情: ステップを通して、シーンプレイヤーが愛情に触れます。【コンディション】+2点。"],
220
- [46, "朗報: ステップに関する良い知らせが舞い込みます。【コンディション】+2点。"],
221
- [55, "好転: ステップが良い方向に向かうような事件が起きます。【コンディション】+3点。"],
222
- [56, "直感: ステップを解決させる決定的な閃きを得ます。【コンディション】+3点。"],
223
- [66, "奇跡: ステップに関して、奇跡的な幸運が舞い込みます。【コンディション】+3点。"],
224
- ]
225
- return textFromD66Table(title, table)
226
- # when 'TEMP'
227
- # title = '表(P)'
228
- # table = [
229
- # [11, ""],
230
- # [12, ""],
231
- # [13, ""],
232
- # [14, ""],
233
- # [15, ""],
234
- # [16, ""],
235
- # [22, ""],
236
- # [23, ""],
237
- # [24, ""],
238
- # [25, ""],
239
- # [26, ""],
240
- # [33, ""],
241
- # [34, ""],
242
- # [35, ""],
243
- # [36, ""],
244
- # [44, ""],
245
- # [45, ""],
246
- # [46, ""],
247
- # [55, ""],
248
- # [56, ""],
249
- # [66, ""],
250
- # ]
251
- # return textFromD66Table(title, table)
252
- end
253
-
254
- return nil
54
+ roll_tables(command, self.class::TABLES) || self.class::RTT.roll_command(@randomizer, command)
255
55
  end
256
56
 
257
- def textFromD66Table(title, table)
258
- dice = @randomizer.roll_d66(D66SortType::ASC)
259
- number, text, = table.assoc(dice)
260
-
261
- return "#{title} > [#{number}] > #{text}"
262
- end
263
-
264
- def textFrom1D6Table(title, table1, table2 = nil)
265
- text1, number1 = get_table_by_1d6(table1)
266
-
267
- text = "#{title} > "
268
- if table2.nil?
269
- text += "[#{number1}] > #{text1}"
270
- else
271
- text2, number2 = get_table_by_1d6(table2)
272
- text += "[#{number1},#{number2}] > #{text1}#{text2}"
57
+ class << self
58
+ private
59
+
60
+ def translate_tables(locale)
61
+ {
62
+ "VOT" => DiceTable::Table.from_i18n("StratoShout.table.VOT", locale),
63
+ "GUT" => DiceTable::Table.from_i18n("StratoShout.table.GUT", locale),
64
+ "BAT" => DiceTable::Table.from_i18n("StratoShout.table.BAT", locale),
65
+ "KEYT" => DiceTable::Table.from_i18n("StratoShout.table.KEYT", locale),
66
+ "DRT" => DiceTable::Table.from_i18n("StratoShout.table.DRT", locale),
67
+ "EMO" => DiceTable::Table.from_i18n("StratoShout.table.EMO", locale),
68
+ "SCENE" => DiceTable::Table.from_i18n("StratoShout.table.SCENE", locale),
69
+ "MACHI" => DiceTable::Table.from_i18n("StratoShout.table.MACHI", locale),
70
+ "GAKKO" => DiceTable::Table.from_i18n("StratoShout.table.GAKKO", locale),
71
+ "BAND" => DiceTable::Table.from_i18n("StratoShout.table.BAND", locale),
72
+ "TENKAI" => DiceTable::D66Table.from_i18n("StratoShout.table.TENKAI", locale),
73
+ }
273
74
  end
274
75
 
275
- return text
276
- end
277
-
278
- def textFrom2D6Table(title, table)
279
- text, number = get_table_by_2d6(table)
280
-
281
- return "#{title} > [#{number}] > #{text}"
282
- end
283
-
284
- def getSkillList(field = 0)
285
- title = '特技リスト'
286
- table = [
287
- ['主義', ['過去', '恋人', '仲間', '家族', '自分', '今', '理由', '夢', '世界', '幸せ', '未来']],
288
- ['身体', ['頭', '目', '耳', '口', '胸', '心臓', '血', '背中', '手', 'XXX', '足']],
289
- ['モチーフ', ['闇', '武器', '魔法', '獣', '町', '歌', '食べ物', '花', '空', '季節', '光']],
290
- ['エモーション', ['悲しい', '怒り', '不安', '恐怖', '驚き', '高鳴り', '情熱', '確信', '期待', '楽しい', '喜び']],
291
- ['行動', ['泣く', '忘れる', '消す', '壊す', '叫ぶ', '歌う', '踊る', '走る', '鳴らす', '呼ぶ', '笑う']],
292
- ['逆境', ['死', '喪失', '暴力', '孤独', '後悔', '実力', '退屈', '権力', '富', '恋愛', '生']],
293
- ]
294
-
295
- number1 = 0
296
- if field == 0
297
- table, number1 = get_table_by_1d6(table)
298
- else
299
- table = table[field - 1]
76
+ def translate_rtt(locale)
77
+ DiceTable::SaiFicSkillTable.from_i18n("StratoShout.RTT", locale, rtt: 'AT', rttn: ['AT1', 'AT2', 'AT3', 'AT4', 'AT5', 'AT6'])
300
78
  end
79
+ end
301
80
 
302
- fieldName, table = table
303
- skill, number2 = get_table_by_2d6(table)
304
-
305
- text = title
306
- if field == 0
307
- text += " > [#{number1},#{number2}]"
308
- else
309
- text += "(#{fieldName}分野) > [#{number2}]"
310
- end
81
+ TABLES = translate_tables(:ja_jp)
82
+ RTT = translate_rtt(:ja_jp)
311
83
 
312
- return "#{text} > 《#{skill}/#{fieldName}#{number2}》"
313
- end
84
+ register_prefix(TABLES.keys, RTT.prefixes)
314
85
  end
315
86
  end
316
87
  end