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,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class IthaWenUa < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'IthaWenUa'
8
+
9
+ # ゲームシステム名
10
+ NAME = 'イサー・ウェン=アー'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'いさあうえんああ'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = "1D100<=m 方式の判定で成否、クリティカル(01)・ファンブル(00)を自動判定します。\n"
17
+
18
+ def check_1D100(total, _dice_total, cmp_op, target)
19
+ return '' if target == '?'
20
+ return '' unless cmp_op == :<=
21
+
22
+ diceValue = total % 100
23
+ dice0 = diceValue / 10 # 10の位を代入
24
+ dice1 = diceValue % 10 # 1の位を代入
25
+
26
+ if (dice0 == 0) && (dice1 == 1)
27
+ ' > 01 > クリティカル'
28
+ elsif (dice0 == 0) && (dice1 == 0)
29
+ ' > 00 > ファンブル'
30
+ elsif total <= target
31
+ ' > 成功'
32
+ else
33
+ ' > 失敗'
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class JamesBond < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'JamesBond'
8
+
9
+ # ゲームシステム名
10
+ NAME = 'ジェームズ・ボンド007'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'しええむすほんと007'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
17
+ ・1D100の目標値判定で、効果レーティングを1~4で自動判定。
18
+  例)1D100<=50
19
+    JamesBond : (1D100<=50) → 20 → 効果3(良)
20
+ INFO_MESSAGE_TEXT
21
+
22
+ def check_1D100(total, _dice_total, cmp_op, target) # ゲーム別成功度判定(1d100)
23
+ return '' if target == '?'
24
+ return '' unless cmp_op == :<=
25
+
26
+ base = ((target + 9) / 10).floor
27
+
28
+ if total >= 100
29
+ # 100は常に失敗
30
+ " > 失敗"
31
+ elsif total <= base
32
+ " > 効果1(完璧)"
33
+ elsif total <= base * 2
34
+ " > 効果2(かなり良い)"
35
+ elsif total <= base * 5
36
+ " > 効果3(良)"
37
+ elsif total <= target
38
+ " > 効果4(まあまあ)"
39
+ else
40
+ " > 失敗"
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,394 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class Kamigakari < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'Kamigakari'
8
+
9
+ # ゲームシステム名
10
+ NAME = '神我狩'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'かみかかり'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
17
+ ・各種表
18
+ ・感情表(ET)
19
+ ・霊紋消費の代償表(RT)
20
+ ・伝奇名字・名前決定表(NT)
21
+ ・魔境臨界表(KT)
22
+ ・獲得素材チャート(MTx xは[法則障害]の[強度]。省略時は1)
23
+   例) MT MT3 MT9
24
+ ・D66ダイスあり
25
+ INFO_MESSAGE_TEXT
26
+
27
+ def initialize(command)
28
+ super(command)
29
+
30
+ @sort_add_dice = true
31
+ @enabled_d66 = true
32
+ @d66_sort_type = D66SortType::NO_SORT
33
+ end
34
+
35
+ def eval_game_system_specific_command(command)
36
+ tableName = ""
37
+ result = ""
38
+
39
+ debug("eval_game_system_specific_command command", command)
40
+
41
+ case command.upcase
42
+
43
+ when "RT"
44
+ tableName, result, number = getReimonCompensationTableResult
45
+
46
+ when /^MT(\d*)$/
47
+ rank = Regexp.last_match(1)
48
+ rank ||= 1
49
+ rank = rank.to_i
50
+ tableName, result, number = getGetMaterialTableResult(rank)
51
+
52
+ else
53
+ return roll_tables(command, TABLES)
54
+ end
55
+
56
+ if result.empty?
57
+ return ""
58
+ end
59
+
60
+ text = "#{tableName}(#{number}):#{result}"
61
+ return text
62
+ end
63
+
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
+ 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
+ ]
120
+
121
+ result, number = get_table_by_d66(table)
122
+ result += "断片"
123
+
124
+ effect, number2 = getMaterialEffect(rank)
125
+ number = "#{number},#{number2}"
126
+
127
+ price = getPrice(effect)
128
+
129
+ result = "#{result}。#{effect}"
130
+ result += ":#{price}" unless price.nil?
131
+
132
+ return tableName, result, number
133
+ end
134
+
135
+ def getMaterialEffect(rank)
136
+ number = @randomizer.roll_once(6)
137
+
138
+ result = ""
139
+ type = ""
140
+ if number < 6
141
+ result, number2 = getMaterialEffectNomal(rank)
142
+ type = "よく見つかる素材"
143
+ else
144
+ result, number2 = getMaterialEffectRare()
145
+ type = "珍しい素材"
146
+ end
147
+
148
+ result = "#{type}:#{result}"
149
+ number = "#{number},#{number2}"
150
+
151
+ return result, number
152
+ end
153
+
154
+ 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
+ ]
170
+
171
+ number = @randomizer.roll_d66(D66SortType::NO_SORT)
172
+
173
+ result = get_table_by_number(number, table)
174
+ debug("getMaterialEffectNomal result", result)
175
+
176
+ if result =~ /\+n/
177
+ power, number2 = getMaterialEffectPower(rank)
178
+
179
+ result = result.sub(/\+n/, "+#{power}")
180
+ number = "#{number},#{number2}"
181
+ end
182
+
183
+ return result, number
184
+ end
185
+
186
+ def getMaterialEffectPower(rank)
187
+ table = [
188
+ [4, [1, 1, 1, 2, 2, 3]],
189
+ [8, [1, 1, 2, 2, 3, 3]],
190
+ [9, [1, 2, 3, 3, 4, 5]],
191
+ ]
192
+
193
+ rank = 9 if rank > 9
194
+ rankTable = get_table_by_number(rank, table)
195
+ power, number = get_table_by_1d6(rankTable)
196
+
197
+ return power, number
198
+ end
199
+
200
+ def getMaterialEffectRare()
201
+ table = [[3, '**付与'],
202
+ [5, '**半減'],
203
+ [6, '※GMの任意'],]
204
+
205
+ number = @randomizer.roll_once(6)
206
+ result = get_table_by_number(number, table)
207
+ debug('getMaterialEffectRare result', result)
208
+
209
+ if result =~ /\*\*/
210
+ attribute, number2 = getAttribute()
211
+ result = result.sub(/\*\*/, attribute.to_s)
212
+ number = "#{number},#{number2}"
213
+ end
214
+
215
+ return result, number
216
+ end
217
+
218
+ def getAttribute()
219
+ table = [
220
+ [21, '[火炎]'],
221
+ [33, '[冷気]'],
222
+ [43, '[電撃]'],
223
+ [53, '[風圧]'],
224
+ [56, '[幻覚]'],
225
+ [62, '[魔毒]'],
226
+ [64, '[磁力]'],
227
+ [66, '[閃光]'],
228
+ ]
229
+
230
+ number = @randomizer.roll_d66(D66SortType::NO_SORT)
231
+
232
+ result = get_table_by_number(number, table)
233
+
234
+ return result, number
235
+ end
236
+
237
+ 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
250
+
251
+ table = [nil,
252
+ '500G(効果値:1)',
253
+ '1000G(効果値:2)',
254
+ '1500G(効果値:3)',
255
+ '2000G(効果値:4)',
256
+ '3000G(効果値:5)',]
257
+ price = table[power]
258
+
259
+ return price
260
+ end
261
+
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,
350
+ {
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 => "草壁(くさかべ) 大悟/文"
387
+ }
388
+ ),
389
+ }.freeze
390
+
391
+ register_prefix(['RT', 'MT(\d*)'] + TABLES.keys)
392
+ end
393
+ end
394
+ end