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,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class Paranoia < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'Paranoia'
8
+
9
+ # ゲームシステム名
10
+ NAME = 'パラノイア'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'はらのいあ'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~MESSAGETEXT
17
+ ※「パラノイア」は完璧なゲームであるため特殊なダイスコマンドを必要としません。
18
+ ※このダイスボットは部屋のシステム名表示用となります。
19
+ MESSAGETEXT
20
+
21
+ register_prefix(['geta'])
22
+
23
+ def initialize(command)
24
+ super(command)
25
+ @enabled_upcase_input = false
26
+ end
27
+
28
+ def eval_game_system_specific_command(command)
29
+ debug('eval_game_system_specific_command command', command)
30
+
31
+ result = ''
32
+
33
+ case command
34
+ when /geta/i
35
+ result = getaRoll()
36
+ end
37
+
38
+ return nil if result.empty?
39
+
40
+ return "#{command} > #{result}"
41
+ end
42
+
43
+ def getaRoll()
44
+ result = ""
45
+
46
+ dice = @randomizer.roll_once(2)
47
+
48
+ result += "幸福ですか? > "
49
+
50
+ getaString = ''
51
+ case dice
52
+ when 1
53
+ getaString = '幸福です'
54
+ when 2
55
+ getaString = '幸福ではありません'
56
+ end
57
+
58
+ result += getaString
59
+
60
+ return result
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,109 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class ParanoiaRebooted < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'ParanoiaRebooted'
8
+
9
+ # ゲームシステム名
10
+ NAME = 'パラノイア リブーテッド'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'はらのいありふうてつと'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
17
+ ※コマンドは入力内容の前方一致で検出しています。
18
+ ・通常の判定 NDx
19
+  x:ノードダイスの数.マイナスも可.
20
+  ノードダイスの絶対値 + 1個(コンピュータダイス)のダイスがロールされる.
21
+ 例)ND2 ND-3
22
+
23
+ ・ミュータントパワー判定 MPx
24
+ x:ノードダイスの数.
25
+  ノードダイスの値 + 1個(コンピュータダイス)のダイスがロールされる.
26
+ 例)MP2
27
+ INFO_MESSAGE_TEXT
28
+
29
+ register_prefix(['ND.*', 'MP.*'])
30
+
31
+ def eval_game_system_specific_command(command)
32
+ case command
33
+ when /^ND/i
34
+ return get_node_dice_roll(command)
35
+ when /^MP/i
36
+ return get_mutant_power_roll(command)
37
+ else
38
+ return nil
39
+ end
40
+ end
41
+
42
+ private
43
+
44
+ def generate_roll_results(dices)
45
+ computer_dice_message = ''
46
+ results = dices.dup
47
+ if results[-1].to_i == 6
48
+ results[-1] = 'C'
49
+ computer_dice_message = '(Computer)'
50
+ end
51
+
52
+ return results, computer_dice_message
53
+ end
54
+
55
+ def get_node_dice_roll(command)
56
+ debug("eval_game_system_specific_command Begin")
57
+
58
+ m = /^ND((-)?\d+)/i.match(command)
59
+ unless m
60
+ return ''
61
+ end
62
+
63
+ debug("command", command)
64
+
65
+ parameter_num = m[1].to_i
66
+ dice_count = parameter_num.abs + 1
67
+
68
+ dices = @randomizer.roll_barabara(dice_count, 6)
69
+
70
+ success_rate = dices.count { |dice| dice >= 5 }
71
+ success_rate -= dices.count { |dice| dice < 5 } if parameter_num < 0
72
+ debug(dices)
73
+
74
+ results, computer_dice_message = generate_roll_results(dices)
75
+
76
+ debug("eval_game_system_specific_command result")
77
+
78
+ return "(#{command}) > [#{results.join(', ')}] > 成功度#{success_rate}#{computer_dice_message}"
79
+ end
80
+
81
+ def get_mutant_power_roll(command)
82
+ debug("eval_game_system_specific_command Begin")
83
+
84
+ m = /^MP(\d+)/i.match(command)
85
+ unless m
86
+ return ''
87
+ end
88
+
89
+ debug("command", command)
90
+
91
+ parameter_num = m[1].to_i
92
+ dice_count = parameter_num.abs + 1
93
+
94
+ dices = @randomizer.roll_barabara(dice_count, 6)
95
+
96
+ failure_rate = dices.count(1)
97
+ message = failure_rate == 0 ? '成功' : "失敗(#{failure_rate})"
98
+
99
+ results, computer_dice_message = generate_roll_results(dices)
100
+
101
+ debug(dices)
102
+
103
+ debug("eval_game_system_specific_command result")
104
+
105
+ return "(#{command}) > [#{results.join(', ')}] > #{message}#{computer_dice_message}"
106
+ end
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,231 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bcdice/game_system/DemonParasite'
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class ParasiteBlood < DemonParasite
8
+ # ゲームシステムの識別子
9
+ ID = 'ParasiteBlood'
10
+
11
+ # ゲームシステム名
12
+ NAME = 'パラサイトブラッドRPG'
13
+
14
+ # ゲームシステム名の読みがな
15
+ SORT_KEY = 'はらさいとふらつとRPG'
16
+
17
+ # ダイスボットの使い方
18
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
19
+ ・衝動表 (URGEx)
20
+  "URGE衝動レベル"の形で指定します。
21
+  衝動表に従って自動でダイスロールを行い、結果を表示します。
22
+  ダイスロールと同様に、他のプレイヤーに隠れてロールすることも可能です。
23
+  頭に識別文字を追加して、デフォルト以外の衝動表もロールできます。
24
+  ・AURGEx 頭に「A」を付けると「誤作動表」。
25
+ 例)URGE1   urge5   Aurge2
26
+ ・D66ダイスあり
27
+ INFO_MESSAGE_TEXT
28
+
29
+ register_prefix(['(N|A|M|U|C|)?URGE\d+'])
30
+
31
+ def get_urge(string) # パラサイトブラッドの衝動表
32
+ unless /(\w*)URGE\s*(\d+)/i =~ string
33
+ return '1'
34
+ end
35
+
36
+ initialWord = Regexp.last_match(1)
37
+ urgelv = Regexp.last_match(2).to_i
38
+
39
+ case initialWord
40
+ when ""
41
+ urge_type = 1
42
+ when /A/i # 誤作動表
43
+ urge_type = 2
44
+ else # あり得ない文字
45
+ urge_type = 1
46
+ end
47
+
48
+ if (urgelv < 1) || (urgelv > 5)
49
+ return '衝動段階は1から5です'
50
+ end
51
+
52
+ if urge_type == 0
53
+ return '1'
54
+ end
55
+
56
+ dice_now = @randomizer.roll_sum(2, 6)
57
+ urge = get_pb_urge_table(urgelv, dice_now, urge_type)
58
+ resultText = "#{urgelv}-#{dice_now}:#{urge}"
59
+ if urge_type <= 1
60
+ output = "衝動表#{resultText}"
61
+ elsif urge_type <= 2
62
+ output = "誤作動表#{resultText}"
63
+ else
64
+ output = '1'
65
+ end
66
+
67
+ return output
68
+ end
69
+
70
+ def get_pb_urge_table(level, dice, urge_type)
71
+ table = nil
72
+
73
+ if urge_type <= 1 # 衝動表
74
+ table = get_pb_normal_urge_table
75
+ elsif urge_type <= 2 # AASとサイボーグの誤作動表
76
+ table = get_pb_aas_urge_table
77
+ else # エラートラップ
78
+ table = get_pb_normal_urge_table
79
+ end
80
+
81
+ return table[level - 1][dice - 2]
82
+ end
83
+
84
+ def get_pb_normal_urge_table
85
+ return [[
86
+ '『怒り/20』突然強い怒りに駆られる。最も近い対象を罵倒し、そのターンの終了まで[行動不能]となる。',
87
+ '『暗闇/20』視神経に悪影響が出て、24時間[暗闇]になる。',
88
+ '『悲哀/10』突然の悲みに動きが止まる。そのターンの終了まで[行動不能]となる。',
89
+ '『微笑/10』可笑しくてしょうがない。笑いが止まらず、そのターンの終了まで[行動不能]となる。',
90
+ '『鈍感/ 0』衝動に気が付かない。影響なし。',
91
+ '『抑制/ 0』衝動を抑制した。影響なし。',
92
+ '『我慢/ 0』衝動を我慢した。影響なし。',
93
+ '『前兆/10』悪魔的特徴が1ターン(10秒)目立つ。〈悪魔化〉時は影響なし。',
94
+ '『変化/10』利き腕や前脚のみ、2ターン(20秒)かけて〈悪魔化〉する。〈悪魔化〉時は影響なし。',
95
+ '『拒絶/10』〈悪魔化〉が解除される。通常時は影響なし。',
96
+ '『定着/20』通常時であれば、即座に〈悪魔化〉する。肉体が〈悪魔化〉に馴染み、24時間通常時に戻れない。',
97
+ ],
98
+ [
99
+ '『賛美/20』最も近くの対象を主と思いこむ。1時間または自身か対象が[気絶・戦闘不能・死亡]するまで、対象のあらゆる命令を聞く。',
100
+ '『茫然/20』思考が停止。そのターンの終了まで[タイミング:攻撃]を行えない。',
101
+ '『苦痛/20』"悪魔寄生体"が体内で暴れる。苦痛を感じ、【エナジー】を10消費。',
102
+ '『落涙/10』過去の悲しい想い出が去来し、涙が溢れる。そのターンの終了まで[タイミング:準備]を行えない。',
103
+ '『限界/10』溢れる力が限界を超え、全身の血管が破裂。【エナジー】を5消費。',
104
+ '『辛抱/10』突如全身が〈悪魔化〉しようとしたが、意思の力で抑制。【エナジー】を5消費。〈悪魔化〉時は影響なし。',
105
+ '『忍耐/ 0』衝動に耐えた。影響なし。',
106
+ '『抑制/ 0』衝動を抑制した。影響なし。',
107
+ '『我慢/ 0』衝動を我慢した。影響なし。',
108
+ '『嫉妬/10』最も近くの対象に猛烈な嫉妬を感じ、[距離:移動10m/対象:1体]に通常肉弾攻撃を行う。',
109
+ '『変貌/20』〈悪魔化〉する。その際、特異な外見が目立つ。〈悪魔化〉時は影響なし。',
110
+ ],
111
+ [
112
+ '『異貌/20』3ターンかけて、顔のみが〈悪魔化〉する。〈悪魔化〉時は影響なし。',
113
+ '『解放/20』衝動に耐えきれず3ターンかけて〈悪魔化〉する。〈悪魔化〉時は影響なし。',
114
+ '『発露/20』全身を駆け抜ける衝動により力が溢れる。次のターンの終了まで、ダメージに+5。',
115
+ '『渇望/10』攻撃衝動を抑えられない。次のターンの終了まで、命中判定の達成値に+5。',
116
+ '『絶叫/10』あらん限りの声で叫び、力が増す。次のターンの終了まで、ダメージに+1d。',
117
+ '『我慢/ 0』衝動を我慢した。影響なし。',
118
+ '『憤怒/10』全身に怒りが満ちて攻撃力上昇。次のターンの終了まで、ダメージに+1d。',
119
+ '『加速/10』全身を駆け抜ける衝動により速度上昇。次のターンの終了まで【行動値】が2倍。',
120
+ '『嫌悪/20』最も近くの対象に嫌悪を感じ、[距離:移動10m/対象:1体]に通常肉弾攻撃を行う。',
121
+ '『保身/20』突如として防御能力が高まる。次のターンの終了まで、防御力に+5。',
122
+ '『救済/20』"悪魔寄生体"が危機を察知し、【エナジー】を20回復。',
123
+ ],
124
+ [
125
+ '『転倒/20』踏み込んだ瞬間、あまりの衝撃に地面をえぐり[転倒]してしまう。',
126
+ '『脱力/20』急に力が抜ける。そのターンの終了まで、判定の達成値に-5。',
127
+ '『困惑/20』精神に変調があらわれ、空間認識能力が狂う。次のターンの終了まで、[タイミング:瞬間]の《特殊能力》を行えない。',
128
+ '『全力/20』激しい躁状態。次のターンの終了まで、命中判定に+10。加えて[タイミング:ターン開始]の《特殊能力》を使用できなくなる。',
129
+ '『咆吼/10』大声で叫び、意味のある言葉を話せなくなる。1時間持続する。',
130
+ '『狂気/10』心が狂気に満たされ、強いストレスを感じる。【衝動】を2蓄積させる。',
131
+ '『本能/20』"悪魔寄生体"の生存本能が自我を支配。次のターンの終了まで、ダメージに+5。',
132
+ '『治癒/20』衝動を1蓄積させ、《肉体修復》を行う。',
133
+ '『敵意/20』最も近い対象に強い敵意を抱く。[距離:移動10m/対象:1体]に通常肉弾攻撃を行い、クリティカルとなる。',
134
+ '『自虐/20』自分が許せず自虐行為を行う。【エナジー】を10消費するが、次のターンの終了までダメージに+10。',
135
+ '『自浄/20』少し我に返る。【衝動】が2回復。',
136
+ ],
137
+ [
138
+ '『睡眠/30』猛烈な睡魔に襲われ意識を失う。そのターンの終了まで[気絶]となる。',
139
+ '『飢餓/30』猛烈な飢餓感。20m以内の最も近い[気絶・戦闘不能・死亡]の対象へ移動し、喰らう。次のターンの終了まで、対象は【エナジー】を1dずつ消費。',
140
+ '『激怒/20』突如として強い怒りが湧き、周囲が見えなくなる。次のターンの終了まで、[タイミング:瞬間]の《特殊能力》を行えない。',
141
+ '『顕現/20』利き腕や前脚がさらに外骨格化し、肉体に強い負荷がかかる。【衝動】を3蓄積',
142
+ '『好機/20』チャンスに本能が素早く反応。即座に[タイミング:攻撃]の行動を1回だけ行える。',
143
+ '『狂化/20』精神に変調、心が強い狂気で満たされ、自虐行為に走る。【エナジー】を20消費する。',
144
+ '『混乱/20』精神に変調が現れ、肉体を意のままに動かせない。次のターンの終了まで、判定の達成値に-5。',
145
+ '『暴君/20』自分が最強に思えてしょうがない。60ターン(10分)の間、【行動値】とダメージに+5。',
146
+ '『無双/20』達人の感覚が目覚める。60ターン(10分)の間、命中判定と回避判定の達成値に+5。',
147
+ '『発現/30』通常時であれば、即座に《悪魔化》する。特異な外見が60ターン(10分)目立ち、その間、命中判定とダメージに+5。',
148
+ '『絶望/30』全身が絶望に満たされ、全てを破壊したくなる。次のターンの終了まで、ダメージに+15。',
149
+ ]]
150
+ end
151
+
152
+ # **パラサイトブラッドの誤作動表(2d6)
153
+ def get_pb_aas_urge_table
154
+ return [[
155
+ # **第1段階
156
+ '『緊急停止/20』機能異常の警報と共に、機能が緊急停止。次のターンのターン終了時まで[行動不能]となる。',
157
+ '『動作不調/10』駆動系に異常発生。このターンのターン終了まで[行動不能]となる。',
158
+ '『腕部停止/10』腕部機能に異常発生。このターンのターン終了まで[タイミング:攻撃]を失う。',
159
+ '『視覚異常/10』センサー系に異常。60ターン(10分)の間、[暗闇]となる。',
160
+ '『機能制動/0』機能が一瞬停止するが、以後正常に動作。影響なし。',
161
+ '『機能安定/0』機能がむしろ安定した。影響なし。',
162
+ '『不良調整/0』機能に違和感を覚えるが誤差の範囲内。影響なし。',
163
+ '『機能暴発/10』兵装の調子が悪化。次のターンのターン終了まで、[タイミング:準備]の《兵装》が使用できない。',
164
+ '『離脱機能/10』異常発生。即座に[戦闘移動]を行い、最も近い敵から遠ざかるように移動する。',
165
+ '『排熱暴走/10』排熱機能に異常。次のターンのターン終了まで[着火]状態となる。特殊ダメージは本人のものを使用する。',
166
+ '『電装異常/20』電装系に異常。即座に【負荷】が2点蓄積する。',
167
+ ],
168
+
169
+ # **第2段階
170
+ [
171
+ '『安全機能/20』セーフティが誤動作。このターンのターン終了まで判定の達成値に-5。',
172
+ '『筋肉萎縮/20』人工筋肉に異常発生。60ターン(10分)の間、【肉体】判定の達成値に-2。',
173
+ '『出力低下/20』駆動部に異常発生。60ターン(10分)の間、【機敏】判定の達成値に-2。',
174
+ '『感覚異常/10』感覚機能に異常発生。60ターン(10分)の間、【感覚】判定の達成値に-2。',
175
+ '『視界不良/10』視覚機能に異常発生。60ターン(10分)の間、【幸運】判定の達成値に-2。',
176
+ '『機能安定/0』機能がむしろ安定した。影響なし。',
177
+ '『不良調整/0』機能に違和感を覚えるが誤差の範囲内。影響なし。',
178
+ '『援護不通/10』援護ソフトが誤作動。60ターン(10分)の間、【知力】判定の達成値に-2。',
179
+ '『発声不調/20』通話機能に異常。60ターン(10分)の間、声を出しても雑音だらけになって意味が通じず、さらに【精神】判定の達成値に-2。',
180
+ '『装甲軟化/20』防御機能に異常。次のターンのターン終了まで、防御力に-5。',
181
+ '『装備異常/20』精密動作に異常発生。装備している[通常アイテム]の武器がランダムでひとつ、[装備]から外れる。',
182
+ ],
183
+
184
+ # **第3段階
185
+ [
186
+ '『動力漏電/20』動力が漏電し始める。【負荷】が2点蓄積する。',
187
+ '『脚部異常/20』脚部に異常発生。次のターンのターン終了まで[戦闘移動][全力移動]の距離が半分になる。',
188
+ '『足下転倒/20』バランサーに異常発生。[転倒]状態となる。',
189
+ '『出力向上/20』突然出力が上昇する。次のターンのターン終了まで、特殊ダメージに+1d。',
190
+ '『機能制動/10』一瞬違和感を覚えるが、以後正常に動作。影響なし。',
191
+ '『障壁減衰/10』電力が減衰する。【電力】を5消費する。',
192
+ '『身体向上/10』格闘機能が向上。次のターンのターン終了まで、肉弾ダメージに+1d。',
193
+ '『精度向上/20』火器管制機能が向上。次のターンのターン終了まで、射撃ダメージに+1d。',
194
+ '『反射鋭化/20』反応速度が加速した。次のターンのターン終了まで、【行動値】に+5。',
195
+ '『友軍誤認/20』警戒装置が誤動。最も近い[距離:移動10m/対象:1体]に通常肉弾攻撃を行う。',
196
+ '『電子賦活/20』電磁障壁が突如復帰。【電力】が10回復する。',
197
+ ],
198
+
199
+ # **第4段階
200
+ [
201
+ '『照準誤認/20』照準機能に異常発生。最も近い[距離:移動10m/対象:1体]に通常肉弾攻撃を行う。判定は自動的にクリティカルとなる。',
202
+ '『攻撃特化/20』攻撃機能が異常動作。次のターンのターン終了まで、ダメージに+2d。ただし、その間[タイミング:瞬間]を行えない。',
203
+ '『機内窒息/20』呼吸機能に異常。次のターンのターン終了まで[窒息]状態となる。',
204
+ '『自動援護/20』援護機能が自動的に作動する。即座に[タイミング:準備]を1回行う。',
205
+ '『音声遮断/10』聴覚機能に異常発生。次のターンのターン終了まで一切の物音が聞こえず、回避判定の達成値に-5。',
206
+ '『電流加速/10』突然電磁障壁が効率的に流れる。【電力】が10回復。',
207
+ '『精密射撃/20』照準機能が向上。60ターン(10分間)の間、ダメージに+5。',
208
+ '『緊急措置/20』突然、緊急時の対策機能が発動する。【負荷】が2蓄積し、【電力】が20回復する。',
209
+ '『荷電暴走/20』電流の流れに異常が発生。【HP】を10消費し、次のターンのターン終了までダメージに+10。',
210
+ '『状況分析/20』周辺解析ソフトが高速で動作。60ターン(10分間)の間、命中判定の達成値に+5。',
211
+ '『機能再生/20』兵装に誤作動。取得済みの使用不能になった《兵装》を1つ指定し、再び使用できるようになる。',
212
+ ],
213
+
214
+ # **第5段階
215
+ [
216
+ '『機能停止/30』機能が作動しなくなる。このターンのターン終了まで、【負荷】を蓄積させる行動が取れなくなる。',
217
+ '『機関暴走/30』放熱機関が暴走する。本人を中心として[対象:半径5m全て]が次のターンのターン終了まで[着火]状態となる。特殊ダメージはこの表を振ったPCのものを使用する。',
218
+ '『電力低下/20』出力が上がらない。【電力】が20減少する。',
219
+ '『急速修復/20』電磁障壁と生命維持装置が高速処理を始める。【HP】が20回復。',
220
+ '『駆動不調/20』駆動系に動作不良。次のターンのターン終了まで、判定の達成値に-5。',
221
+ '『機体清冽/20』機能が初期化され、異常から復帰。[気絶・死亡・戦闘不能]以外の状態変化がすべて解除される。',
222
+ '『機体減速/20』運動機能が暴走。次のターンのターン終了まで【行動値】に-10(最低1)。',
223
+ '『排毒噴出/20』排気機構が誤作動。[対象:半径5m全て]が次のターンのターン終了まで[猛毒]状態となる。',
224
+ '『緊急駆動/20』機動性が向上。次のターンのターン終了まで判定の達成値に+5。',
225
+ '『負荷軽減/30』急激に負荷が解消される。【負荷】が2点回復する。',
226
+ '『出力過剰/30』全出力が過剰なまでに上昇する。次のターンのターン終了までダメージに+10。',
227
+ ]]
228
+ end
229
+ end
230
+ end
231
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bcdice/game_system/DungeonsAndDragons'
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class Pathfinder < DungeonsAndDragons
8
+ # ゲームシステムの識別子
9
+ ID = 'Pathfinder'
10
+
11
+ # ゲームシステム名
12
+ NAME = 'Pathfinder'
13
+
14
+ # ゲームシステム名の読みがな
15
+ SORT_KEY = 'はすふあいんたあ'
16
+
17
+ # ダイスボットの使い方
18
+ HELP_MESSAGE = "※このダイスボットは部屋のシステム名表示用となります。\n"
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,324 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class Peekaboo < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'Peekaboo'
8
+
9
+ # ゲームシステム名
10
+ NAME = 'ピーカーブー'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'ひいかあふう'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
17
+ ・判定
18
+  判定時にクリティカルとファンブルを自動判定します。
19
+ ・各種表
20
+  ・学校イベント表        SET
21
+  ・個別学校イベント表      PSET
22
+  ・オバケ屋敷イベント表     OET
23
+  ・イノセント用バタンキュー!表 IBT
24
+  ・スプーキー用バタンキュー!表 SBT
25
+  ・日中ブラブラ表        NET
26
+  ・オバケぶらり旅表       STT
27
+  ・仲間効果表          NST
28
+  ・ランダム特技決定表      RTT
29
+  ・指定特技(不良)表       TNT
30
+  ・指定特技(運動)表       TET
31
+  ・指定特技(友達)表       TFT
32
+  ・指定特技(遊び)表       TPT
33
+  ・指定特技(勉強)表       TST
34
+  ・指定特技(大人)表       TAT
35
+ ・D66ダイスあり
36
+ INFO_MESSAGE_TEXT
37
+
38
+ def initialize(command)
39
+ super(command)
40
+
41
+ @sort_add_dice = true
42
+ @enabled_d66 = true
43
+ @d66_sort_type = D66SortType::ASC
44
+ @round_type = RoundType::CEIL # 端数切り上げに設定
45
+ end
46
+
47
+ # ゲーム別成功度判定(2D6)
48
+ def check_2D6(total, dice_total, _dice_list, cmp_op, target)
49
+ return '' if target == '?'
50
+ return '' unless cmp_op == :>=
51
+
52
+ if dice_total <= 2
53
+ return " > ファンブル(【眠気】が1d6点上昇)"
54
+ elsif dice_total >= 12
55
+ return " > スペシャル(【魔力】あるいは【眠気】が1d6点回復)"
56
+ elsif total >= target
57
+ return " > 成功"
58
+ else
59
+ return " > 失敗"
60
+ end
61
+ end
62
+
63
+ def eval_game_system_specific_command(command)
64
+ roll_tables(command, TABLES)
65
+ end
66
+
67
+ TABLES = {
68
+ "RTT" => DiceTable::SaiFicSkillTable.new(
69
+ [
70
+ ['不良', ['夜更かし', 'いねむり', '無視', 'ウソつき', '悪口', 'いたずら', 'ズル', '隠れる', 'ぬすむ', 'おどす', 'けんか',]],
71
+ ['運動', ['泳ぐ', '木登り', '柔らかい', 'マラソン', 'とぶ', 'かけっこ', 'バランス', '投げる', '球技', '打ち返す', '力持ち',]],
72
+ ['友達', ['ネット', 'うわさ話', '優しさ', 'がまん', 'お手紙', 'おしゃべり', '自転車', '勇気', '約束', '仕切る', '秘密基地',]],
73
+ ['遊び', ['パソコン', 'ゲーム', '集める', '絵', '音楽', '空想', '読書', 'お話づくり', 'クイズ', '手品', '占い',]],
74
+ ['勉強', ['実験', '宇宙', '生き物', '工作', '計算', '宿題', '漢字', '作文', '歴史', '地理', '外国語',]],
75
+ ['大人', ['法律', 'しかる', '手当て', 'マナー', '推理', '計画性', 'お料理', 'お買い物', 'オシャレ', '恋愛', '道楽',]],
76
+ ],
77
+ peekaboo_style: true
78
+ ),
79
+ "SET" => DiceTable::Table.new(
80
+ "学校イベント表",
81
+ "2D6",
82
+ [
83
+ "持ち物検査が行われる!イノセント全員は、《隠れる/不良9》の判定を行うこと。失敗したキャラクターは、GMがアイテム1個を選んで没収することができる(セッション終了時に返してもらえる)",
84
+ "クラスで流行っている遊びに誘われる。GMは、「遊び」の分野の中からランダムに特技一つを選ぶ。イノセント全員は、その判定を行う。失敗したキャラクターは、【眠気】が1d6点増える。",
85
+ "とても退屈な授業が始まった。イノセント全員は、《いねむり/不良3》の判定を行う。失敗したキャラクターは、【眠気】が1d6+1点増える。",
86
+ "明日までの宿題を出される。イノセント全員は、明日までに宿題を終わらせないといけない。宿題を終わらせるためには、各サイクルの終わりに、《宿題/勉強7》の判定を行い、それに成功しなければいけない。宿題を次の日の学校フェイズまでに終わらせることができなかった場合は、居残り勉強させられる。その日の放課後フェイズの最初のサイクルは、1回休み。",
87
+ "今日も今日とて楽しい授業。GMは、「勉強」の分野の中からランダムに特技1つを選ぶ。イノセント全員は、その判定を行う。失敗したキャラクターは【眠気】が1d6点増える。",
88
+ "特に変わったこともなく、おだやかな一日だった。イノセント全員は、【眠気】が1点増える。",
89
+ "今日の体育の時間はハードだった! GMは、「運動」の分野の中からランダムに特技1つを選ぶ。イノセント全員は、その判定を行う。失敗したキャラクターは、【眠気】が1d6点増える。",
90
+ "自習の時間だ!GMは、「勉強」の分野の中からランダムに特技1つを選ぶ。イノセント全員は、その判定を行う。成功したキャラクターは、1回だけ自由行動ができる。",
91
+ "抜き打ちテストだ!GMは、「勉強」の分野の中からランダムに特技1つを選ぶ。イノセント全員は、-2の修正をつけて、その特技の判定を行う。成功したキャラクターはよい点をゲット!家にかえってそれを親に見せるとおこづかいを1個もらえる。失敗したキャラクターは、親にこっぴどく怒られ、【眠気】が1d6点増えるうえに、それ以降「みんなで遊ぶ」ことが出来なくなる。",
92
+ "体操服や水着、宿題に提出物などなど、今日は学校に持ってこないといけないものがあったはず!《計画性/大人7》で判定を行う。失敗すると、先生に怒られてしょんぼり。【眠気】が1d6点増える。",
93
+ "それぞれに色々なことがあった。イノセントは、各自1回ずつ2d6を振り、個別学校イベント表の指示に従うこと。"
94
+ ]
95
+ ),
96
+ "PSET" => DiceTable::Table.new(
97
+ "個別学校イベント表",
98
+ "2D6",
99
+ [
100
+ "クラスの中に気になるコが現れる。《恋愛/大人11》の判定を行う。成功すると、その子と仲良くなって経験値を1点獲得する。",
101
+ "お腹の調子が悪くなり、トイレに行きたくなる。《がまん/友達5》か《隠れる/不良9》の判定を行うこと。失敗すると、不名誉なあだ名をつけられ、それ以降、「友達」の分野の判定に-1の修正を受ける。",
102
+ "今日の給食には、どうしても苦手な食べ物が出てきた。《勇気/友達9》で判定を行うこと。成功すると、苦手な食べ物を克服し、気分爽快!【眠気】を1d6点回復するか、【元気】を1点回復することができる。",
103
+ "友達から遊ぼうと誘われる。その日の放課後フェイズに、クラスメイト1d6人と「みんなで遊ぶ」ことができる。これを断る場合は、《優しさ/友達4》で判定を行うこと。失敗するとこれ以降、「みんなで遊ぶ」を行うとき、友達を誘うことが出来なくなる。",
104
+ "今日はクラブ活動があった。次のサイクルは行動できなくなる。その代わり、好きな特技1つを選ぶ。このセッションの間、その特技の判定を行うとき+1の修正がつく。",
105
+ "授業中、先生がとても難しい問題を出してくる。GMは、「勉強」の分野からランダムに特技を1つ選ぶ。その判定を行うこと。成功すると、経験値を1点獲得する。",
106
+ "クラスでオバケの噂を耳にする。《うわさ話/友達3》の判定に成功すると、GMからそのセッションで出てくるオバケの外見や情報を教えてもらうことができる。",
107
+ "校庭や体育館など、自分達の遊び場が他のグループに占拠されている。《けんか/不良12》で判定を行うこと。成功すると、それ以降「友達」の分野の判定に+1の修正を受ける。失敗すると遊び場を失ってしまう。1ダメージを受け、それ以降、「友達と遊ぶ」ことができなくなってしまう。",
108
+ "いじめの現場に出くわす! 《勇気/友達10》の判定に成功すると、いじめっこを撃退することができる。いじめられていた子が、お礼にお菓子を1個くれる。失敗すると1点のダメージを受ける。",
109
+ "今日は全校集会があった。《がまん/友達5》で判定を行う。失敗すると貧血で倒れ次のサイクルは行動できなくなる。",
110
+ "図書室で面白そうな本を発見する。《読書/遊び8》で判定を行うこと。成功すると、経験値を1点獲得する。"
111
+ ]
112
+ ),
113
+ "OET" => DiceTable::Table.new(
114
+ "お化け屋敷イベント表",
115
+ "2D6",
116
+ [
117
+ "謎かけ守護者が門を護っている。未行動のキャラクターは、《クイズ/遊び10》の判定を行うことができる。判定したキャラクターは行動済みになる。失敗したキャラクターは、1点のダメージを受ける。誰かが成功すれば、イベントはクリアできる。",
118
+ "天井から血の雨が降ってくる! この雨に触れると火傷しちゃうみたいだ!【防御力】が0のスプーキーとイノセントは、《かけっこ/運動7》の判定を行う。失敗すると、イノセントは1ダメージ、スプーキーは1d6ダメージを受ける。成功・失敗にかかわらず、イベントはクリアできる。",
119
+ "トンガリ族の妖精がいる。彼は、先へ行くための通行料として、アイテムを要求してくる。何か好きなアイテム1個を渡すか、未行動のキャラクターは、《お話づくり/遊び9》の判定を行うことができる。判定したキャラクターは行動済みになる。誰かが判定に成功するか、アイテムを渡すかしたら、イベントはクリアできる。",
120
+ "行き止まりだ。先に進む方法が分からない。未行動のキャラクターは、《推理/大人6》の判定を行うことができる。判定したキャラクターは行動済みになる。誰かが成功したら、イベントはクリアできる。",
121
+ "まっくらで、何も見えない部屋だ。一行は不安におちいる。未行動のキャラクターは、《仕切る/友達11》の判定を行うことができる。判定したキャラクターは行動済みになる。誰かが成功すれば、イベントはクリアできる。",
122
+ "ジメジメした通路だ。特に何もしなくても、イベントはクリアだ。誰かがのぞむなら、自由行動を1回行うことができるぞ。",
123
+ "通路が途中で途切れて崖のようになっている。誰かが飛ぶことが出来れば、向こう岸にあるはしごを断崖にかけられそうだけど……。未行動のキャラクターは、《とぶ/運動6》の判定を行うことができる。判定したキャラクターは行動済みになる。誰かが成功すれば、イベントはクリアできる。",
124
+ "まぼろしの部屋だ。各キャラクターの大好物のまぼろしがつぎつぎ現れる。未行動のキャラクターは、《がまん/友達5》の判定を行うことができる。判定したキャラクターは行動済みになる。誰かが成功したら、イベントはクリアできる。",
125
+ "通路がいくつにも分岐している……。未行動のキャラクターのうち1人が《地理/勉強11》、もしくは《絵/遊び5》の判定を行う。判定したキャラクターは行動済みになる。失敗すると、そのオバケ屋敷の部屋数が1d6点上昇する。成功失敗にかかわらず、イベントはクリアできる。",
126
+ "シャドウが見回りをしている。未行動のキャラクターのうち1人が、《隠れる/不良9》の判定を行う。成功すれば、イベントはクリアできる。失敗すると、プレイヤーと同じ人数のシャドウと戦闘を行うこと。勝利すればイベントはクリアできる。",
127
+ "足下からシャドウが現れ、みんなに襲いかかる!プレイヤーと同じ人数のシャドウと戦闘を行うこと。勝利すればイベントはクリアできる。"
128
+ ]
129
+ ),
130
+ "NET" => DiceTable::Table.new(
131
+ "日中ブラブラ表",
132
+ "2D6",
133
+ [
134
+ "相棒のスプーキーと喧嘩する。1d6サイクルの間、自分の相棒のスプーキーは、自分に対して【お助け力】を使用することができなくなる。",
135
+ "ついついネットやゲームで時間をつぶす。特に何もなし。。",
136
+ "街をブラブラしていたら、突然シッポ族のオバケに襲われる。「お前、大人のくせに俺が見えるのか?」GMは「運動」の分野の中から、ランダムに特技を1つ選ぶ。この表の使用者は、その判定を行う。成功したら、オバケに気に入られ、セッション中、好きな時に一度だけ、シッポ族の魔法をかけてもらうことができるようになる。失敗すると1点のダメージを受ける。",
137
+ "…暇だ。たまには、タメになりそうな本でも読んでみるか。GMは「勉強」の分野の中から、ランダムに特技1つを選ぶ。この表の使用者はその判定を行う。成功したら、セッション中、好きな時に一度だけ、判定を自動的に成功することができるようになる。失敗すると退屈のあまり【眠気】が1d6点上昇する。",
138
+ "ああ、まずい。会いたくないヤツに会っちまったなぁ。どうやって誤魔化そう?GMは「不良」の分野の中から、ランダムに特技1つを選ぶ。この表の使用者は、その判定を行う。成功したら、うまく誤魔化してそのシナリオに登場するハグレオバケの噂を手に入れることができる。失敗するとお説教をくらって【眠気】が1d6点上昇する。",
139
+ "ふわわわわ。眠いなぁ。……寝るか。【眠気】を2d6点回復する。",
140
+ "うーん。腹減った。何か食べたいけど……。GMは「大人」の分野の中から、ランダムに特技を1つ選ぶ。この表の使用者はその判定を行う。成功したら、【お菓子】を1d6個手に入れる。失敗すると、持っていれば【おこづかい】を一個減らす。",
141
+ "うーん。そうだ。あいつに連絡してみるか……。GMは「友達」分野の中からランダムに特技1つを選ぶ。この表の使用者は、その判定を行う。成功したら友達の力を借りて、それ以降の自分の手番に二回行動することができるようになる。失敗すると、誰にも捕まらず、寂しさのあまり【眠気】が1d6点上昇する。",
142
+ "臨時のバイト。久々の労働だ。GMは「遊び」の分野の中から、ランダムに特技を1つ選ぶ。この表の使用者は、その判定を行う。成功したら、【おこづかい】を1つ獲得できる。失敗すると【眠気】が1d6点上昇する。",
143
+ "あ、これ欲しかったんだよな。つい無駄な買い物をしてしまう。持っていれば【おこづかい】を一個減らす。",
144
+ "相棒のスプーキーと、素敵な時間を過ごす。そのセッションの間だけ、「武装契約」「守護契約」「強化契約」「同調契約」のいずれか一つを結ぶことができる。"
145
+ ]
146
+ ),
147
+ "IBT" => DiceTable::Table.new(
148
+ "イノセント用バタンキュー!表",
149
+ "1D6",
150
+ [
151
+ "悲しい別れ。病院につれていくことができれば、1d6日入院したあとに目覚めます。その間は、行動不能です。目覚めたときに【眠気】も【元気】もすべて回復しますが、スプーキーを見ることができなくなっています。そのキャラクターはスプーキーと一緒に冒険を続けることはできません……。",
152
+ "大けがをして昏睡状態。病院につれていくことができれば、1d6日入院したあとに目覚めます。その間は、行動不能です。目覚めたときに【眠気】はすべて回復し、【元気】が3点回復します。",
153
+ "気絶しちゃった! 1d6サイクル後に目覚めます。気絶している間は、行動不能です。目覚めたときに【眠気】が1d6点、【元気】が1点回復します。",
154
+ "体が動かない! 何かを見たり、話したりといった簡単な行動ならできますが、自由行動や戦闘行動といった通常の行動は行えません。1d6サイクル後に【元気】が1点回復し、通常通り行動できるようになります。",
155
+ "かろうじて意識はあるものの、朦朧としてきた。【眠気】が2d6点増えます。それで行動不能になっていなければ、【元気】が1点回復します。そうでなければ、気絶してしまい、1d6サイクル後に目覚めます。気絶している間は、行動不能です。目覚めたときに【眠気】が1d6点減少し、【元気】が1点回復します。",
156
+ "なんという幸運!アイテムがキミを護ってくれた。もし持ち物にアイテムがあった場合、それが1個破壊され、受けたダメージを無効化します。アイテムがなければ行動不能になります。"
157
+ ]
158
+ ),
159
+ "SBT" => DiceTable::Table.new(
160
+ "スプーキー用バタンキュー!表",
161
+ "1D6",
162
+ [
163
+ "封印状態! オバケは封印されてしまいます。1d6*1年後になれば、そのオバケは復活します。それまでは、イノセントと一緒に冒険することはできません。できたとしても、そのときイノセントはあなたを見ることができなくなっているかもしれませんが……。",
164
+ "休眠状態! オバケは休眠状態になります。1d6日が経過すると目覚めます。その間は、行動不能です。目覚めたときに【魔力】はすべて回復しています。",
165
+ "コバケ状態! 体は小さく縮んてしまい、重戦闘も戦闘行動も行うことはできません。【魔力】が1点以上になると、通常通り行動できるようになります。",
166
+ "混沌変化! 自分のリングのからだリストを使って、ランダムにからだを1つ選びます。自分のからだが、それに変化します。1d6サイクルの間、行動不能になります。その後、【魔力】が1d6点回復して通常通り行動できるようになります。",
167
+ "魔力変質! 自分のリングの衣装リストを使って、ランダムに衣装を1つ選びます。自分の衣装1つが、それに変化します。そして、1d6サイクルの間、行動不能になります。その後、【魔力】が1d6点回復して通常通り行動できるようになります。",
168
+ "魔法暴発! 自分の持っている魔法をランダムに1つ選んで、その効果が発動します。魔法の対象が選べる場合は、スプーキーのプレイヤーが選んで構いません。そして、1d6サイクルの間、行動不能になります。その後、【魔力】が1d6点回復して通常通り行動できるようになります。"
169
+ ]
170
+ ),
171
+ "TNT" => DiceTable::Table.new(
172
+ "指定特技(不良)表",
173
+ "2D6",
174
+ [
175
+ "《夜更かし/不良2》",
176
+ "《いねむり/不良3》",
177
+ "《無視/不良4》",
178
+ "《ウソつき/不良5》",
179
+ "《悪口/不良6》",
180
+ "《いたずら/不良7》",
181
+ "《ズル/不良8》",
182
+ "《隠れる/不良9》",
183
+ "《ぬすむ/不良10》",
184
+ "《おどす/不良11》",
185
+ "《けんか/不良12》"
186
+ ]
187
+ ),
188
+ "TET" => DiceTable::Table.new(
189
+ "指定特技(運動)表",
190
+ "2D6",
191
+ [
192
+ "《泳ぐ/運動2》",
193
+ "《木登り/運動3》",
194
+ "《柔らかい/運動4》",
195
+ "《マラソン/運動5》",
196
+ "《とぶ/運動6》",
197
+ "《かけっこ/運動7》",
198
+ "《バランス/運動8》",
199
+ "《投げる/運動9》",
200
+ "《球技/運動10》",
201
+ "《打ち返す/運動11》",
202
+ "《力持ち/運動12》"
203
+ ]
204
+ ),
205
+ "TFT" => DiceTable::Table.new(
206
+ "指定特技(友達)表",
207
+ "2D6",
208
+ [
209
+ "《ネット/友達2》",
210
+ "《うわさ話/友達3》",
211
+ "《優しさ/友達4》",
212
+ "《がまん/友達5》",
213
+ "《お手紙/友達6》",
214
+ "《おしゃべり/友達7》",
215
+ "《自転車/友達8》",
216
+ "《勇気/友達9》",
217
+ "《約束/友達10》",
218
+ "《仕切る/友達11》",
219
+ "《秘密基地/友達12》"
220
+ ]
221
+ ),
222
+ "TPT" => DiceTable::Table.new(
223
+ "指定特技(遊び)表",
224
+ "2D6",
225
+ [
226
+ "《パソコン/遊び2》",
227
+ "《ゲーム/遊び3》",
228
+ "《集める/遊び4》",
229
+ "《絵/遊び5》",
230
+ "《音楽/遊び6》",
231
+ "《空想/遊び7》",
232
+ "《読書/遊び8》",
233
+ "《お話づくり/遊び9》",
234
+ "《クイズ/遊び10》",
235
+ "《手品/遊び11》",
236
+ "《占い/遊び12》"
237
+ ]
238
+ ),
239
+ "TST" => DiceTable::Table.new(
240
+ "指定特技(勉強)表",
241
+ "2D6",
242
+ [
243
+ "《実験/勉強2》",
244
+ "《宇宙/勉強3》",
245
+ "《生き物/勉強4》",
246
+ "《工作/勉強5》",
247
+ "《計算/勉強6》",
248
+ "《宿題/勉強7》",
249
+ "《漢字/勉強8》",
250
+ "《作文/勉強9》",
251
+ "《歴史/勉強10》",
252
+ "《地理/勉強11》",
253
+ "《外国語/勉強12》"
254
+ ]
255
+ ),
256
+ "TAT" => DiceTable::Table.new(
257
+ "指定特技(大人)表",
258
+ "2D6",
259
+ [
260
+ "《法律/大人2》",
261
+ "《しかる/大人3》",
262
+ "《手当て/大人4》",
263
+ "《マナー/大人5》",
264
+ "《推理/大人6》",
265
+ "《計画性/大人7》",
266
+ "《お料理/大人8》",
267
+ "《お買い物/大人9》",
268
+ "《オシャレ/大人10》",
269
+ "《恋愛/大人11》",
270
+ "《道楽/大人12》"
271
+ ]
272
+ ),
273
+ "STT" => DiceTable::Table.new(
274
+ "オバケぶらり旅表",
275
+ "2D6",
276
+ [
277
+ "オバケ狩りに遭遇してしまいますオバケ判定を行ってください。失敗すると2d6点のダメージを受けます。",
278
+ "リングの上司からレポートを提出しろといわれます。セッション終了に、今回の暴言がどんな話だったかをまとめ、GMに報告してください。GMが、その報告がうまくまとまっていると感じたら、そのスプーキーとイノセントのコンビがもらえる経験点が1点上昇します。",
279
+ "近所のお家に忍び込み、めぼしいものを探しました。オバケ判定を行ってください。成功すると、ルールブック228頁に書いてあるアイテム表を使ってランダムで決めたアイテム1個を入手します。",
280
+ "街の優しいおばけたちに頼まれます。そのシナリオに登場するはぐれオバケを説得し、悪事をやめさせることができれば、そのスプーキーとイノセントのコンビがもらえる経験点が1点上昇します。",
281
+ "オバケたちとギャンブルに興じます♪好きなだけ【魔力】を減少してください。サイコロを1個振ります。奇数が出たらギャンブルに勝利!減少した【魔力】の2倍の値だけ魔力が回復します。偶数が出たらギャンブルに敗北(しょぼん)。減少した魔力はかえってきません。",
282
+ "オバケたちのウワサを耳にします。GMは、シナリオ上で重要な情報を1つ選んで下さい。その情報を入手することができます。",
283
+ "人間について学習します。オバケ判定を行って下さい。成功すると、ランダムに好きな特技を1つ選びます。そのゲームの間、その特技を習得しているものとして、行為判定を行うことができるようになります。",
284
+ "リングのオバケ学校で再修行。自分の魔法1つを未取得にします。そして、共用か自分のリングの魔法リストから、ランダムに魔法を1つ選び、新たに修得します。",
285
+ "突如、誰かの役に立ちたいと思いました。このセッションが終わるまでに、そのスプーキーとイノセントのコンビに対して、5人以上のキャラクターが「ありがとう」と言ったら、コンビのもらえる経験点が1点上昇します。",
286
+ "道端で拾ったものがオバケ市場で売れました。ラッキー♪お小遣いを1つ入手できます。",
287
+ "オバケ狩りから身を隠すために変装します。自分の衣装1つを未取得にします。そして、共用か自分のリングの衣装から、ランダムに衣装を1つ選び、新たに修得します。"
288
+ ]
289
+ ),
290
+ "SAT" => DiceTable::Table.new(
291
+ "オバケ行動表",
292
+ "2D6",
293
+ [
294
+ "「えー。お前なんか嫌いだ!」スプーキーは、イノセントとけんかしてしまいます。そのサイクルは行動せず、【魔力】も回復しません。",
295
+ "「疲れたよーん」スプーキーは、行動をパスして【魔力】を回復します。",
296
+ "「ムムム。気になる、気になるぞー」スプーキーは、戦闘フェイズなら「ひみつを暴く」を行います。それ以外なら「オバケ占い」を行います。",
297
+ "「やっぱ定番はこうでしょう」スプーキーは、戦闘フェイズなら「攻撃」を行います。それ以外なら「調査」を行います。",
298
+ "「オバケ的にはどう思う?」スプーキーは、ほかのスプーキーのいうことをききます。",
299
+ "「うん、そうするー」スプーキーは自分の契約しているイノセントのいうことをききます。",
300
+ "「うーん。そうかなぁ?」スプーキーは、ほかのイノセントのいうことをききます。",
301
+ "「トリック・オア・トリート!」スプーキーは、何かのアイテム(お菓子やおこづかいが適当でしょう)をもらえたら、イノセントのいうことをききます。もらったアイテムは、即座に消費されます。",
302
+ "「ここは派手にいきたいぜ!」スプーキーは、自分の修得している魔法をランダムに1個選んで、それを使用します。対象を決める場合は、自由に選んで構いません。",
303
+ "「ここは様子見だなぁ」スプーキーは、行動をパスして【魔力】を回復します。",
304
+ "「こうなりゃ本気モードだ!」スプーキーは自分の契約しているイノセントのいうことをききます。また、そのサイクルの間、そのスプーキーは魔力の消費なしで、魔法を使用することができます。"
305
+ ]
306
+ ),
307
+ "NST" => DiceTable::Table.new(
308
+ "仲間効果表",
309
+ "1D6",
310
+ [
311
+ "用心棒。この仲間の効果は、誰かがダメージを受けた時に使用できる。そのダメージを無効化する。",
312
+ "パトロン。この仲間の効果は、好きな時に使用できる。【おこづかい】一つか、ランダムに選んだアイテム一つを獲得できる。",
313
+ "助言。この仲間の効果は、誰かが判定を行うときに使用できる。そのNPCが人間の場合、その判定に使う特技が、そのNPCが修得している特技なら、自動的に成功になる。そのNPCがオバケの場合、その判定にプラス2かマイナス2の修正をつけることができる。",
314
+ "師匠。この仲間の効果は、好きな時に使用できる。そのNPCが人間の場合、ランダムに選んだ才能を一つ獲得する。この効果は、その日の終りまで持続する。そのNPCがオバケの場合、そのオバケが修得している好きな魔法を一つ使用する。",
315
+ "時間稼ぎ。好きな行動済みのキャラクター1人を未行動にしてくれる。",
316
+ "乱入行動。自分が攻撃に成功した時に使用できる。そのダメージを1d6点上昇してくれる。"
317
+ ]
318
+ ),
319
+ }.freeze
320
+
321
+ register_prefix(['RTT'] + TABLES.keys)
322
+ end
323
+ end
324
+ end