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
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bcdice/game_system/DesperateRun"
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class JekyllAndHyde < DesperateRun
8
+ # ゲームシステムの識別子
9
+ ID = "JekyllAndHyde"
10
+
11
+ # ゲームシステム名
12
+ NAME = "ジキルとハイドとグリトグラ"
13
+
14
+ # ゲームシステム名の読みがな
15
+ SORT_KEY = "しきるとはいととくりとくら"
16
+
17
+ # ダイスボットの使い方
18
+ HELP_MESSAGE = <<~HELP
19
+ ・難易度算出コマンド DDC
20
+ ・判定コマンド RCx or RCx+y or RCx-y(x=難易度、y=修正値(省略可能))
21
+ ・目標決定表 GOALT
22
+ HELP
23
+
24
+ TABLES = {
25
+ "GOALT" => DiceTable::Table.new(
26
+ "目標決定表",
27
+ "1D6",
28
+ [
29
+ "「主人格の目的達成」",
30
+ "「主人格の目的阻害」",
31
+ "「主人格のハッピーエンド(目的達成しなくてもよい)」",
32
+ "「主人格のバッドエンド(目的達成していてもよい)」",
33
+ "「自分の人格が目的を決定できる」",
34
+ "「主人格の目的達成」「主人格の目的阻害」「主人格のハッピーエンド(目的達成しなくてもよい)」「主人格のバッドエンド(目的達成していてもよい)」「自分の人格が目的を決定できる」のどれかを自由に選べる"
35
+ ]
36
+ )
37
+ }.freeze
38
+
39
+ register_prefix('RC\d+', 'DDC', TABLES.keys)
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,251 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class JuinKansen < Base
6
+ # ゲームシステムの識別子
7
+ ID = "JuinKansen"
8
+
9
+ # ゲームシステム名
10
+ NAME = "呪印感染"
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = "しゆいんかんせん"
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
17
+ ■ 表
18
+ ・日常表 (DAI, Daily)
19
+ ・場所表
20
+ ・「都市」 (PCI, PlaceCity)
21
+ ・「田舎」 (PCO, PlaceCountryside)
22
+ ・「施設内」 (PFA, PlaceFacility)
23
+ ・初見表 (FL, FirstLook)
24
+ ・知己表 (AF, AppreciativeFriend)
25
+ ・伏線表 (FOR, Foreshadow)
26
+ ・感情表 (EMO, Emotion)
27
+ ・状況表 (SIT, Situation)
28
+ ・対象表 (TAR, Target)
29
+ ・狂気表 (INS, Insanity)
30
+ ・終焉表 (DEA, Death)
31
+ ・恐怖表 (FEA, Fear)
32
+ INFO_MESSAGE_TEXT
33
+
34
+ def eval_game_system_specific_command(command)
35
+ roll_tables(ALIAS[command] || command, TABLES)
36
+ end
37
+
38
+ TABLES = {
39
+ "Daily" => DiceTable::Table.new(
40
+ "日常表",
41
+ "2D6",
42
+ [
43
+ "「入浴中」『内容』PCの自己紹介後、自宅でどのように入浴しているかについて、簡単に説明せよ。『終了条件』GMが「体を洗い終えたので、そろそろあがることにした」と宣言する。",
44
+ "「自炊」『内容』PCの自己紹介後、自宅でどんな食事を作るか、自炊が苦手かどうかなどを説明せよ。『終了条件』GMが「料理ができたので、食事を始めた」と宣言する。",
45
+ "「休憩時間」『内容』PCの自己紹介後、仕事や学業の休憩時間に、どこで何をしているのか簡単に説明せよ。『終了条件』GMが「そろそろ、休憩時間が終わりそうだ」と宣言する。",
46
+ "「帰宅中」『内容』PCの自己紹介後、仕事や学業から帰宅途中、何をしているかを簡単に説明せよ。『終了条件』GMが自宅に到着したと宣言する。",
47
+ "「昼休み」『内容』PCの自己紹介後、仕事や学業の昼休み中、どこでなにを食べているのかを簡単に説明せよ。『終了条件』GMが昼休みがそろそろ終わると宣言する。",
48
+ "「仕事中」『内容』PCの自己紹介後、仕事や学業に対して、どのような態度で臨んでいるのかを簡単に説明せよ。『終了条件』GMが休憩時間を知らせるチャイムなどが鳴ったと宣言する。",
49
+ "「通勤・通学」『内容』PCの自己紹介後、どのような方法で通勤・通学しているかを簡単に説明せよ。『終了条件』GMが職場や学校に到着したと宣言する。",
50
+ "「休日」『内容』PCの自己紹介後、休日に何をしているか簡単に説明せよ。『終了条件』GMが「そろそろ、明日に備えなければ」と宣言する。",
51
+ "「自宅」『内容』PCの自己紹介後、自宅の自室で、どのようにくつろいでいるかを簡単に説明せよ。『終了条件』GMが「そろそろ、寝る時間のようだ」と宣言する。",
52
+ "「寝起き直後」『内容』PCの自己紹介後、自宅で起床直後、どのような行動を取るかについて、簡単に説明せよ。『終了条件』GMが「出勤・通学の準備が整った」と宣言する。",
53
+ "「趣味」『内容』PCの自己紹介後、自室でどんな趣味に没頭しているかを簡単に説明せよ。『終了条件』GMが「名残惜しいが、そろそろ寝る時間のようだ」と宣言する。",
54
+ ]
55
+ ),
56
+ "PlaceCity" => DiceTable::Table.new(
57
+ "場所表「都市」",
58
+ "2D6",
59
+ [
60
+ "「事件現場」ここは以前、怪事件が起こったと噂される事件現場だ。よく見ると、近くには枯れた花束が置かれている。",
61
+ "「帰宅路」ここは帰宅路だ。時間帯のせいか周囲に人気はなく、耳鳴りがするほどの静寂に包まれている。",
62
+ "「近所の公園」ここは自宅・会社・学校いずれかの近くにある公園だ。今いる場所は、奥のあずまやで、近くには自販機が並んでいる。",
63
+ "「近所のコンビニ」ここはPCの自宅近くにある、コンビニエンスストアだ。大きな駐車場のせいか、周囲は実に広々としている。",
64
+ "「飲食店」ここはどこにでもある飲食店だ。しかし、客の入りはまばらで、周囲には空席が目立つ。",
65
+ "「駅の広場」ここは人々が通勤や通学に使う駅の広場だ。が、行き交う人々の視線はどこか冷たく、虚ろにさえ見える。",
66
+ "「神社仏閣」ここは街のなかにある神社・寺社だ。頼めばお祓いをしてくれるという話だが、ご利益があるかは不明だ。",
67
+ "「図書館」ここは街中にある公立の図書館だ。周囲には新旧の様々な書籍が並び、調べものをするにはうってつけだ。",
68
+ "「河川敷の道」ここは近所にある河川敷沿いの道だ。周囲に人気はなく、無機質な道路が遠くまで続いてる。",
69
+ "「病院の前」ここは近所にある総合病院の前だ。通院患者と思しき老人や若者が、時折、真新しい出入り口を行き来している。",
70
+ "「警察署の前」ここは街中にある警察署の前だ。今回の事件、あるいは先ほどの怪現象を話しても……おそらく、信じてはくれないだろう。",
71
+ ]
72
+ ),
73
+ "PlaceCountryside" => DiceTable::Table.new(
74
+ "場所表「田舎」",
75
+ "2D6",
76
+ [
77
+ "「事件現場」ここは以前、怪事件が起こったと噂される事件現場だ。よく見ると、近くには枯れた花束が置いてある。",
78
+ "「学校の前」ここは村の奥にある学校の前だ。しかし、何年も前に廃校したらしく、門は固く閉ざされ、校庭には雑草が生い茂っている。",
79
+ "「公園」ここは村の中にある公園だ。中央にたたずむ遊具はいずれも錆びついており、所々に雑草が生えている。",
80
+ "「村役場」ここは村にある役場だ。しかし、役場のドアは締め切られたままで、なかに人の気配はない。",
81
+ "「森の中」ここは道路から離れた場所にある森の中だ。周囲からは、動物と思しき鳴き声が聞こえてくる。",
82
+ "「バス停」ここは村唯一のバス停だ。時刻表を見てみるが、バスは一日に一本しか通ってないらしい。",
83
+ "「神社仏閣」ここは村の中にある神社・寺社だ。境内はさびれており、人の気配は皆無に等しい。",
84
+ "「田畑」ここは村の外れにある田畑だ。農閑期のせいか、畑は放置されたままで、周囲を見渡しても人の姿はない。",
85
+ "「川辺」ここは村の外れにある川の近くだ。目前の川は透き通っており、何匹も魚が泳いでいる。",
86
+ "「病院の前」ここは村にある小さな病院の前だ。しかし、今日は定休日なのか、病院は閉まったままだ。",
87
+ "「交番の前」ここは村唯一の交番だ。しかし、警察官の姿はなく、ドアも締め切られたままだ。",
88
+ ]
89
+ ),
90
+ "PlaceFacility" => DiceTable::Table.new(
91
+ "場所表「施設内」",
92
+ "2D6",
93
+ [
94
+ "「礼拝堂」ここは地下に存在する、礼拝堂と思しき場所だ。部屋の奥には奇妙な姿をした石像があり、周囲には瘴気が漂っている。",
95
+ "「隠し部屋」ここは隠し部屋と思しき場所だ。部屋の壁には、血痕のような汚れが染みついている。",
96
+ "「倉庫」ここは中心部に存在する倉庫だ。場所のせいか、はたまた異変のせいか、周囲には不気味なカビが生えている。",
97
+ "「寝台」ここは寝台のある場所だ。内部には簡素なベッドと机が置かれているだけで、非常に殺風景だ。",
98
+ "「応接室」ここは応接室と思しき場所だ。部屋の中央には、大きめのテーブルとソファが置いてある。",
99
+ "「廊下」ここは施設内を通る廊下の1つだ。伝統がついていないせいか、それとも時間帯のせいか、周囲はやけに薄暗い。",
100
+ "「ロビー」ここはロビーだ。扉は相変わらず開く気配がなく、周囲は静まり返っている。",
101
+ "「踊り場」ここは階段の踊り場だ。周囲は非常に薄暗く、これといって何もない。",
102
+ "「地下室」ここは地下室だ。床にはうっすらと埃が積もり、長年使われていないように思える。",
103
+ "「実験室」ここは実験室と思しき場所だ。中央には大きなテーブルが設置されており、どういうわけか血まみれだ。",
104
+ "「研究室」ここは研究室と思しき場所だ。部屋は全体的に暗く、奥の棚には奇妙な姿をした生物のホルマリン漬けが並んでる。",
105
+ ]
106
+ ),
107
+ "FirstLook" => DiceTable::Table.new(
108
+ "初見表",
109
+ "2D6",
110
+ [
111
+ "「襲撃からの救出」『内容』PC同士が再会後、【命運】の低いPCが突如、不良などに絡まれ、【命運】の高いPCが実力や機転で救う場面を演出せよ。『終了条件』【命運】の低いPCが、【命運】の高いPCに対して感謝の言葉を述べる。",
112
+ "「落とし物」『内容』PC同士が再会後、【幸運】の低いPCが荷物を落とし、それを【幸運】の高いPCが拾い、手渡す場面を演出せよ。『終了条件』【幸運】の低いPCが【幸運】の高いPCの[呪印]に気付く。",
113
+ "「黒い影」『内容』PC同士が再会後、【精神】の高いPCが、【精神】の低いPCの背後に黒い影を目撃する場面を演出せよ。『終了条件』【精神】の高いPCが「さっきの……なに?」と問う。",
114
+ "「<なにか>を見た」『内容』PC同士が再会後、【幸運】の低いPCが暗がりの奥で<なにか>を目撃。顔面蒼白となる場面を演出せよ。『終了条件』【幸運】の高いPCが【幸運】の低いPCを気遣う。",
115
+ "「呼び声」『内容』PC同士は再会後、遠くから不気味な呼び声を聞き、周囲を見回すうちに、目が合う場面を演出せよ。『終了条件』PCのいずれかが「今の……聞こえた?」と問いかけ、いずれかが返答する。",
116
+ "「知り合い」『内容』PC同士が再会後、実は知り合いの知り合いだったことが判明する場面を演出せよ。『終了条件』PC同士がどんな関係かについて相談・決定する。",
117
+ "「事故からの救出」『内容』落下物や交通事故など、【希望】の低いPCが突如、不可解な事故に巻き込まれ、【希望】の高いPCに救われる場面を演出せよ。『終了条件』【希望】の低いPCが、【希望】の高いPCに感謝の言葉を述べる。",
118
+ "「SNS」『内容』【知性】の高いPCがSNS上で事件に関する発信を行い、【知性】の低いPCと知り合う場面を演出せよ。『終了条件』【知性】の低いPCが「また今度、お会いしましょう」と返信する。",
119
+ "「<なにか>が見える」『内容』PC同士が再会後、暗がりの向こうで<なにか>を目撃、戦慄する場面を演出せよ。『終了条件』<なにか>が消え去り、PCのいずれかが「……さっきの見た?」と問う。",
120
+ "「介抱」『内容』【体力】の低いPCが突如、<なにか>に襲われる幻覚を見て取り乱し、偶然現れた【体力】の高いPCに助けられる場面を演出せよ。『終了条件』【体力】の低いPCが感謝の言葉を述べる。",
121
+ "「呪印」『内容』PC同士が再会後、【敏捷】の高いPCが、【敏捷】の低いPCの持つ[呪印]に気付く場面を演出せよ。『終了条件』【敏捷】の高いPCが自身にも同じものがあると告げる。",
122
+ ]
123
+ ),
124
+ "AppreciativeFriend" => DiceTable::Table.new(
125
+ "知己表",
126
+ "2D6",
127
+ [
128
+ "「大切な人」『内容』PC同士が再会後、事件に関する相談をするうちに、PCが互いに、自身の[大切な人]について語る場面を演出せよ。『終了条件』いずれかのPCが「なんにせよ、その人のためにも、生き残らないといけませんね」と言う。",
129
+ "「個人の印象」『内容』PC同士が出会い、事件の相談をするうちに、いずれかが片方のPCの印象や人柄について、感想を述べる場面を演出せよ。『終了条件』感想を言われたPCが「そうかな?」と言う。",
130
+ "「呪印について」『内容』PC同士が出会い、お互いの体に刻まれた[呪印]の正体について考える場面を演出せよ。『終了条件』いずれかのPCが、「……結局、謎だらけだということですね。また考えましょうか」と言う。",
131
+ "「不安と恐れ」『内容』PC同士が出会い、相談をするうちに【命運】の低いPCが不安を抱き、【命運】の高いPCが気遣う場面を演出せよ。『終了条件』【命運】の低いPCが「大丈夫です」と返す。",
132
+ "「情報交換」『内容』PC同士が出会い、現状を整理するために、情報交換を行う場面を演出せよ。『終了条件』いずれかのPCが「……また、新しい情報が手に入ったら連絡します」と言う。",
133
+ "「過去と秘密」『内容』PC同士が出会い、事件の相談を行った際、いずれかのPCが[関係性]を結んだ≪過去や秘密≫について語る。『終了条件』≪過去や秘密≫を語ったPCが「巻き込んでしまって、すいません」と言う。",
134
+ "「推理」『内容』PC同士が出会い、今回の事件の解決方法について、推理する場面を演出せよ。『終了条件』いずれかのPCが「もっと詳しく調べてみましょう。きっと、なにか良い方法があるはずです」と言う。",
135
+ "「協力関係」『内容』PC同士が出会い、いずれかのPCが今回の事件を生き抜くために、より協力関係を強めようと、提案する場面を演出せよ。『終了条件』提案されたほうのPCが、提案に承諾する。",
136
+ "「願いについて」『内容』PC同士が出会い、事件について推理するうちに、いずれかのPCが自身の[願い]について語る場面を演出せよ。『終了条件』[願い]を知ったPCが、それに対して個人的な感想を述べる。",
137
+ "「作戦会議」『内容』PC同士が出会い、【知性】の低いPCが【知性】の高いPCに良い知恵はないかと相談する場面を演出せよ。『終了条件』【知性】の高いPCが「……上手くいくかわかりませんが、ある方法を試してみます」と言う。",
138
+ "「方法はあるはずだ」『内容』PC同士が出会い、いずれかのPCが「生き残る方法は、必ずあるはずだ」と鼓舞する場面を演出せよ。『終了条件』鼓舞されたPCが、「そうですね……その方法を探してみましょう」と言う。",
139
+ ]
140
+ ),
141
+ "Foreshadow" => DiceTable::Table.new(
142
+ "伏線表",
143
+ "1D6",
144
+ [
145
+ "PCとの会話のなかで、ふと閃くものがあった。",
146
+ "謎の金属片が落ちていた。胸ポケットにしまっておこう。",
147
+ "会話の最中……突如、ある真実に気づいてしまった。",
148
+ "PCからの激励を耳にして、やけに気合が入った。",
149
+ "不安な情報を耳にした瞬間、大切な人の顔が浮かんだ。",
150
+ "そのとき、不思議な力が身のうちに宿った。",
151
+ ]
152
+ ),
153
+ "Emotion" => DiceTable::Table.new(
154
+ "感情表",
155
+ "1D6",
156
+ [
157
+ "尊敬",
158
+ "好意",
159
+ "友情",
160
+ "庇護",
161
+ "信頼",
162
+ "安心",
163
+ ]
164
+ ),
165
+ "Situation" => DiceTable::Table.new(
166
+ "状況表",
167
+ "1D6",
168
+ [
169
+ "「不運の連鎖」事件が関係しているのか、PCたちの周囲で次々と不幸が起こり始めている。なんとかして、この連鎖を止めなければ……。『使用可能能力値』【幸運】",
170
+ "「見えない恐怖」事件が発生してから、PCたちは誰かから監視されているような気がする。こんなときこそ、気を強く持たなければ……。『使用可能能力値』【精神】",
171
+ "「冷静な行動」立て続けに起こる怪奇現象のせいで、PCたちはやや混乱気味だ。しかし、こんなときこそ冷静に知恵を絞らねば……。『使用可能能力値』【知性】",
172
+ "「震えよ、止まれ」迫りくる恐怖のせいで、PCたちの心身は萎縮し、衰弱している。だが、こんなときこそ冷静に行動しなければ……。『使用可能能力値』【敏捷】",
173
+ "「危機はすぐそこ」得体のしれない<なにか>は、間違いなくそこまで迫ってきている。頼れるのはもはや、自分たちの肉体だけだ……。『使用可能能力値』【体力】",
174
+ "「運が味方」状況は逼迫しつつある。だが、幸運にも状況がPCたちに味方し始めた。なんとしてでも、このチャンスを活かさねば……。『使用可能能力値』各PCの任意の【能力値】",
175
+ ]
176
+ ),
177
+ "Target" => DiceTable::Table.new(
178
+ "対象表",
179
+ "1D6",
180
+ [
181
+ "【体力】が最も高い順",
182
+ "【敏捷】が最も高い順",
183
+ "【知性】が最も高い順",
184
+ "【精神】が最も高い順",
185
+ "【幸運】が最も高い順",
186
+ "【希望】が最も低い順",
187
+ ]
188
+ ),
189
+ "Insanity" => DiceTable::Table.new(
190
+ "狂気表",
191
+ "1D6",
192
+ [
193
+ "「逃げたい」次[フェイズ]の終了を迎えるまで、PCは恐怖のため、その場から一刻も早く立ち去りたいという衝動に駆られる様子を演出せよ。",
194
+ "「記憶の混濁」次[フェイズ]の終了を迎えるまで、PCはショックのあまり、見たものや聞いたものが何だったかを思い出せない様子を演出せよ。",
195
+ "「興奮状態」次[フェイズ]の終了を迎えるまで、PCは恐怖のあまり、些細なことでイライラし、PCに辛くあたった後、「……ごめんなさい」と、後悔する状況を演出せよ。",
196
+ "「怯えている」次[フェイズ]の終了を迎えるまで、PCは恐怖のあまり、先ほどから怯え続けている状況を演出せよ。",
197
+ "「緊張状態」次[フェイズ]の終了を迎えるまで、PCは極度の緊張状態で体の自由が利かず、転んだり、萎縮したりする状況を演出せよ。",
198
+ "「一時的発狂」次[フェイズ]の終了を迎えるまで、PCは衝撃のあまり、一時的に発狂してしまい、うわごとを何度も何度も繰り返してしまう状況を演出せよ。",
199
+ ]
200
+ ),
201
+ "Death" => DiceTable::Table.new(
202
+ "終焉表",
203
+ "1D6",
204
+ [
205
+ "「猟奇殺人」その後、PCは郊外の廃屋のなかでバラバラ死体となって発見された。警察は懸命に捜査を行ったが、結局、手がかりは見つからず、事件は迷宮入りした。",
206
+ "「変死」その後、PCが自室で変死しているのが発見された。PCの死因は出血多量。出血を引き起こした外傷は、まるで大きな獣に噛まれたような痕だった。",
207
+ "「自殺」その後、PCが郊外に放置された廃車のなかで、自殺しているのが発見された。だが、遺書は見つかっておらず、その理由は最後までわからずじまいであった。",
208
+ "「衰弱死」その後、PCは突如として体調を崩し、入院を余儀なくされた。検査を繰り返したものの、原因は不明のまま……やがて、PCは体重が半減して、衰弱死した。",
209
+ "「事故死」その後、PCは不慮の事故に遭い、この世を去った。だが、遺体解剖の結果、事故による外傷ではなく、直前に内臓破裂を起こしていたことが判明した。",
210
+ "「行方不明」その後、PCは行方不明となった。家族はPCの捜索届を出したが、結局、最後までPCが見つかることはなかった。",
211
+ ]
212
+ ),
213
+ "Fear" => DiceTable::Table.new(
214
+ "恐怖表",
215
+ "2D6",
216
+ [
217
+ "「不気味なモノ」血液、人骨のようなもの、大量の粘液など……奇妙なモノが突如、足元に落ちてきた。[効果算出]PC全員に5+[呪印÷2]d。",
218
+ "「早まる鼓動」突然のチャイム、突然の電話、突然の呼び声、突然の物音……不安のせいか、ただそれだけで、鼓動が早まる。[効果算出]PC3体に4+[呪印÷2]d。",
219
+ "「不安の種」無言電話、差出人不明のメッセージ、鍵穴についた深い傷、排水溝の長い髪の毛など……不安になるものを見つけてしまう。[効果算出]PC1体に4+[呪印÷2]d。",
220
+ "「異臭」生臭い匂い、鉄臭い匂い、花のような芳香など……普段嗅がない異臭が、一瞬だけ鼻孔をついた。[効果算出]PC2体に3+[呪印÷2]d。",
221
+ "「隙間」建物の影、ベッドの下、ふすまの隙間など……様々な死角から<なにか>の息遣い、気配が漂う。[効果算出]PC2体に2+[呪印÷2]d。",
222
+ "「視線」どこからか、強い視線を感じる……だが、そちらに目をやると、気配はすぐに消えてしまった。[効果算出]PC2体に2+[呪印÷2]d。",
223
+ "「異音」遠くから不思議な金属音や鐘の音、肉を潰すような音や粘着質な音などが聞こえた気がした。[効果算出]PC2体に3+[呪印÷2]d。",
224
+ "「接触」つい先ほど……なにかに触られたような、あるいは服を引っ張られたような気がした。[効果算出]PC3体に3+[呪印÷2]d。",
225
+ "「さっきのは?」隣を通り過ぎた人物、声をかけてきた人物、何かを渡してきた人物……しかし、ここには2人以外、誰もいないはずだ。[効果算出]PC2体に4+[呪印÷2]d。",
226
+ "「見てはいけない」次の行動に移ろうとしたそのとき、一瞬、通路の向こうに<なにか>が佇んでいるような気がした。[効果算出]PC1体に5+[呪印÷2]d。",
227
+ "「暗闇のなかへ」PCは突如として<なにか>に手足をつかまれ、暗闇へと引きずり込まれそうになる![効果算出]PC1体に6+[呪印÷2]d。",
228
+ ]
229
+ ),
230
+ }.transform_keys(&:upcase).freeze
231
+
232
+ ALIAS = {
233
+ "Dai" => "Daily",
234
+ "PCi" => "PlaceCity",
235
+ "PCo" => "PlaceCountryside",
236
+ "PFa" => "PlaceFacility",
237
+ "FL" => "FirstLook",
238
+ "AF" => "AppreciativeFriend",
239
+ "For" => "Foreshadow",
240
+ "Emo" => "Emotion",
241
+ "Sit" => "Situation",
242
+ "Tar" => "Target",
243
+ "Ins" => "Insanity",
244
+ "Dea" => "Death",
245
+ "Fea" => "Fear",
246
+ }.transform_keys(&:upcase).transform_values(&:upcase).freeze
247
+
248
+ register_prefix(TABLES.keys, ALIAS.keys)
249
+ end
250
+ end
251
+ end
@@ -28,7 +28,6 @@ module BCDice
28
28
  super(command)
29
29
 
30
30
  @sort_add_dice = true
31
- @enabled_d66 = true
32
31
  @d66_sort_type = D66SortType::NO_SORT
33
32
  end
34
33
 
@@ -39,94 +38,35 @@ module BCDice
39
38
  debug("eval_game_system_specific_command command", command)
40
39
 
41
40
  case command.upcase
42
-
43
- when "RT"
44
- tableName, result, number = getReimonCompensationTableResult
45
-
46
41
  when /^MT(\d*)$/
47
42
  rank = Regexp.last_match(1)
48
43
  rank ||= 1
49
44
  rank = rank.to_i
50
45
  tableName, result, number = getGetMaterialTableResult(rank)
51
-
52
46
  else
53
- return roll_tables(command, TABLES)
47
+ return roll_tables(command, self.class::TABLES)
54
48
  end
55
49
 
56
50
  if result.empty?
57
51
  return ""
58
52
  end
59
53
 
60
- text = "#{tableName}(#{number}):#{result}"
54
+ text = "#{tableName}(#{number}) > #{result}"
61
55
  return text
62
56
  end
63
57
 
64
- def getReimonCompensationTableResult
65
- tableName = "霊紋消費の代償表"
66
-
67
- table = [
68
- '邪神化:物理法則を超過しすぎた代償として、霊魂そのものが歪み、PCは即座にアラミタマへと変貌する。アラミタマ化したPCは、いずこかへと消え去る。',
69
- '存在消滅:アラミタマ化を最後の力で抑え込む。だがその結果、PCの霊魂は燃え尽きてしまい、この世界から消滅する。そのPCは[状態変化:死亡]となり死体も残らない。',
70
- '死亡:霊魂の歪みをかろうじて食い止めるが、霊魂が崩壊する。PCは[状態変化:死亡]となるが遺体は残る。',
71
- '霊魂半壊:霊魂の歪みを食い止めるものの、霊魂そのものに致命的な負傷を受け、全身に障害が残る。それに伴って霊紋も消滅し、一般人へと戻る。',
72
- '記憶消滅:奇跡的に霊魂の摩耗による身体的な悪影響を免れる。時間を置くことで霊紋も回復するが、精神的に影響を受け、すべての記憶を失ってしまう。',
73
- '影響なし:奇跡的に、霊魂の摩耗による悪影響を完全に退け、さらに霊紋の回復も早期を見込める。肉体や精神にも、特に影響はない。',
74
- ]
75
- result, number = get_table_by_1d6(table)
76
-
77
- return tableName, result, number
78
- end
79
-
80
58
  def getGetMaterialTableResult(rank)
81
- tableName = "獲得素材チャート"
82
- table = [
83
- '真紅の',
84
- 'ざらつく',
85
- '紺碧の',
86
- '鋭い',
87
- '黄金の',
88
- '柔らかな',
89
- '銀色の',
90
- '尖った',
91
- '純白の',
92
- '硬い',
93
- '漆黒の',
94
- '輝く',
95
- 'なめらかな',
96
- '濁った',
97
- 'ふさふさの',
98
- '邪悪な',
99
- '粘つく',
100
- '聖なる',
101
- '灼熱の',
102
- '炎の',
103
- '氷結の',
104
- '氷の',
105
- '熱い',
106
- '風の',
107
- '冷たい',
108
- '雷の',
109
- '土の',
110
- '幻の',
111
- '骨状の',
112
- '刻印の',
113
- '牙状の',
114
- '鱗状の',
115
- '石状の',
116
- '宝石状の',
117
- '毛皮状の',
118
- '羽根状の',
119
- ]
59
+ tableName = translate("Kamigakari.MT.name")
60
+ table = translate("Kamigakari.MT.items")
120
61
 
121
62
  result, number = get_table_by_d66(table)
122
- result += "断片"
123
63
 
124
64
  effect, number2 = getMaterialEffect(rank)
125
65
  number = "#{number},#{number2}"
126
66
 
127
67
  price = getPrice(effect)
128
68
 
129
- result = "#{result}。#{effect}"
69
+ result = translate("Kamigakari.MT.result_format", material: result, effect: effect)
130
70
  result += ":#{price}" unless price.nil?
131
71
 
132
72
  return tableName, result, number
@@ -139,10 +79,10 @@ module BCDice
139
79
  type = ""
140
80
  if number < 6
141
81
  result, number2 = getMaterialEffectNomal(rank)
142
- type = "よく見つかる素材"
82
+ type = translate("Kamigakari.MT.common_material.name")
143
83
  else
144
84
  result, number2 = getMaterialEffectRare()
145
- type = "珍しい素材"
85
+ type = translate("Kamigakari.MT.rare_material.name")
146
86
  end
147
87
 
148
88
  result = "#{type}:#{result}"
@@ -152,21 +92,7 @@ module BCDice
152
92
  end
153
93
 
154
94
  def getMaterialEffectNomal(rank)
155
- table = [
156
- [13, '体力+n'],
157
- [16, '敏捷+n'],
158
- [23, '知性+n'],
159
- [26, '精神+n'],
160
- [33, '幸運+n'],
161
- [35, '物D+n'],
162
- [41, '魔D+n'],
163
- [43, '行動+n'],
164
- [46, '生命+n×3'],
165
- [53, '装甲+n'],
166
- [56, '結界+n'],
167
- [63, '移動+nマス'],
168
- [66, '※PCの任意'],
169
- ]
95
+ table = translate("Kamigakari.MT.common_material.items")
170
96
 
171
97
  number = @randomizer.roll_d66(D66SortType::NO_SORT)
172
98
 
@@ -198,17 +124,19 @@ module BCDice
198
124
  end
199
125
 
200
126
  def getMaterialEffectRare()
201
- table = [[3, '**付与'],
202
- [5, '**半減'],
203
- [6, '※GMの任意'],]
127
+ table = [
128
+ [3, "**" + translate("Kamigakari.MT.rare_material.give_attribute")], # 付与
129
+ [5, "**" + translate("Kamigakari.MT.rare_material.halve_damage")], # 半減
130
+ [6, translate("Kamigakari.MT.rare_material.optional_by_GM")],
131
+ ]
204
132
 
205
133
  number = @randomizer.roll_once(6)
206
134
  result = get_table_by_number(number, table)
207
135
  debug('getMaterialEffectRare result', result)
208
136
 
209
- if result =~ /\*\*/
137
+ if result.include?("**")
210
138
  attribute, number2 = getAttribute()
211
- result = result.sub(/\*\*/, attribute.to_s)
139
+ result = result.sub("**", attribute.to_s)
212
140
  number = "#{number},#{number2}"
213
141
  end
214
142
 
@@ -216,16 +144,7 @@ module BCDice
216
144
  end
217
145
 
218
146
  def getAttribute()
219
- table = [
220
- [21, '[火炎]'],
221
- [33, '[冷気]'],
222
- [43, '[電撃]'],
223
- [53, '[風圧]'],
224
- [56, '[幻覚]'],
225
- [62, '[魔毒]'],
226
- [64, '[磁力]'],
227
- [66, '[閃光]'],
228
- ]
147
+ table = translate("Kamigakari.MT.attribute")
229
148
 
230
149
  number = @randomizer.roll_d66(D66SortType::NO_SORT)
231
150
 
@@ -235,160 +154,46 @@ module BCDice
235
154
  end
236
155
 
237
156
  def getPrice(effect)
238
- power = 0
239
-
240
- case effect
241
- when /\+(\d+)/
242
- power = Regexp.last_match(1).to_i
243
- when /付与/
244
- power = 3
245
- when /半減/
246
- power = 4
247
- else
248
- power = 0
249
- end
157
+ power =
158
+ if (m = effect.match(/\+(\d+)/))
159
+ m[1].to_i
160
+ elsif effect.include?(translate("Kamigakari.MT.rare_material.give_attribute")) # 付与
161
+ 3
162
+ elsif effect.include?(translate("Kamigakari.MT.rare_material.halve_damage")) # 半減
163
+ 4
164
+ else
165
+ 0
166
+ end
250
167
 
251
- table = [nil,
252
- '500G(効果値:1)',
253
- '1000G(効果値:2)',
254
- '1500G(効果値:3)',
255
- '2000G(効果値:4)',
256
- '3000G(効果値:5)',]
168
+ table = [
169
+ nil,
170
+ "500G(#{translate('Kamigakari.MT.effect_power')}:1)",
171
+ "1000G(#{translate('Kamigakari.MT.effect_power')}:2)",
172
+ "1500G(#{translate('Kamigakari.MT.effect_power')}:3)",
173
+ "2000G(#{translate('Kamigakari.MT.effect_power')}:4)",
174
+ "3000G(#{translate('Kamigakari.MT.effect_power')}:5)",
175
+ ]
257
176
  price = table[power]
258
177
 
259
178
  return price
260
179
  end
261
180
 
262
- TABLES = {
263
- "ET" => DiceTable::D66Table.new(
264
- "感情表",
265
- D66SortType::NO_SORT,
266
- {
267
- 11 => "運命/そのキャラクターに、運命的、あるいは宿命的なものを感じている。",
268
- 12 => "運命/そのキャラクターに、運命的、あるいは宿命的なものを感じている。",
269
- 13 => "家族/そのキャラクターに、家族のような親近感をいだいている。",
270
- 14 => "家族/そのキャラクターに、家族のような親近感をいだいている。",
271
- 15 => "腐れ縁/そのキャラクターに、腐れ縁を感じている。",
272
- 16 => "腐れ縁/そのキャラクターに、腐れ縁を感じている。",
273
- 21 => "師弟/そのキャラクターとは、まるで師弟のような関係だと感じている。どちらが弟子で、どちらが師匠かは相談して決定する。",
274
- 22 => "師弟/そのキャラクターとは、まるで師弟のような関係だと感じている。どちらが弟子で、どちらが師匠かは相談して決定する。",
275
- 23 => "好敵手/そのキャラクターを、好敵手だと感じている。",
276
- 24 => "好敵手/そのキャラクターを、好敵手だと感じている。",
277
- 25 => "親近感/そのキャラクターに、親近感をいだいている。",
278
- 26 => "親近感/そのキャラクターに、親近感をいだいている。",
279
- 31 => "誠意/そのキャラクターに、誠実さを感じている。",
280
- 32 => "誠意/そのキャラクターに、誠実さを感じている。",
281
- 33 => "友情/そのキャラクターに、友情をいだいている。",
282
- 34 => "友情/そのキャラクターに、友情をいだいている。",
283
- 35 => "尊敬/そのキャラクターに、尊敬をいだいている。",
284
- 36 => "尊敬/そのキャラクターに、尊敬をいだいている。",
285
- 41 => "庇護/そのキャラクターに、庇護の感情をいだいている。どちらが保護者で、どちらが被保護者かは相談して決定する。",
286
- 42 => "庇護/そのキャラクターに、庇護の感情をいだいている。どちらが保護者で、どちらが被保護者かは相談して決定する。",
287
- 43 => "好感/そのキャラクターに、好感をいだいている。",
288
- 44 => "好感/そのキャラクターに、好感をいだいている。",
289
- 45 => "興味/そのキャラクターに、興味をいだいている。",
290
- 46 => "興味/そのキャラクターに、興味をいだいている。",
291
- 51 => "感銘/そのキャラクターに、感銘をいだいている。",
292
- 52 => "感銘/そのキャラクターに、感銘をいだいている。",
293
- 53 => "畏怖/そのキャラクターに、畏怖をいだいている。",
294
- 54 => "畏怖/そのキャラクターに、畏怖をいだいている。",
295
- 55 => "お気に入り/そのキャラクターを、気に入っている。",
296
- 56 => "お気に入り/そのキャラクターを、気に入っている。",
297
- 61 => "愛情/そのキャラクターに愛情、またはそれに近い執着心をいだいている。",
298
- 62 => "愛情/そのキャラクターに愛情、またはそれに近い執着心をいだいている。",
299
- 63 => "信頼/そのキャラクターに、信頼を感じている。",
300
- 64 => "信頼/そのキャラクターに、信頼を感じている。",
301
- 65 => "*PCの任意/プレイヤー、またはGMが設定した任意の感情をいだいている。",
302
- 66 => "*PCの任意/プレイヤー、またはGMが設定した任意の感情をいだいている。"
303
- }
304
- ),
305
- "KT" => DiceTable::D66Table.new(
306
- "魔境臨界表",
307
- D66SortType::NO_SORT,
308
- {
309
- 11 => "時空の捻じれ\n現在地の時空が捻じれ、PC全員は即時に[侵入エリア]へと戻る。",
310
- 12 => "時空の捻じれ\n現在地の時空が捻じれ、PC全員は即時に[侵入エリア]へと戻る。",
311
- 13 => "強敵登場\n突如、<崇り神>化した[モノノケ]が出撃する。GMは、PCの[世界干渉LV]の平均+3の[LV]を持つ任意の[モノノケ]を1体選び任意の[探索エリア]に配置。そこでは[迂回]不可で[戦闘]が発生する。",
312
- 14 => "強敵登場\n突如、<崇り神>化した[モノノケ]が出撃する。GMは、PCの[世界干渉LV]の平均+3の[LV]を持つ任意の[モノノケ]を1体選び任意の[探索エリア]に配置。そこでは[迂回]不可で[戦闘]が発生する。",
313
- 15 => "影の手\n瘴気で形成された無数の手がPC達を握りつぶそうとする。PC全員は[効果種別:魔法攻撃/距離:戦闘地帯/対象:戦闘地帯/達成値:20+PCの[世界干渉LV]の平均/魔法ダメージ:20×PCの[世界干渉LV]の平均/抵抗[半減]]を受ける。",
314
- 16 => "影の手\n瘴気で形成された無数の手がPC達を握りつぶそうとする。PC全員は[効果種別:魔法攻撃/距離:戦闘地帯/対象:戦闘地帯/達成値:20+PCの[世界干渉LV]の平均/魔法ダメージ:20×PCの[世界干渉LV]の平均/抵抗[半減]]を受ける。",
315
- 21 => "無数の邪眼\n空間全体に恐ろしい邪眼が出現する。PC全員は、[大休止]するまで[状態変化:暗闇・苦痛]となる。",
316
- 22 => "無数の邪眼\n空間全体に恐ろしい邪眼が出現する。PC全員は、[大休止]するまで[状態変化:暗闇・苦痛]となる。",
317
- 23 => "空間崩壊\n突如として、魔境の空間が崩壊する。PC全員は[効果種別:物理攻撃/距離:戦闘地帯/対象:戦闘地帯/達成値:30+PCの[世界干渉LV]の平均/物理ダメージ:30×PCの[世界干渉LV]の平均]]を受ける。",
318
- 24 => "空間崩壊\n突如として、魔境の空間が崩壊する。PC全員は[効果種別:物理攻撃/距離:戦闘地帯/対象:戦闘地帯/達成値:30+PCの[世界干渉LV]の平均/物理ダメージ:30×PCの[世界干渉LV]の平均]]を受ける。",
319
- 25 => "防具腐食\n周辺から異様な霧が立ち込め、防具を腐食する。PC全員は、[所持・装備]中の任意の[アイテム:防具]1つを失う。",
320
- 26 => "防具腐食\n周辺から異様な霧が立ち込め、防具を腐食する。PC全員は、[所持・装備]中の任意の[アイテム:防具]1つを失う。",
321
- 31 => "素材消失\n周囲から異様な光が零れ、所持中の[素材]を消失させる。PC全員が[所持]中の[素材]が、すべて消滅する。",
322
- 32 => "素材消失\n周囲から異様な光が零れ、所持中の[素材]を消失させる。PC全員が[所持]中の[素材]が、すべて消滅する。",
323
- 33 => "なし\n特に何も起こらない。",
324
- 34 => "なし\n特に何も起こらない。",
325
- 35 => "モノノケ強襲\n突如として<崇り神>化した[モノノケ]が出現し、PCたちに襲いかかる。GMはPCの[世界干渉LV]の平均+2の[LV]を持つ任意の[モノノケ]を2体選び、PC達の前に出現させ、即座に[戦闘]を開始する。",
326
- 36 => "モノノケ強襲\n突如として<崇り神>化した[モノノケ]が出現し、PCたちに襲いかかる。GMはPCの[世界干渉LV]の平均+2の[LV]を持つ任意の[モノノケ]を2体選び、PC達の前に出現させ、即座に[戦闘]を開始する。",
327
- 41 => "休息妨害\nPCが休息しようとするたびに、さまざまな空間から、触手や毒蠱などが出現して襲いかかってくる。PCたちは以降、[魔境討伐]が終了するまで[大休止]を行えない。",
328
- 42 => "休息妨害\nPCが休息しようとするたびに、さまざまな空間から、触手や毒蠱などが出現して襲いかかってくる。PCたちは以降、[魔境討伐]が終了するまで[大休止]を行えない。",
329
- 43 => "龍脈破壊\n霊力が暴走して空間が歪み、[霊力]が狂う。PC全員は即座に[霊力]をすべて振り直す。",
330
- 44 => "龍脈破壊\n霊力が暴走して空間が歪み、[霊力]が狂う。PC全員は即座に[霊力]をすべて振り直す。",
331
- 45 => "固有時間停止\nPCたちの肉体の一部が灰色と化し、動かなくなる。PC全員は[タイミング:準備・防御・特殊]から1つ選び、以後その[タイミング]を消費できなくなる。",
332
- 46 => "固有時間停止\nPCたちの肉体の一部が灰色と化し、動かなくなる。PC全員は[タイミング:準備・防御・特殊]から1つ選び、以後その[タイミング]を消費できなくなる。",
333
- 51 => "龍脈不順\n霊力が突如として混濁し、[霊力]の循環に悪影響が発生する。PC全員は以後、[魔境討伐]が終了するまで[霊力操作]が行えない。",
334
- 52 => "龍脈不順\n霊力が突如として混濁し、[霊力]の循環に悪影響が発生する。PC全員は以後、[魔境討伐]が終了するまで[霊力操作]が行えない。",
335
- 53 => "術技封印\n周囲の空気が変貌し、悪影響が起こる。PC全員は以後、修得済みの《タレント》中、使用する[コスト]が最も多いもの1つが[魔境討伐]終了まで使用不能となる。[コスト:なし]ばかりの場合、GMが任意で1つを決定する。",
336
- 54 => "術技封印\n周囲の空気が変貌し、悪影響が起こる。PC全員は以後、修得済みの《タレント》中、使用する[コスト]が最も多いもの1つが[魔境討伐]終了まで使用不能となる。[コスト:なし]ばかりの場合、GMが任意で1つを決定する。",
337
- 55 => "装飾品消滅\n周囲が青い光に包まれると、なぜかPCたちの装飾品が失われている。PC全員は[所持・装備中]の[アイテム・装飾]をすべて失う。",
338
- 56 => "装飾品消滅\n周囲が青い光に包まれると、なぜかPCたちの装飾品が失われている。PC全員は[所持・装備中]の[アイテム・装飾]をすべて失う。",
339
- 61 => "愚者の黄金消失\n周囲が赤い光に包まれると、なぜかPCたちの[G]が失われている。PC全員は、[所持金]が[半減]する。",
340
- 62 => "愚者の黄金消失\n周囲が赤い光に包まれると、なぜかPCたちの[G]が失われている。PC全員は、[所持金]が[半減]する。",
341
- 63 => "GMの任意\nこの表のなかから、GMが効果を1つ選んで発生させる。",
342
- 64 => "GMの任意\nこの表のなかから、GMが効果を1つ選んで発生させる。",
343
- 65 => "臨界重複\n[魔境臨界]が2回発生する。GMはこの表を2回振り、効果をそれぞれ適応できる。再び「臨界重複」が発生した場合、[GMの任意]1回として扱う。",
344
- 66 => "臨界重複\n[魔境臨界]が2回発生する。GMはこの表を2回振り、効果をそれぞれ適応できる。再び「臨界重複」が発生した場合、[GMの任意]1回として扱う。"
345
- }
346
- ),
347
- "NT" => DiceTable::D66Table.new(
348
- "伝奇名字・名前決定表",
349
- D66SortType::NO_SORT,
181
+ class << self
182
+ private
183
+
184
+ def translate_tables(locale)
350
185
  {
351
- 11 => "御剣(みつるぎ) 陸/凛",
352
- 12 => "獅子内(ししうち) 大和/楓",
353
- 13 => "白銀(はくぎん) 隼人/桜",
354
- 14 => "竹内(たけのうち) 真/遥",
355
- 15 => "古太刀(こだち) 大地/美咲",
356
- 16 => "空閑(くが) 俊/真央",
357
- 21 => "鬼形(おにがた) 諒/舞",
358
- 22 => "御巫(みかんなぎ) 匠/七海",
359
- 23 => "護摩堂(ごまどう) 仁/千尋",
360
- 24 => "龍円(りゅうえん) 拓真/茜",
361
- 25 => "鏡部(かがみべ) 京/明日香",
362
- 26 => "犬神(いぬがみ) 剛/栞",
363
- 31 => "明月院(めいげついん) 葵/唯",
364
- 32 => "百目鬼(どうめき) 蓮也/萌",
365
- 33 => "恐神(おそがみ) 達也/綾香",
366
- 34 => "蘭(あららぎ) 龍之介/梓",
367
- 35 => "珠輝(たまき) 章/瞳",
368
- 36 => "眼龍(がんりゅう) 圭/沙織",
369
- 41 => "鉄砲塚(てっぽうづか) 雅人/沙良",
370
- 42 => "檻神(おりがみ) 直哉/弥生",
371
- 43 => "不死原(ふじわら) 純/千秋",
372
- 44 => "九郎座(くろうざ) 武蔵/春菜",
373
- 45 => "土御門(つちみかど) 亮介/翠",
374
- 46 => "十六夜(いざよい) 啓二/双葉",
375
- 51 => "転法輪(てんぽうりん) 英雄/麗菜",
376
- 52 => "執行(しぎょう) 響/小百合",
377
- 53 => "祝(ほうり) 良太郎/陽奈",
378
- 54 => "神尊(こうそ) 智/紫苑",
379
- 55 => "芦屋(あしや) 孝之/香澄",
380
- 56 => "七社(ななしゃ) 克己/風香",
381
- 61 => "騎馬(きば) 哲也/詩乃",
382
- 62 => "当麻(とうま) 玄/沙耶",
383
- 63 => "狐塚(きつねづか) 北斗/麻耶",
384
- 64 => "天神林(てんじんばやし) 空/晶",
385
- 65 => "明嵐(めあらし) 八雲/乙葉",
386
- 66 => "草壁(くさかべ) 大悟/文"
186
+ "RT" => DiceTable::Table.from_i18n("Kamigakari.table.RT", locale),
187
+ "ET" => DiceTable::D66Table.from_i18n("Kamigakari.table.ET", locale),
188
+ "KT" => DiceTable::D66Table.from_i18n("Kamigakari.table.KT", locale),
189
+ "NT" => DiceTable::D66Table.from_i18n("Kamigakari.table.NT", locale),
387
190
  }
388
- ),
389
- }.freeze
191
+ end
192
+ end
193
+
194
+ TABLES = translate_tables(:ja_jp)
390
195
 
391
- register_prefix(['RT', 'MT(\d*)'] + TABLES.keys)
196
+ register_prefix('MT(\d*)', TABLES.keys)
392
197
  end
393
198
  end
394
199
  end