bcdice 3.0.0.pre.alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +21 -0
  3. data/.github/.codecov.yaml +10 -0
  4. data/.github/workflows/coverage.yaml +21 -0
  5. data/.github/workflows/lint.yaml +13 -0
  6. data/.github/workflows/test.yml +20 -0
  7. data/.gitignore +14 -0
  8. data/.rubocop.yml +96 -0
  9. data/.rubocop_todo.yml +113 -0
  10. data/CHANGELOG.md +868 -0
  11. data/Gemfile +11 -0
  12. data/LICENSE +29 -0
  13. data/README.md +38 -0
  14. data/ROADMAP.md +30 -0
  15. data/Rakefile +118 -0
  16. data/bcdice.gemspec +27 -0
  17. data/bin/repl.rb +21 -0
  18. data/docs/README.txt +2028 -0
  19. data/docs/dicebot_sort_key.md +72 -0
  20. data/docs/how_to_make_dicebot.md +453 -0
  21. data/lib/bcdice.rb +8 -0
  22. data/lib/bcdice/arithmetic_evaluator.rb +167 -0
  23. data/lib/bcdice/base.rb +423 -0
  24. data/lib/bcdice/command_parser.rb +242 -0
  25. data/lib/bcdice/common_command.rb +23 -0
  26. data/lib/bcdice/common_command/add_dice.rb +54 -0
  27. data/lib/bcdice/common_command/add_dice/node.rb +488 -0
  28. data/lib/bcdice/common_command/add_dice/parser.rb +282 -0
  29. data/lib/bcdice/common_command/add_dice/randomizer.rb +48 -0
  30. data/lib/bcdice/common_command/barabara_dice.rb +57 -0
  31. data/lib/bcdice/common_command/calc.rb +39 -0
  32. data/lib/bcdice/common_command/choice.rb +35 -0
  33. data/lib/bcdice/common_command/d66_dice.rb +63 -0
  34. data/lib/bcdice/common_command/reroll_dice.rb +190 -0
  35. data/lib/bcdice/common_command/upper_dice.rb +165 -0
  36. data/lib/bcdice/common_command/version.rb +26 -0
  37. data/lib/bcdice/dice_table.rb +8 -0
  38. data/lib/bcdice/dice_table/chain_table.rb +33 -0
  39. data/lib/bcdice/dice_table/d66_grid_table.rb +26 -0
  40. data/lib/bcdice/dice_table/d66_range_table.rb +26 -0
  41. data/lib/bcdice/dice_table/d66_table.rb +34 -0
  42. data/lib/bcdice/dice_table/range_table.rb +267 -0
  43. data/lib/bcdice/dice_table/roll_result.rb +43 -0
  44. data/lib/bcdice/dice_table/sai_fic_skill_table.rb +32 -0
  45. data/lib/bcdice/dice_table/table.rb +35 -0
  46. data/lib/bcdice/enum.rb +15 -0
  47. data/lib/bcdice/format.rb +36 -0
  48. data/lib/bcdice/game_system.rb +187 -0
  49. data/lib/bcdice/game_system/AFF2e.rb +141 -0
  50. data/lib/bcdice/game_system/AceKillerGene.rb +55 -0
  51. data/lib/bcdice/game_system/Airgetlamh.rb +117 -0
  52. data/lib/bcdice/game_system/Alsetto.rb +124 -0
  53. data/lib/bcdice/game_system/Alshard.rb +27 -0
  54. data/lib/bcdice/game_system/AlterRaise.rb +282 -0
  55. data/lib/bcdice/game_system/Amadeus.rb +622 -0
  56. data/lib/bcdice/game_system/Amadeus_Korean.rb +501 -0
  57. data/lib/bcdice/game_system/AnimaAnimus.rb +96 -0
  58. data/lib/bcdice/game_system/Arianrhod.rb +50 -0
  59. data/lib/bcdice/game_system/ArsMagica.rb +149 -0
  60. data/lib/bcdice/game_system/Avandner.rb +101 -0
  61. data/lib/bcdice/game_system/BBN.rb +143 -0
  62. data/lib/bcdice/game_system/BadLife.rb +435 -0
  63. data/lib/bcdice/game_system/BarnaKronika.rb +188 -0
  64. data/lib/bcdice/game_system/BattleTech.rb +530 -0
  65. data/lib/bcdice/game_system/BeastBindTrinity.rb +348 -0
  66. data/lib/bcdice/game_system/BeginningIdol.rb +2527 -0
  67. data/lib/bcdice/game_system/BeginningIdol_Korean.rb +2378 -0
  68. data/lib/bcdice/game_system/BladeOfArcana.rb +252 -0
  69. data/lib/bcdice/game_system/BlindMythos.rb +460 -0
  70. data/lib/bcdice/game_system/BloodCrusade.rb +423 -0
  71. data/lib/bcdice/game_system/BloodMoon.rb +213 -0
  72. data/lib/bcdice/game_system/CardRanker.rb +249 -0
  73. data/lib/bcdice/game_system/ChaosFlare.rb +181 -0
  74. data/lib/bcdice/game_system/Chill.rb +163 -0
  75. data/lib/bcdice/game_system/Chill3.rb +52 -0
  76. data/lib/bcdice/game_system/CodeLayerd.rb +132 -0
  77. data/lib/bcdice/game_system/ColossalHunter.rb +569 -0
  78. data/lib/bcdice/game_system/CrashWorld.rb +81 -0
  79. data/lib/bcdice/game_system/Cthulhu.rb +252 -0
  80. data/lib/bcdice/game_system/Cthulhu7th.rb +767 -0
  81. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +386 -0
  82. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +383 -0
  83. data/lib/bcdice/game_system/CthulhuTech.rb +263 -0
  84. data/lib/bcdice/game_system/Cthulhu_ChineseTraditional.rb +243 -0
  85. data/lib/bcdice/game_system/Cthulhu_Korean.rb +240 -0
  86. data/lib/bcdice/game_system/DarkBlaze.rb +207 -0
  87. data/lib/bcdice/game_system/DarkDaysDrive.rb +425 -0
  88. data/lib/bcdice/game_system/DarkSouls.rb +91 -0
  89. data/lib/bcdice/game_system/DeadlineHeroes.rb +583 -0
  90. data/lib/bcdice/game_system/DemonParasite.rb +524 -0
  91. data/lib/bcdice/game_system/DetatokoSaga.rb +310 -0
  92. data/lib/bcdice/game_system/DetatokoSaga_Korean.rb +310 -0
  93. data/lib/bcdice/game_system/DiceBot.rb +17 -0
  94. data/lib/bcdice/game_system/DiceOfTheDead.rb +111 -0
  95. data/lib/bcdice/game_system/DoubleCross.rb +373 -0
  96. data/lib/bcdice/game_system/DoubleCross_Korean.rb +371 -0
  97. data/lib/bcdice/game_system/Dracurouge.rb +1856 -0
  98. data/lib/bcdice/game_system/Dracurouge_Korean.rb +310 -0
  99. data/lib/bcdice/game_system/DungeonsAndDragons.rb +19 -0
  100. data/lib/bcdice/game_system/EarthDawn.rb +225 -0
  101. data/lib/bcdice/game_system/EarthDawn3.rb +275 -0
  102. data/lib/bcdice/game_system/EarthDawn4.rb +272 -0
  103. data/lib/bcdice/game_system/EclipsePhase.rb +51 -0
  104. data/lib/bcdice/game_system/Elric.rb +36 -0
  105. data/lib/bcdice/game_system/Elysion.rb +1213 -0
  106. data/lib/bcdice/game_system/EmbryoMachine.rb +227 -0
  107. data/lib/bcdice/game_system/EndBreaker.rb +132 -0
  108. data/lib/bcdice/game_system/EtrianOdysseySRS.rb +27 -0
  109. data/lib/bcdice/game_system/Fiasco.rb +123 -0
  110. data/lib/bcdice/game_system/Fiasco_Korean.rb +122 -0
  111. data/lib/bcdice/game_system/FilledWith.rb +1543 -0
  112. data/lib/bcdice/game_system/FullMetalPanic.rb +27 -0
  113. data/lib/bcdice/game_system/FutariSousa.rb +994 -0
  114. data/lib/bcdice/game_system/FutariSousa_Korean.rb +994 -0
  115. data/lib/bcdice/game_system/Garako.rb +559 -0
  116. data/lib/bcdice/game_system/GardenOrder.rb +451 -0
  117. data/lib/bcdice/game_system/GehennaAn.rb +136 -0
  118. data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +120 -0
  119. data/lib/bcdice/game_system/GoblinSlayer.rb +168 -0
  120. data/lib/bcdice/game_system/GoldenSkyStories.rb +77 -0
  121. data/lib/bcdice/game_system/Gorilla.rb +44 -0
  122. data/lib/bcdice/game_system/GranCrest.rb +518 -0
  123. data/lib/bcdice/game_system/Gundog.rb +52 -0
  124. data/lib/bcdice/game_system/GundogRevised.rb +294 -0
  125. data/lib/bcdice/game_system/GundogZero.rb +261 -0
  126. data/lib/bcdice/game_system/Gurps.rb +403 -0
  127. data/lib/bcdice/game_system/GurpsFW.rb +2330 -0
  128. data/lib/bcdice/game_system/HarnMaster.rb +208 -0
  129. data/lib/bcdice/game_system/HatsuneMiku.rb +706 -0
  130. data/lib/bcdice/game_system/Hieizan.rb +48 -0
  131. data/lib/bcdice/game_system/HouraiGakuen.rb +270 -0
  132. data/lib/bcdice/game_system/HuntersMoon.rb +503 -0
  133. data/lib/bcdice/game_system/Illusio.rb +89 -0
  134. data/lib/bcdice/game_system/InfiniteFantasia.rb +51 -0
  135. data/lib/bcdice/game_system/Insane.rb +822 -0
  136. data/lib/bcdice/game_system/Insane_Korean.rb +773 -0
  137. data/lib/bcdice/game_system/IthaWenUa.rb +38 -0
  138. data/lib/bcdice/game_system/JamesBond.rb +45 -0
  139. data/lib/bcdice/game_system/Kamigakari.rb +394 -0
  140. data/lib/bcdice/game_system/Kamigakari_Korean.rb +428 -0
  141. data/lib/bcdice/game_system/KanColle.rb +938 -0
  142. data/lib/bcdice/game_system/KemonoNoMori.rb +258 -0
  143. data/lib/bcdice/game_system/KillDeathBusiness.rb +1420 -0
  144. data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +1510 -0
  145. data/lib/bcdice/game_system/KurayamiCrying.rb +49 -0
  146. data/lib/bcdice/game_system/LiveraDoll.rb +375 -0
  147. data/lib/bcdice/game_system/LogHorizon.rb +3567 -0
  148. data/lib/bcdice/game_system/LogHorizon_Korean.rb +1407 -0
  149. data/lib/bcdice/game_system/LostRecord.rb +30 -0
  150. data/lib/bcdice/game_system/LostRoyal.rb +242 -0
  151. data/lib/bcdice/game_system/MagicaLogia.rb +1148 -0
  152. data/lib/bcdice/game_system/MeikyuDays.rb +415 -0
  153. data/lib/bcdice/game_system/MeikyuKingdom.rb +466 -0
  154. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +269 -0
  155. data/lib/bcdice/game_system/MetalHead.rb +249 -0
  156. data/lib/bcdice/game_system/MetalHeadExtream.rb +917 -0
  157. data/lib/bcdice/game_system/MetallicGuardian.rb +31 -0
  158. data/lib/bcdice/game_system/MonotoneMuseum.rb +354 -0
  159. data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +304 -0
  160. data/lib/bcdice/game_system/Nechronica.rb +211 -0
  161. data/lib/bcdice/game_system/Nechronica_Korean.rb +160 -0
  162. data/lib/bcdice/game_system/NeverCloud.rb +74 -0
  163. data/lib/bcdice/game_system/NightWizard.rb +231 -0
  164. data/lib/bcdice/game_system/NightWizard3rd.rb +24 -0
  165. data/lib/bcdice/game_system/NightmareHunterDeep.rb +117 -0
  166. data/lib/bcdice/game_system/NinjaSlayer.rb +274 -0
  167. data/lib/bcdice/game_system/NjslyrBattle.rb +54 -0
  168. data/lib/bcdice/game_system/Nuekagami.rb +293 -0
  169. data/lib/bcdice/game_system/OneWayHeroics.rb +134 -0
  170. data/lib/bcdice/game_system/OracleEngine.rb +265 -0
  171. data/lib/bcdice/game_system/OrgaRain.rb +77 -0
  172. data/lib/bcdice/game_system/Oukahoushin3rd.rb +162 -0
  173. data/lib/bcdice/game_system/Paradiso.rb +323 -0
  174. data/lib/bcdice/game_system/Paranoia.rb +64 -0
  175. data/lib/bcdice/game_system/ParanoiaRebooted.rb +109 -0
  176. data/lib/bcdice/game_system/ParasiteBlood.rb +231 -0
  177. data/lib/bcdice/game_system/Pathfinder.rb +21 -0
  178. data/lib/bcdice/game_system/Peekaboo.rb +324 -0
  179. data/lib/bcdice/game_system/Pendragon.rb +39 -0
  180. data/lib/bcdice/game_system/PhantasmAdventure.rb +73 -0
  181. data/lib/bcdice/game_system/Postman.rb +185 -0
  182. data/lib/bcdice/game_system/PulpCthulhu.rb +184 -0
  183. data/lib/bcdice/game_system/Raisondetre.rb +171 -0
  184. data/lib/bcdice/game_system/RecordOfLodossWar.rb +58 -0
  185. data/lib/bcdice/game_system/RecordOfSteam.rb +149 -0
  186. data/lib/bcdice/game_system/RokumonSekai2.rb +110 -0
  187. data/lib/bcdice/game_system/RoleMaster.rb +24 -0
  188. data/lib/bcdice/game_system/RuneQuest.rb +47 -0
  189. data/lib/bcdice/game_system/RyuTuber.rb +266 -0
  190. data/lib/bcdice/game_system/Ryutama.rb +199 -0
  191. data/lib/bcdice/game_system/SRS.rb +348 -0
  192. data/lib/bcdice/game_system/SamsaraBallad.rb +111 -0
  193. data/lib/bcdice/game_system/Satasupe.rb +1173 -0
  194. data/lib/bcdice/game_system/ScreamHighSchool.rb +128 -0
  195. data/lib/bcdice/game_system/SevenFortressMobius.rb +34 -0
  196. data/lib/bcdice/game_system/ShadowRun.rb +26 -0
  197. data/lib/bcdice/game_system/ShadowRun4.rb +49 -0
  198. data/lib/bcdice/game_system/ShadowRun5.rb +80 -0
  199. data/lib/bcdice/game_system/SharedFantasia.rb +69 -0
  200. data/lib/bcdice/game_system/ShinMegamiTenseiKakuseihen.rb +85 -0
  201. data/lib/bcdice/game_system/ShinkuuGakuen.rb +506 -0
  202. data/lib/bcdice/game_system/ShinobiGami.rb +680 -0
  203. data/lib/bcdice/game_system/ShoujoTenrankai.rb +677 -0
  204. data/lib/bcdice/game_system/Skynauts.rb +324 -0
  205. data/lib/bcdice/game_system/SteamPunkers.rb +485 -0
  206. data/lib/bcdice/game_system/StellarKnights.rb +856 -0
  207. data/lib/bcdice/game_system/SterileLife.rb +452 -0
  208. data/lib/bcdice/game_system/StrangerOfSwordCity.rb +103 -0
  209. data/lib/bcdice/game_system/StratoShout.rb +316 -0
  210. data/lib/bcdice/game_system/StratoShout_Korean.rb +314 -0
  211. data/lib/bcdice/game_system/Strave.rb +223 -0
  212. data/lib/bcdice/game_system/SwordWorld.rb +491 -0
  213. data/lib/bcdice/game_system/SwordWorld2_0.rb +295 -0
  214. data/lib/bcdice/game_system/SwordWorld2_5.rb +121 -0
  215. data/lib/bcdice/game_system/TherapieSein.rb +93 -0
  216. data/lib/bcdice/game_system/TokumeiTenkousei.rb +96 -0
  217. data/lib/bcdice/game_system/TokyoGhostResearch.rb +122 -0
  218. data/lib/bcdice/game_system/TokyoNova.rb +19 -0
  219. data/lib/bcdice/game_system/Torg.rb +364 -0
  220. data/lib/bcdice/game_system/Torg1_5.rb +139 -0
  221. data/lib/bcdice/game_system/TorgEternity.rb +414 -0
  222. data/lib/bcdice/game_system/TrinitySeven.rb +364 -0
  223. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +287 -0
  224. data/lib/bcdice/game_system/TwilightGunsmoke.rb +527 -0
  225. data/lib/bcdice/game_system/Utakaze.rb +153 -0
  226. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +132 -0
  227. data/lib/bcdice/game_system/Villaciel.rb +555 -0
  228. data/lib/bcdice/game_system/WARPS.rb +33 -0
  229. data/lib/bcdice/game_system/WaresBlade.rb +34 -0
  230. data/lib/bcdice/game_system/Warhammer.rb +336 -0
  231. data/lib/bcdice/game_system/WitchQuest.rb +275 -0
  232. data/lib/bcdice/game_system/WorldOfDarkness.rb +135 -0
  233. data/lib/bcdice/game_system/YankeeYogSothoth.rb +440 -0
  234. data/lib/bcdice/game_system/YearZeroEngine.rb +134 -0
  235. data/lib/bcdice/game_system/ZettaiReido.rb +142 -0
  236. data/lib/bcdice/game_system/meikyu_kingdom/item_table.rb +383 -0
  237. data/lib/bcdice/game_system/meikyu_kingdom/kingdom_name_table.rb +89 -0
  238. data/lib/bcdice/game_system/meikyu_kingdom/landscape_table.rb +196 -0
  239. data/lib/bcdice/game_system/meikyu_kingdom/name_tables.rb +223 -0
  240. data/lib/bcdice/game_system/meikyu_kingdom/placename_table.rb +214 -0
  241. data/lib/bcdice/game_system/meikyu_kingdom/tables.rb +610 -0
  242. data/lib/bcdice/game_system/meikyu_kingdom/word_table.rb +117 -0
  243. data/lib/bcdice/game_system/meikyu_kingdom_basic/item_table.rb +380 -0
  244. data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +184 -0
  245. data/lib/bcdice/game_system/meikyu_kingdom_basic/name_table.rb +417 -0
  246. data/lib/bcdice/game_system/meikyu_kingdom_basic/table.rb +912 -0
  247. data/lib/bcdice/game_system/meikyu_kingdom_basic/word_table.rb +121 -0
  248. data/lib/bcdice/game_system/one_way_heroics/dungeon_table.rb +67 -0
  249. data/lib/bcdice/game_system/one_way_heroics/random_event_table.rb +166 -0
  250. data/lib/bcdice/game_system/one_way_heroics/tables.rb +668 -0
  251. data/lib/bcdice/loader.rb +37 -0
  252. data/lib/bcdice/normalize.rb +38 -0
  253. data/lib/bcdice/preprocessor.rb +87 -0
  254. data/lib/bcdice/randomizer.rb +137 -0
  255. data/lib/bcdice/repl.rb +155 -0
  256. data/lib/bcdice/user_defined_dice_table.rb +153 -0
  257. data/lib/bcdice/version.rb +3 -0
  258. metadata +304 -0
@@ -0,0 +1,252 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class BladeOfArcana < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'BladeOfArcana'
8
+
9
+ # ゲームシステム名
10
+ NAME = 'ブレイド・オブ・アルカナ'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'ふれいとおふあるかな'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
17
+ ■行為判定 nA[m][Cx][Fy]
18
+  n:ダイス数  m:判定値(省略時はクリティカル値と同じ)
19
+  x:クリティカル値(省略時は1)  y:ファンブル値(省略時は20)
20
+  注)[m]、[Cx]、[Fy]は省略可能。
21
+   例)3A12C4F15→3個振り12以下で成功。C値4、F値は15。
22
+   例)3A12→3個振り12以下で成功。C値1、F値は20。
23
+
24
+ ■各種表 (+:出目2~21に変更 -:出目0~19に変更)
25
+ ●リインカーネイション
26
+  因縁表 CTR[+/-]  前世邂逅表 DJV[-]
27
+  悪徳シーン表 AKST[+/-]
28
+ ●The 3rd(第三版)
29
+  因縁表 CT3[+/-]
30
+  注)[]内は省略可能。
31
+   例)CTR→因縁表(R版)を出目1~20でロールする。
32
+   例)CTR+→因縁表(R版)を出目2~21でロールする。
33
+ INFO_MESSAGE_TEXT
34
+
35
+ register_prefix([
36
+ '\d+A\d*[CF]?\d*[CF]?\d*',
37
+ 'CT3[\+\-]?',
38
+ 'CTR[\+\-]?',
39
+ 'DJV\-?',
40
+ 'AKST[\+\-]?'
41
+ ])
42
+
43
+ def initialize(command)
44
+ super(command)
45
+
46
+ @sort_add_dice = true
47
+ end
48
+
49
+ def eval_game_system_specific_command(command)
50
+ case command.upcase
51
+ when /^(\d+)A(\d*)([CF]?)(\d*)([CF]?)(\d*)$/
52
+ counts = Regexp.last_match(1).to_i
53
+ judgment = Regexp.last_match(2).to_i
54
+ option1 = Regexp.last_match(3)
55
+ argument1 = Regexp.last_match(4)
56
+ option2 = Regexp.last_match(5)
57
+ argument2 = Regexp.last_match(6)
58
+ return nil if (option1.empty? != argument1.empty?) || (option2.empty? != argument2.empty?) || (!option2.empty? && (option1 == option2))
59
+
60
+ if option1 == 'C'
61
+ critical = argument1.to_i
62
+ fumble = argument2.to_i
63
+ else
64
+ critical = argument2.to_i
65
+ fumble = argument1.to_i
66
+ end
67
+ return rollAct(counts, judgment, critical, fumble)
68
+
69
+ when /^CT3([\+\-]?)$/
70
+ sign = Regexp.last_match(1)
71
+ title = '因縁表(The 3rd) 『BoA3』P292'
72
+ table = [
73
+ "【他生】",
74
+ "【師弟】",
75
+ "【忘却】",
76
+ "【兄姉】",
77
+ "【貸し】",
78
+ "【慕情】",
79
+ "【主従】",
80
+ "【強敵】",
81
+ "【秘密】",
82
+ "【恩人】",
83
+ "【告発】",
84
+ "【友人】",
85
+ "【仇敵】",
86
+ "【父母】",
87
+ "【借り】",
88
+ "【信頼】",
89
+ "【幼子】",
90
+ "【取引】",
91
+ "【地縁】",
92
+ "【同志】",
93
+ "【不審】",
94
+ "【自身】",
95
+ ]
96
+ return tableText(title, table, sign)
97
+
98
+ when /^CTR([\+\-]?)$/
99
+ sign = Regexp.last_match(1)
100
+ title = '因縁表(リインカーネイション) 『BAR』P51、299'
101
+ table = [
102
+ "【他生】",
103
+ "【師弟】",
104
+ "【忘却】",
105
+ "【兄姉】",
106
+ "【貸し】",
107
+ "【憧憬】",
108
+ "【主従】",
109
+ "【強敵】",
110
+ "【秘密】",
111
+ "【恩人】",
112
+ "【取引】",
113
+ "【友人】",
114
+ "【怨敵】",
115
+ "【後援】",
116
+ "【借り】",
117
+ "【信頼】",
118
+ "【弟妹】",
119
+ "【商売】",
120
+ "【奇縁】",
121
+ "【同志】",
122
+ "【有為】",
123
+ "【自身】",
124
+ ]
125
+ return tableText(title, table, sign)
126
+
127
+ when /^DJV(\-?)$/
128
+ sign = Regexp.last_match(1)
129
+ title = '前世邂逅表(デジャブ) 『BAR』P235'
130
+ table = [
131
+ "【鮮烈な風】\n風は懐かしい匂いを、香りを運んでくる。それは……。",
132
+ "【薄暗い影】\nまるで時が止まってしまっているかのようだ。",
133
+ "【操りの糸】\nそれはあなたを導く蜘蛛の糸。",
134
+ "【天上の光】\n偉大なるものがもたらす、天上からの御しるし。",
135
+ "【温もり】\n春のひなたのような温かさを感じる。",
136
+ "【鋭いナイフ】\n鋭いナイフのような視線を感じる。これは……。",
137
+ "【共鳴】\n同じ感覚を感じる、ふたりは通じ合っている。",
138
+ "【城壁】\n厳しく高い城壁のように重く堅く厚い。",
139
+ "【砕ける器】\n落ちれば砕ける。砕ければそれは器ではない。",
140
+ "【陽炎】\n求めれば揺らいで消える。",
141
+ "【終わりなき円環】\nそれはあなたを捉え巡る輪廻の輪。",
142
+ "【天秤】\n揺れるバランス、揺れ続ける安定。",
143
+ "【流れる水】\nひとつ所にとどまらず、姿を固めることはない",
144
+ "【光る刃】\n鋭く光る刃のような、鋭いまなざし。",
145
+ "【悪魔】\nあまりにも危険な魅力、それは悪魔的だった。",
146
+ "【牙】\n獲物を引き裂く鋭く長い、牙。",
147
+ "【輝く星】\n星は暗く小さい。だがそこに輝く。",
148
+ "【冴え渡る月光】\n冷たさと安らかさが同居している。",
149
+ "【照りつける太陽】\n暑い。",
150
+ "【燃えさかる炎】\n炎はすべてを破壊し、すべてを滅ぼす。",
151
+ "【世界】\nすべてはこの世界の中で起こり、終わる。",
152
+ "【なし】",
153
+ ]
154
+ return tableText(title, table, sign)
155
+
156
+ when /^AKST([\+\-]?)$/
157
+ sign = Regexp.last_match(1)
158
+ title = '悪徳シーン表 『GoV』P16、164'
159
+ table = [
160
+ "▼ウェントス/止まない風\n【行動】殺戮者の狂気に当てられたのか、通り魔的殺人者が現れる。切り裂かれた人々の悲鳴が響き渡る。",
161
+ "▼エフェクトス/原初の力\n【行動】殺戮者の配下が無法を働く。店先で金品を要求したり、暴力を振るったりしている。",
162
+ "▼クレアータ/傀儡人形の王\n【行動】殺戮者の配下が人々の行動を監視している。違反した者には即座に罰が与えられる。",
163
+ "▼マーテル/生ける神\n【行動】殺戮者の配下が人々に殺戮者への信仰を告白し、忠誠を宣誓するように強要している。",
164
+ "▼コロナ/簒奪者\n【行動】嘆き悲しんでいる者がいる。殺戮者によって、財産、地位、家族あるいは、恋人を奪い取られたという。",
165
+ "▼フィニス/永遠の人\n【行動】怪物が人々を虐殺している。この地には人間が多すぎるのだという。それが彼らの主の決定だ。",
166
+ "▼エルス/無私なる愛\n【行動】殺戮者の配下が略奪を働いている。どうやら、殺戮者に献上するものを争っているようだ。",
167
+ "▼アダマス/万物の保護者\n【行動】反逆者と名指しされる。人々は君たちに接触しようとしない。情報を集めるにも苦労しそうだ。",
168
+ "▼アルドール/終わりなき戦い\n【行動】ならず者の集団が人々を襲っている。力を示さなければ切り捨てられるのは彼らなのだ。",
169
+ "▼ファンタスマ/謀略の渦\n【行動】人々は君を見るなり逃げ出した。どうやら恐ろしい殺人者だと思われているようだ。",
170
+ "▼アクシス/真理の探究者\n【行動】殺戮者の配下の手によって、人々が連れ去られている。誰ひとりもどってこない。",
171
+ "▼レクス/捕縛者\n【行動】殺戮者への恐怖に駆られた人々はその命令にしたがって徒党を組み、PCたちを捜索している。",
172
+ "▼アクア/澱んだ水\n【行動】人々は獣のように生きている。言葉は通じない。有効なのは力、暴力だけだ。",
173
+ "▼グラディウス/暗き死の刃\n【行動】殺戮者とその配下によって虐殺が行なわれている。見渡す限り、死者ばかりだ。",
174
+ "▼アングルス/純白の恐怖\n【行動】遊びとして人間狩りが行なわれている。人々は逃げ惑い、殺戮者は愉悦に笑う。",
175
+ "▼ディアボルス/悪魔の囁き\n【行動】殺戮者は少年少女を召し上げている。召し上げられた者たちは音信不通となってしまう。",
176
+ "▼フルキフェル/裏切り者\n【行動】人々は猜疑の目で君を見る。嘘を吐くのが普通の場所で真実を見いだせるだろうか。",
177
+ "▼ステラ/破滅への愛\n【行動】街や村落が破壊されている。焼け野原の中、人々は力なくうずくまる。ここには絶望だけがあった。",
178
+ "▼ルナ/奪う者\n【行動】君たちの目の前に略奪が繰り返される。略奪のために略奪を行なう殺戮者の配下たち。",
179
+ "▼デクストラ/邪悪な技\n【行動】殺戮者による非道な人体実験が繰り返されている。そのための実験材料が集められている。",
180
+ "▼イグニス/根源たる炎\n【行動】街や集落、あるいは店舗や住宅が焼き討ちに合う。人々は互いに陥れ、磔刑が行なわれている。",
181
+ "▼オービス/闇の鎖\n【行動】世界の完全なる破滅、人類の絶滅、無作為で広範囲な虐殺が行なわれる。",
182
+ ]
183
+ return tableText(title, table, sign)
184
+ end
185
+
186
+ return nil
187
+ end
188
+
189
+ def rollAct(counts, judgment = 0, critical = 0, fumble = 0)
190
+ if critical < 1
191
+ critical = 1
192
+ end
193
+ if judgment <= 0
194
+ judgment = critical
195
+ elsif critical > judgment
196
+ critical = judgment
197
+ end
198
+
199
+ if fumble <= 0
200
+ fumble = 20
201
+ end
202
+ if counts <= 0
203
+ counts = 1
204
+ fumble -= 5
205
+ end
206
+ if fumble < 2
207
+ fumble = 2
208
+ elsif fumble > 20
209
+ fumble = 20
210
+ end
211
+
212
+ dice_list = @randomizer.roll_barabara(counts, 20).sort
213
+ value = dice_list.sum()
214
+ string = dice_list.join(",")
215
+
216
+ text = "(#{counts}A#{judgment}C#{critical}F#{fumble}) > #{string} > "
217
+
218
+ unless counts == 1
219
+ value = string.split(",").map(&:to_i).min
220
+ text += "#{value} > "
221
+ end
222
+
223
+ if value >= fumble
224
+ text += 'ファンブル'
225
+ elsif value <= critical
226
+ text += 'クリティカル'
227
+ elsif value > judgment
228
+ text += '失敗'
229
+ else
230
+ text += '成功'
231
+ end
232
+ return text
233
+ end
234
+
235
+ def tableText(title, table, sign = '')
236
+ number = @randomizer.roll_once(20)
237
+ index = number
238
+ if sign == '+'
239
+ index += 1
240
+ elsif sign == '-'
241
+ index -= 1
242
+ end
243
+
244
+ text = "#{title} > #{index}"
245
+ unless sign.empty?
246
+ text += "[#{number}#{sign}1]"
247
+ end
248
+ return text + ' > ' + table[index]
249
+ end
250
+ end
251
+ end
252
+ end
@@ -0,0 +1,460 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class BlindMythos < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'BlindMythos'
8
+
9
+ # ゲームシステム名
10
+ NAME = 'ブラインド・ミトスRPG'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'ふらいんとみとすRPG'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~MESSAGETEXT
17
+ ・判定:BMx@y>=z、BMSx@y>=z
18
+  x:スキルレベル
19
+   y:目標難易度(省略可。デフォルト4)
20
+   z:必要成功度
21
+  BMコマンドはダイスの振り足しを常に行い、
22
+  BMSは振り足しを自動では行いません。
23
+ 例)BM>=1 BM@3>=1 BMS2>=1
24
+
25
+ ・判定振り足し:ReRollx,x,x...@y>=1
26
+  x:振るダイスの個数
27
+   y:目標難易度(省略可。デフォルト4)
28
+   z:必要成功度
29
+  振り足しを自動で行わない場合(BMSコマンド)に使用します。
30
+
31
+ ・LE:失う感情表
32
+ ・感情後遺症表 ESx
33
+  ESH:喜、ESA:怒、ESS:哀、ESP:楽、ESL:愛、ESE:感
34
+ ・DT:汚染チャート
35
+ ・RPxyz:守護星表チェック
36
+ xyz:守護星ナンバーを指定
37
+ 例)RP123 RP258
38
+ MESSAGETEXT
39
+
40
+ def eval_game_system_specific_command(command)
41
+ debug("eval_game_system_specific_command Begin")
42
+
43
+ text = judgeRoll(command)
44
+ return text unless text.nil?
45
+
46
+ isStop = true
47
+ text, = reRoll(command, isStop)
48
+ return text unless text.nil?
49
+
50
+ text = getRulingPlanetDiceCommandResult(command)
51
+ return text unless text.nil?
52
+
53
+ text = getDurtyTableCommandReuslt(command)
54
+ return text unless text.nil?
55
+
56
+ return roll_tables(command, TABLES)
57
+ end
58
+
59
+ def judgeRoll(command)
60
+ return nil unless /^BM(S)?(\d*)(@(\d+))?>=(\d+)$/i =~ command
61
+
62
+ isStop = !Regexp.last_match(1).nil?
63
+ skillRank = Regexp.last_match(2).to_i
64
+ judgeNumberText = Regexp.last_match(3)
65
+ judgeNumber = (Regexp.last_match(4) || 4).to_i
66
+ targetNumber = (Regexp.last_match(5) || 1).to_i
67
+
68
+ message = ""
69
+ diceCount = skillRank + 2
70
+ isReRoll = false
71
+ text, bitList, successList, countOneList, canReRoll =
72
+ getRollResult([diceCount], judgeNumberText, judgeNumber, targetNumber, isReRoll, isStop)
73
+
74
+ message += text
75
+ message += getTotalResultMessageText(bitList, successList, countOneList, targetNumber, isStop, canReRoll)
76
+
77
+ return message
78
+ end
79
+
80
+ def reRoll(command, isStop)
81
+ debug("ReRoll Begin", command)
82
+
83
+ return nil unless /^ReRoll([\d,]+)(@(\d+))?>=(\d+)$/i =~ command
84
+
85
+ debug("ReRoll pass")
86
+
87
+ rerollCountsText = Regexp.last_match(1)
88
+ judgeNumberText = Regexp.last_match(2)
89
+ judgeNumber = (Regexp.last_match(3) || 4).to_i
90
+ targetNumber = Regexp.last_match(4).to_i
91
+
92
+ rerollCounts = rerollCountsText.split(/,/).map(&:to_i)
93
+
94
+ commandText = ""
95
+ rerollCounts.each do |diceCount|
96
+ commandText += "," unless commandText.empty?
97
+ commandText += "ReRoll#{diceCount}#{judgeNumberText}>=#{targetNumber}"
98
+ end
99
+
100
+ debug("commandText", commandText)
101
+
102
+ message = ""
103
+ if rerollCounts.size > 1
104
+ message += "(#{commandText})" if isStop
105
+ end
106
+ message += "\n"
107
+ isReRoll = true
108
+ text, _bitList, successList, countOneList, =
109
+ getRollResult(rerollCounts, judgeNumberText, judgeNumber, targetNumber, isReRoll, isStop)
110
+
111
+ message += text
112
+
113
+ return message, successList, countOneList, targetNumber
114
+ end
115
+
116
+ def getRollResult(rerollCounts, judgeNumberText, judgeNumber, targetNumber, isReRoll, isStop)
117
+ bitList = []
118
+ successList = []
119
+ countOneList = []
120
+ rerollTargetList = []
121
+
122
+ message = ""
123
+ rerollCounts.each_with_index do |diceCount, index|
124
+ message += "\n" unless index == 0
125
+
126
+ commandName = "ReRoll#{diceCount}"
127
+ unless isReRoll
128
+ if isStop
129
+ commandName = "BMS#{diceCount - 2}"
130
+ else
131
+ commandName = "BM#{diceCount - 2}"
132
+ end
133
+ end
134
+ commandText = "#{commandName}#{judgeNumberText}>=#{targetNumber}"
135
+
136
+ diceList = @randomizer.roll_barabara(diceCount, 6).sort
137
+ diceText = diceList.join(",")
138
+
139
+ message += " > " if isReRoll
140
+ message += "(#{commandText}) > #{diceCount}D6[#{diceText}] > "
141
+
142
+ success, countOne, resultText = getSuccessResultText(diceList, judgeNumber)
143
+ bitList += diceList.find_all { |i| i >= 4 } unless isReRoll
144
+ successList << success
145
+ countOneList << countOne
146
+ message += resultText
147
+
148
+ sameDiceList = getSameDieList(diceList)
149
+ next if sameDiceList.empty?
150
+
151
+ rerollText = ""
152
+ sameDiceList.each do |list|
153
+ rerollText += "," unless rerollText.empty?
154
+ rerollText += list.join('')
155
+ end
156
+
157
+ rerollTargetList << sameDiceList.map(&:count).join(",")
158
+
159
+ message += "、リロール[#{rerollText}]"
160
+ end
161
+
162
+ rerollCommand = ""
163
+ unless rerollTargetList.empty?
164
+ rerollCommand = "ReRoll#{rerollTargetList.join(',')}#{judgeNumberText}>=#{targetNumber}"
165
+ message += "\n > コマンド:#{rerollCommand}" if isStop
166
+ end
167
+
168
+ canReRoll = !rerollCommand.empty?
169
+
170
+ if canReRoll
171
+ unless isStop
172
+ text, successListTmp, countOneListTmp, = reRoll(rerollCommand, isStop)
173
+ message += text
174
+ successList += successListTmp
175
+ countOneList += countOneListTmp
176
+ end
177
+ end
178
+
179
+ return message, bitList, successList, countOneList, canReRoll
180
+ end
181
+
182
+ def getTotalResultMessageText(bitList, successList, countOneList, targetNumber, isStop, canReRoll)
183
+ success = successList.inject { |sum, i| sum + i }
184
+ countOne = countOneList.inject { |sum, i| sum + i }
185
+
186
+ result = ""
187
+
188
+ if successList.size > 1
189
+ result += "\n > 最終成功数:#{success}"
190
+ end
191
+
192
+ if canReRoll && isStop
193
+ result += "\n"
194
+
195
+ if success >= targetNumber
196
+ result += " > 現状で成功。コマンド実行で追加リロールも可能"
197
+ else
198
+ result += " > 現状のままでは失敗"
199
+ result += "。汚染ポイント+#{countOne}" if countOne >= 1
200
+ end
201
+
202
+ return result
203
+ end
204
+
205
+ if success >= targetNumber
206
+ result += " > 成功"
207
+
208
+ if bitList.size >= 1
209
+ result += "、禁書ビット発生[#{bitList.join(',')}]"
210
+ end
211
+
212
+ else
213
+ result += " > 失敗"
214
+ result += "。汚染ポイント+#{countOne}" if countOne >= 1
215
+ end
216
+
217
+ return result
218
+ end
219
+
220
+ def getSameDieList(diceList)
221
+ sameDiceList = []
222
+
223
+ diceList.uniq.each do |i|
224
+ next if i == 1
225
+
226
+ list = diceList.find_all { |dice| dice == i }
227
+ next if list.length <= 1
228
+
229
+ sameDiceList << list
230
+ end
231
+
232
+ return sameDiceList
233
+ end
234
+
235
+ def getSuccessResultText(diceList, judgeNumber)
236
+ success = 0
237
+ countOne = 0
238
+
239
+ diceList.each do |i|
240
+ countOne += 1 if i == 1
241
+
242
+ next unless i >= judgeNumber
243
+
244
+ success += 1
245
+ end
246
+
247
+ result = "成功数:#{success}"
248
+
249
+ return success, countOne, result
250
+ end
251
+
252
+ def getRulingPlanetDiceCommandResult(command)
253
+ return nil unless command =~ /^RP(\d+)/i
254
+
255
+ targetNumbers = Regexp.last_match(1).split(//).map(&:to_i)
256
+ diceList = getRulingPlanetDice
257
+
258
+ matchResult = "失敗"
259
+ targetNumbers.each do |i|
260
+ if diceList.include?(i)
261
+ matchResult = "発動"
262
+ break
263
+ end
264
+ end
265
+
266
+ text = "守護星表チェック(#{targetNumbers.join(',')}) > #{diceList.count}D10[#{diceList.join(',')}] > #{matchResult}"
267
+
268
+ return text
269
+ end
270
+
271
+ def getRulingPlanetDice
272
+ dice1 = @randomizer.roll_once(10)
273
+ dice2 = dice1
274
+
275
+ while dice1 == dice2
276
+ dice2 = @randomizer.roll_once(10)
277
+ end
278
+
279
+ dice1 = changeRulingPlanetDice(dice1)
280
+ dice2 = changeRulingPlanetDice(dice2)
281
+
282
+ return dice1, dice2
283
+ end
284
+
285
+ def changeRulingPlanetDice(dice)
286
+ return 0 if dice == 10
287
+
288
+ return dice
289
+ end
290
+
291
+ def getDurtyTableCommandReuslt(command)
292
+ return nil unless /^DT$/i =~ command
293
+
294
+ table = <<~__TABLE_END__
295
+ 汚染チャートを2回振り、その効果を適用する(1・2-2,5・6-12 なら振り直す)
296
+ PC全員の「トラウマ」「喪失」すべてに2ダメージ
297
+ PC全員の「喪失」2つに4ダメージ
298
+ PC全員の「トラウマ」すべてに2ダメージ。その後さらに汚染が2増える
299
+ PC全員、1つの【記憶】の両方の値が0になる。このときアクロバットダイス獲得不可
300
+ PC全員の「喪失」1つに4ダメージ。このときアクロバットダイス獲得不可
301
+ PC全員の「トラウマ」すべてに1ダメージ。その後さらに汚染が3増える
302
+ PC全員の「トラウマ」すべてに1ダメージ。その後アクロバットダイスをPC人数分失う
303
+ PC全員の「喪失」すべてに2ダメージ。禁書ビットをすべて失う
304
+ PC全員の「トラウマ」2つに3ダメージ。その後さらに汚染が1増える
305
+ PC全員の「トラウマ」「喪失」すべてに1ダメージ
306
+ PC全員の「喪失」1つに4ダメージ。禁書ビットをすべて失う
307
+ PC全員の「トラウマ」すべてに2ダメージ
308
+ PC全員の1つの【記憶】の「トラウマ」「喪失」それぞれに3ダメージ
309
+ PC全員の「喪失」すべてに1ダメージ
310
+ PC全員の「トラウマ」3つに2ダメージ
311
+ PC全員の「トラウマ」と「喪失」それぞれ1つに3ダメージ
312
+ PC全員の「喪失」3つに2ダメージ
313
+ PC全員のすべての「トラウマ」に1 ダメージ
314
+ PC全員のひとつの【記憶】の「トラウマ」「喪失」それぞれに3ダメージ
315
+ PC全員の「喪失」すべてに2ダメージ
316
+ PC全員の「トラウマ」ひとつに4ダメージ。禁書ビットをすべて失う
317
+ PC全員の「トラウマ」「喪失」すべてに1ダメージ
318
+ PC全員の「喪失」2つに3ダメージ。その後さらに汚染が1増える
319
+ PC全員の「トラウマ」すべてに2ダメージ。禁書ビットをすべて失う
320
+ PC全員の「喪失」すべてに1ダメージ。その後アクロバットダイスをPC人数分失う
321
+ PC全員の「喪失」すべてに1ダメージ。その後さらに汚染が3増える
322
+ PC全員の「トラウマ」1つに4ダメージ。このときアクロバットダイス獲得不可
323
+ PC全員、1つの【記憶】の両方の値が0になる。このときアクロバットダイス獲得不可
324
+ PC全員の「喪失」すべてに2ダメージ。その後さらに汚染が2増える
325
+ PC全員の「トラウマ」2つに4ダメージ
326
+ PC全員の「トラウマ」「喪失」すべてに2ダメージ
327
+ 汚染チャートを2回振り、その効果を適用する(1・2-2,5・6-12 なら振り直す)
328
+ __TABLE_END__
329
+
330
+ table = table.split("\n")
331
+
332
+ dice1 = @randomizer.roll_once(6)
333
+ dice2 = @randomizer.roll_sum(2, 6)
334
+
335
+ index = (dice2 - 2) * 3 + (dice1 / 2.0).ceil - 1
336
+
337
+ return "汚染チャート(#{dice1},#{dice2}) > #{table[index]}"
338
+ end
339
+
340
+ TABLES = {
341
+ "LE" => DiceTable::Table.new(
342
+ "失う感情表",
343
+ "1D6",
344
+ [
345
+ "喜:喜びは消えた。嬉しい気持ちとは、なんだっただろう。",
346
+ "怒:激情は失われ、憎しみもどこかへと消える。",
347
+ "哀:どんなに辛くても、悲しさを感じない。どうやら涙も涸れたらしい。",
348
+ "楽:もはや楽しいことなどない。希望を抱くだけ無駄なのだ。",
349
+ "愛:愛など幻想……無力で儚い、役に立たない世迷い言だ。",
350
+ "感:なにを見ても、感動はない。心は凍てついている。"
351
+ ]
352
+ ),
353
+ "ESH" => DiceTable::Table.new(
354
+ "「喜」の感情後遺症表",
355
+ "2D6",
356
+ [
357
+ "日々喜びを求めてしまう。",
358
+ "日々喜びを求めてしまう。",
359
+ "嬉しい時間が長続きしない。",
360
+ "素直に喜びを共有できないことがある。",
361
+ "小さなことで大きく喜びを感じる。",
362
+ "小さなことで大きく喜びを感じる。",
363
+ "影響なし。",
364
+ "影響なし。",
365
+ "「喜」の後遺症をひとつ消してもよい。",
366
+ "「喜」の後遺症をひとつ消してもよい。",
367
+ "「喜」の後遺症をひとつ消してもよい。"
368
+ ]
369
+ ),
370
+ "ESA" => DiceTable::Table.new(
371
+ "「怒」の感情後遺症表",
372
+ "2D6",
373
+ [
374
+ "始終不機嫌になる。",
375
+ "始終不機嫌になる。",
376
+ "一度怒ると、なかなか収まらない。",
377
+ "怒りっぽくなる",
378
+ "怒りかたが激しくなる。",
379
+ "怒りかたが激しくなる。",
380
+ "影響なし。",
381
+ "影響なし。",
382
+ "「怒」の後遺症をひとつ消してもよい。",
383
+ "「怒」の後遺症をひとつ消してもよい。",
384
+ "「怒」の後遺症をひとつ消してもよい。"
385
+ ]
386
+ ),
387
+ "ESS" => DiceTable::Table.new(
388
+ "「哀」の感情後遺症表",
389
+ "2D6",
390
+ [
391
+ "一度涙が出るとなかなか止まらない。",
392
+ "一度涙が出るとなかなか止まらない。",
393
+ "夜、哀しいことを思い出して目が覚める。",
394
+ "不意に哀しい気持ちになる。",
395
+ "涙もろくなる。",
396
+ "涙もろくなる。",
397
+ "影響なし。",
398
+ "影響なし。",
399
+ "「哀」の後遺症をひとつ消してもよい。",
400
+ "「哀」の後遺症をひとつ消してもよい。",
401
+ "「哀」の後遺症をひとつ消してもよい。"
402
+ ]
403
+ ),
404
+ "ESP" => DiceTable::Table.new(
405
+ "「楽」の感情後遺症表",
406
+ "2D6",
407
+ [
408
+ "突然陽気になったり、不意に笑い出してしまう。",
409
+ "突然陽気になったり、不意に笑い出してしまう。",
410
+ "周りが楽しくなさそうだと不安になる。",
411
+ "楽しいことがないと落ち着かない。",
412
+ "些細なことでも笑ってしまう。",
413
+ "些細なことでも笑ってしまう。",
414
+ "影響なし。",
415
+ "影響なし。",
416
+ "「楽」の後遺症をひとつ消してもよい。",
417
+ "「楽」の後遺症をひとつ消してもよい。",
418
+ "「楽」の後遺症をひとつ消してもよい。"
419
+ ]
420
+ ),
421
+ "ESL" => DiceTable::Table.new(
422
+ "「愛」の感情後遺症表",
423
+ "2D6",
424
+ [
425
+ "少しでも気になる相手に愛を求めてしまう。",
426
+ "少しでも気になる相手に愛を求めてしまう。",
427
+ "愛する相手(恋人・家族・ペット・空想)から離れたくない。",
428
+ "誰彼構わず優しくしてしまう。",
429
+ "ひとりでいると不安を感じる。",
430
+ "ひとりでいると不安を感じる。",
431
+ "影響なし。",
432
+ "影響なし。",
433
+ "「愛」の後遺症をひとつ消してもよい。",
434
+ "「愛」の後遺症をひとつ消してもよい。",
435
+ "「愛」の後遺症をひとつ消してもよい。"
436
+ ]
437
+ ),
438
+ "ESE" => DiceTable::Table.new(
439
+ "「感」の感情後遺症表",
440
+ "2D6",
441
+ [
442
+ "感動を共有できない相手を不信に思ってしまう。",
443
+ "感動を共有できない相手を不信に思ってしまう。",
444
+ "嬉しくても哀しくてもすぐに涙が出る。",
445
+ "リアクションがオーバーになる。",
446
+ "ちょっとしたことで感動する。",
447
+ "ちょっとしたことで感動する。",
448
+ "影響なし。",
449
+ "影響なし。",
450
+ "「感」の後遺症をひとつ消してもよい。",
451
+ "「感」の後遺症をひとつ消してもよい。",
452
+ "「感」の後遺症をひとつ消してもよい。"
453
+ ]
454
+ ),
455
+ }.freeze
456
+
457
+ register_prefix(['BM.*', 'ReRoll\d+.*', 'RP\d+', 'DT'] + TABLES.keys)
458
+ end
459
+ end
460
+ end