bcdice 3.0.0.pre.alpha.1

Sign up to get free protection for your applications and to get access to all the features.
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,415 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class MeikyuDays < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'MeikyuDays'
8
+
9
+ # ゲームシステム名
10
+ NAME = '迷宮デイズ'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'めいきゆうていす'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
17
+ ・判定 (nMD+m)
18
+  n個のD6を振って大きい物二つだけみて達成値を算出します。修正mも可能です。
19
+  絶対成功と絶対失敗も自動判定します。
20
+ ・各種表
21
+  ・散策表      DRT
22
+  ・交渉表      DNT
23
+  ・休憩表      DBT
24
+  ・ハプニング表   DHT
25
+  ・カーネル停止表  KST
26
+  ・痛打表 CAT/戦闘ファンブル表 CFT/致命傷表 FWT
27
+  ・おたから表1/2/3/4 T1T/T2T/T3T/T4T
28
+  ・相場表      MPT
29
+  ・登場表      APT
30
+  ・因縁表 DCT/怪物因縁表 MCT/PC因縁表 PCT/ラブ因縁表 LCT
31
+ ・D66ダイスあり
32
+ INFO_MESSAGE_TEXT
33
+
34
+ def initialize(command)
35
+ super(command)
36
+
37
+ @sort_add_dice = true
38
+ @enabled_d66 = true
39
+ @d66_sort_type = D66SortType::ASC
40
+ end
41
+
42
+ def replace_text(string)
43
+ string = string.gsub(/(\d+)MD6/i) { "#{Regexp.last_match(1)}R6" }
44
+ string = string.gsub(/(\d+)MD/i) { "#{Regexp.last_match(1)}R6" }
45
+ return string
46
+ end
47
+
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
+ " > 絶対失敗"
54
+ elsif dice_total >= 12
55
+ " > 絶対成功"
56
+ elsif total >= target
57
+ " > 成功"
58
+ else
59
+ " > 失敗"
60
+ end
61
+ end
62
+
63
+ def checkRoll(string)
64
+ string = replace_text(string)
65
+
66
+ debug("checkRoll string", string)
67
+ unless (m = /(^|\s)S?((\d+)[rR]6([\+\-\d]*)(([>=]+)(\d+))?)(\s|$)/i.match(string))
68
+ debug("not mutch")
69
+ return nil
70
+ end
71
+
72
+ string = m[2]
73
+ dice_c = m[3].to_i
74
+ bonus = 0
75
+ signOfInequality = ""
76
+ diff = 0
77
+
78
+ bonusText = m[4]
79
+ bonus = ArithmeticEvaluator.eval(bonusText) unless bonusText.nil?
80
+
81
+ signOfInequality = m[6] if m[6]
82
+ diff = m[7].to_i if m[7]
83
+
84
+ dice_num = @randomizer.roll_barabara(dice_c, 6).sort
85
+ dice_str = dice_num.join(",")
86
+
87
+ dice_now = dice_num[dice_c - 2] + dice_num[dice_c - 1]
88
+ total_n = dice_now + bonus
89
+
90
+ dice_str = "[#{dice_str}]"
91
+
92
+ output = "#{dice_now}#{dice_str}"
93
+
94
+ if bonus > 0
95
+ output += "+#{bonus}"
96
+ elsif bonus < 0
97
+ output += bonus.to_s
98
+ end
99
+
100
+ if /[^\d\[\]]+/ =~ output
101
+ output = "(#{string}) > #{output} > #{total_n}"
102
+ else
103
+ output = "(#{string}) > #{total_n}"
104
+ end
105
+
106
+ if signOfInequality != "" # 成功度判定処理
107
+ cmp_op = Normalize.comparison_operator(signOfInequality)
108
+ output += check_2D6(total_n, dice_now, dice_num, cmp_op, diff)
109
+ end
110
+
111
+ return output
112
+ end
113
+
114
+ #################### 迷宮デイズ ########################
115
+ def eval_game_system_specific_command(command)
116
+ if (result = roll_tables(command, TABLES))
117
+ result
118
+ else
119
+ checkRoll(command)
120
+ end
121
+ end
122
+
123
+ TABLES = {
124
+ "DRT" => DiceTable::Table.new(
125
+ "散策表",
126
+ "2D6",
127
+ [
128
+ '次に挑む迷宮の迷宮支配者を倒さなければ人類文明が滅ぶことを偶然知ってしまう。《気力》を最大値まで回復する。',
129
+ '同じ迷宮を対象とする違う依頼を受ける。シナリオの目的を果たしたときに、追加で1d6MCの報酬を得られるようになる。',
130
+ '他の迷宮屋の評判を耳にする。パーティから好きなキャラクター1人を選び、そのキャラクターに対する《好意》が1点上昇する。',
131
+ '毎日の散歩の成果が出て、体の調子が良い。このゲーム中、《HP》の最大値が5点上昇し、《HP》が5点回復する。',
132
+ 'メディアの取材を受ける。《民の声》を2点得る。',
133
+ '近所からおすそ分けをもらう。【回復薬】を6個手に入れる。',
134
+ '近所の人がきみの噂話をしている。ゲーム中に自分が対象に入った「恋人」「親友」「忠誠」の人間関係を成立させるたび、《民の声》を2点得る。',
135
+ '似たような迷宮に挑んだことがある迷宮屋から話を聞いた。迷宮フェイズでの情報収集の難易度が2下がる。',
136
+ '武具の安売りを見つける。ランダムな武具アイテム1つを半分の値段で購入することができる。',
137
+ '他の迷宮屋と喧嘩になる。パーティの中からランダムに1人を選び、お互いの《敵意》を1点上昇させる。',
138
+ '迷宮屋志望の見習が、1d6人ほど配下として加わる。',
139
+ ]
140
+ ),
141
+ "DBT" => DiceTable::Table.new(
142
+ "休憩表",
143
+ "2D6",
144
+ [
145
+ 'アイテムの改善案を出し合ってみる。各キャラクターは、好きなキャラクター1体を選び、1d6を振ってそのキャラクターのアイテムスロットから1つをランダムに選ぶ。出た目のアイテムにレベルがあれば、1上昇する。',
146
+ '何気ない雑談が腹の探り合いに発展する。各キャラクターは、好きなキャラクターに対する《好意》と《敵意》を入れ替え、その属性を自由に変更することができる。',
147
+ '好きな単語表からランダムに単語を1つ選ぶ。その部屋にはそれに関係したものがたくさん置いてあるため、出た単語が「好きなもの」に入っているキャラクターは、《気力》を2点得る。',
148
+ '嫌いな人の話題で盛り上がる。各キャラクターは同じキャラクターに《敵意》を持っている人を1人選び、その人への《好意》を1点上昇させる。',
149
+ '窓の外から報道のヘリコプターがこちらを撮影しているのが見える。格好よく見せるために、各キャラクターは〔魅力〕で難易度13の判定を行う。誰かが成功するたびに《民の声》が1点増加する。',
150
+ '雑談や休息など、思い思いに時間を過ごす。各キャラクターは、好きなキャラクター1体への《好意》を1点上昇させる。',
151
+ '通路の片隅で素材が山を作っているのを見つけた。各キャラクターは〔探索〕で難易度11の判定を行う。誰かが成功するたびに、好きな素材を1種類選び、それを1d6個手に入れる。',
152
+ 'チームワークの確認。各プレイヤーは打ち合わせをせずに、一斉にじゃんけんを行う。いちばん出した人が多かった手を出したプレイヤーのPCは、《気力》を2点得る。',
153
+ '仮眠をとって休憩。各キャラクターは〔才覚〕で難易度9の判定を行う。成功すれば《HP》が最大値まで回復する。',
154
+ '各キャラクターは、迷宮化現象に巻き込まれ、身動きがとれない普通の人を1人見つけた。《配下》に加えることができる。',
155
+ '各キャラクターは1d6を振る。出た目の上位2名が唐突に恋に落ちる。同じ目が出て2名をうまく割り出せない場合は、GMの左隣に近い方を優先する。恋に落ちた2人、相手以外に対する《好意》を合計し、その値に対する《好意》に加える。その後、相手以外に対する《好意》をすべて0にする。',
156
+ ]
157
+ ),
158
+ "DNT" => DiceTable::Table.new(
159
+ "交渉表",
160
+ "2D6",
161
+ [
162
+ '中立的な態度は偽装だった。彼らは不意打ちを行う。奇襲扱いで戦闘を開始すること。',
163
+ '交渉は決裂! 戦闘を行うこと。',
164
+ '交渉は決裂! 戦闘を行うこと。',
165
+ '「贄をささげれば話を聞こう」モンスターの中で最もレベルが高いもののレベルと等しい数だけ何らかの素材を減少すれば、友好的になる。減少させない場合、戦闘を開始すること。',
166
+ '「……お前の趣味、なに?」好きな単語表一個を選び、D66を振る。パーティの中に、その項目を好きなものにしているキャラクターがいれば、友好的になる。そうでなければ戦闘を開始すること。',
167
+ '怪物たちは物欲しそうにこちらを見ている。「肉」の素材をモンスターの数だけ消費するか、【お弁当】【フルコース】1個を消費すれば友好的になる。消費しなければ、戦闘を開始すること。',
168
+ '怪物たちは値踏みするようにこちらを見ている。現金で1d6MC支払えば友好的になる。そうでない場合、戦闘を開始すること。',
169
+ '「何かいいもんよこせ」モンスターの中で最もレベルの高いもののレベル以上の価格のアイテムを消費すれば友好的になる。そうでない場合、戦闘を開始すること。',
170
+ '「面白い話を聞かせろよ」プレイヤーたちは面白い話をすること。GMは面白いと思えばモンスターは友好的になる。面白くなかった場合は戦闘を開始する。',
171
+ '「俺に勝てたら話を聞いてやろう」怪物が力比べを挑んできた。モンスターの中で最もレベルが高いものと、パーティの代表がそれぞれ〔武勇〕で判定を行う。パーティの代表の達成値がモンスター以上であれば友好的になる。負けた場合、もう一度交渉するか戦闘するかを決定すること。',
172
+ '運命の出会い。一目見た瞬間に打ち解けあい、友好的になる。',
173
+ ]
174
+ ),
175
+ "DHT" => DiceTable::Table.new(
176
+ "ハプニング表",
177
+ "2D6",
178
+ [
179
+ '急に絶望に襲われる。【お酒】を消費することが出来なければ、このゲーム中、最も高い能力値が1点減少する。',
180
+ '思考に靄がかかってしまう。「散漫」のバッドステータスを受ける。',
181
+ '気がついたら太っていた。「肥満」のバッドステータスを受ける。',
182
+ '無残な失敗に愛想を尽かした配下が2d6人ほど去って行ってしまう。',
183
+ '微妙な空気を読み切れず、パーティ全員の《気力》が1点減少する。',
184
+ '事故だか故意だかで、仲間を殴ってしまう。ランダムに選んだパーティメンバー1名の《HP》を自分の〔武勇〕と同じ値だけ減少させる。',
185
+ '期待が大きければ失望も大きい。あなたに対して《好意》を持っているキャラクター全員は、あなたに対する《好意》を1点減らす。',
186
+ 'アイテムを粗末に扱ってしまう。持ち物の中からランダムにアイテムを1つ決定する。そのアイテムにレベルがある場合、レベルが1下がる。',
187
+ '失敗のショックのせいで知的な行動をとれなくなる。「愚か」のバッドステータスを受ける。',
188
+ '過去の行状のせいで人に呪われる。「呪い」のバッドステータスを受ける。',
189
+ '自分の失敗が許せない。このゲームの間、《器》が1点減少したものとして扱う。',
190
+ ]
191
+ ),
192
+ "KST" => DiceTable::Table.new(
193
+ "カーネル停止表",
194
+ "2D6",
195
+ [
196
+ 'カーネルが肉体に致命的な迷宮化を引き起こす!致命傷表を振ること。カーネルはまだ停止しない。',
197
+ '〔才覚〕で難易度9の判定を行う。失敗すると記憶が迷宮化を起こし、銀行口座の暗証番号を忘れてしまう。口座に入っているMCはすべて失われる。カーネルは停止しない。',
198
+ '迷宮化エネルギーが装備を直撃。素早く避けるため〔武勇〕で難易度9の判定を行う。失敗した場合、持っているアイテムからランダムに1つを選ぶ。そのアイテムは激しい迷宮化を起こし破壊される。カーネルは停止しない。',
199
+ '正体不明のエネルギーが部屋中を駆け巡る。パーティ全員は1d6ダメージを受ける。カーネルは停止しない。',
200
+ '心象が迷宮化していく。〔魅力〕で難易度9の判定を行う。失敗すると人間関係が迷宮化を起こし、持っている感情値がすべて1点減少する。カーネルは停止しない。',
201
+ '激しい迷宮化に曝され、1d6点のダメージを受ける。〔探索〕で難易度11の判定を行う。成功すれば、怪我を負いながらもカーネルを停止させることに成功する。',
202
+ 'パーティ全員は軽い迷宮化に曝され1ダメージを受ける。パーティを統率する為に〔魅力〕で難易度11の判定を行うこと。成功すれば、カーネルは停止する。',
203
+ '素早い一撃でカーネルの息の根を止めるために〔武勇〕で難易度9の判定を行う。成功すれば見事にカーネルを停止させることに成功する。',
204
+ 'カーネルの構造を感じ取り、一瞬にして停止させることに成功。さらに迷宮化の副産物としてランダムなレアアイテム1つを入手する。',
205
+ 'カーネルは停止した。そして持っているアイテムの中からランダムに1つを選ぶ。そのアイテムにレベルがあれば、いつのまにかレベルが1上昇している。',
206
+ '鮮やかにカーネルを停止させ、傷一つないまま保存することに成功した。このカーネルの売却価格が3d6MC上昇する。',
207
+ ]
208
+ ),
209
+ "CAT" => DiceTable::Table.new(
210
+ "痛打表",
211
+ "2D6",
212
+ [
213
+ '武器の伝説がまた一つ増えた。攻撃に使用した武具アイテムにレベルがあれば、そのレベルが1点上昇する。',
214
+ '偶然ながら敵の弱点をつく。敵の《HP》を現在の半分の値にする。',
215
+ '攻撃が終わった後、攻撃の勢いを利用して、自分を好きなエリアに移動させることができる。',
216
+ '素晴らしい手ごたえに自分でも感動し、自分の《HP》が全快する。',
217
+ '叙事詩的な一撃。《民の声》を1点増やす。',
218
+ 'クリーンヒット。攻撃の威力が2d6点上昇する。',
219
+ '敵の動きを封じた。攻撃目標の《回避値》を戦闘終了まで2下げる。この効果は累積する。',
220
+ '敵の勢いを利用し大ダメージ。攻撃の威力が、攻撃目標のレベルと同じだけ上昇する。',
221
+ '敵の技を封じる。攻撃目標のスキル1種類を選び、戦闘中はそのスキルを使用できなくする。',
222
+ '敵の急所をとらえ致命傷を与える。攻撃目標の《HP》を0にする。',
223
+ '戦いの中、武具もまた成長する。持っているアイテムをランダムに1選ぶ。そのアイテムにレベルがあれば、1点上昇する。',
224
+ ]
225
+ ),
226
+ "FWT" => DiceTable::Table.new(
227
+ "致命傷表",
228
+ "2D6",
229
+ [
230
+ '重要器官を粉砕される。キャラクターは即座に死亡する。',
231
+ '傍目にも分かる致命傷。キャラクターは次の自分の行動処理が終わった時点で死亡する。《HP》の回復でこの死亡を防ぐことはできない。',
232
+ '全身に強い衝撃をうける。〔武勇〕で難易度[5+受けたダメージ]の判定に成功すると、行動不能になる。判定に失敗すると死亡する。',
233
+ '出血多量で意識不明。行動不能になる。この戦闘が終了するまでに《HP》を1以上にしないと、キャラクターは死亡する。',
234
+ '重傷を負い昏睡状態。行動不能になる。このクォーターが終了するまでに《HP》を1以上にしないと、キャラクターは死亡する。',
235
+ '攻撃で負った傷により意識を失う。行動不能になる。',
236
+ '緊急回避! 〔探索〕で難易度[7-現在の《HP》]の判定を行う。成功すると、ランダムなバッドステータス1つを受けたうえで攻撃が無効になる。失敗すると、ランダムなバッドステータス1つを受けたうえで行動不能になる。',
237
+ '最後の一撃を見切ることができるかもしれない。〔才覚〕で難易度[9-現在の《HP》]の判定を行う。成功すると《HP》が1になる。失敗すると行動不能になる。',
238
+ 'まだここで死ぬ運命ではないのかもしれない。〔魅力〕で難易度[9-現在の《HP》]の判定を行う。成功すると《HP》が1になる。失敗すると行動不能になる。',
239
+ 'カウンター! 攻撃をしてきた敵に対して、割り込んで好きな武器またはスキルを使った反撃をすることができる。これらの判定が成功した場合、ダメージやスキルの効果のあとで《HP》が1になる。失敗した場合、ただ行動不能になる。',
240
+ '致命傷を受けたような気がしたが、気のせいだった。',
241
+ ]
242
+ ),
243
+ "CFT" => DiceTable::Table.new(
244
+ "戦闘ファンブル表",
245
+ "2D6",
246
+ [
247
+ 'ぶざまな失敗に熱くなる。攻撃の目標のキャラクターに対して《敵意》を4点得る。',
248
+ '急にお腹が痛くなる! 何か回復アイテムを使うまで攻撃を行えなくなる。モンスターの場合、そのラウンドの終わりに未行動にならなくなる。',
249
+ 'アイテムが壊れた! 自分が持っているアイテムの中からランダムに1つを選び、そのアイテムが失われる。モンスターの場合、1d6ダメージを受ける。',
250
+ '敵がいい気になる。行動不能になっていない敵軍キャラクター全ての《HP》を6点回復する。',
251
+ '自分に攻撃が命中! 使用した武器のダメージを自分に与える。',
252
+ 'なんというか、やる気をなくす。《気力》を1点失う。モンスターの場合、1d6ダメージを受ける。',
253
+ '仲間に攻撃が命中! 使用した武器の射程内の味方から、ランダムに1人を選ぶ。そのキャラクターに武器のダメージを与える。',
254
+ '仲間の邪魔をしてしまう。未行動の自軍キャラクター1体を選び、行動済みにする。',
255
+ 'スキルを忘れてしまった! 習得しているスキルからランダムに1種類を選ぶ。そのスキルは戦闘が終了するまで使用できない。',
256
+ '位置取りに失敗してとんでもない場所に。敵陣営プレイヤーまたはGMが、ファンブルしたキャラクターを好きな位置に移す。',
257
+ 'ピンチがチャンスに! 《HP》が現在値の半分になり、《気力》が最大値まで貯まる。',
258
+ ]
259
+ ),
260
+ "APT" => DiceTable::Table.new(
261
+ "登場表",
262
+ "2D6",
263
+ [
264
+ '「ここから先に行かせるわけにはいかん」急ぐ途中に敵が立ちふさがる。〔武勇〕で難易度11の判定を行う。成功すればバトルフィールドの好きなエリアにそのキャラクターを配置することができる。失敗した場合、《HP》を1にした状態でバトルフィールドの好きなエリアにそのキャラクターを配置することができる。',
265
+ '「待たせたな!」バトルフィールドの好きなエリアにそのキャラクターを配置することができる。',
266
+ 'おっと鉢合わせ! バトルフィールドの敵軍の本陣に、そのキャラクターを配置すること。',
267
+ '全力で駆けつける! 《HP》を2d6点減少すれば、バトルフィールドの好きなエリアにそのキャラクターを配置することができる。',
268
+ 'あいつらはこの先に行ったはず! GMはそのキャラクターをバトルフィールドの好きなエリアに配置する。',
269
+ 'あの聞き覚えのある音は……! そのキャラクターが【乗騎】を装備していれば、GMはそのキャラクターをバトルフィールドの好きなエリアに配置する。',
270
+ '……間に合ったみたいだな。バトルフィールドの中に、そのキャラクターに対する《好意》が1点以上あるキャラクターがいれば、同じエリアにそのキャラクターを配置することができる。',
271
+ 'を! これはこれは。好きな素材を1個拾う。',
272
+ 'いかん! 迷ってしまった。〔探索〕で難易度11の判定を行うこと。成功すればもう一度登場表を振り、結果を適用することができる。',
273
+ 'むむむむ? ここは一度来た道のような……? 疲労して《気力》が1点減少。',
274
+ '……いや、しかしそれどころではない! そのキャラクターは、この戦闘に登場することはできない。',
275
+ ]
276
+ ),
277
+ "DCT" => DiceTable::Table.new(
278
+ "因縁表",
279
+ "2D6",
280
+ [
281
+ '対象はあなたの父、もしくは母である。幼い頃に家庭を捨てて失踪した対象を、あなたはずっと憎んでいた。対象への《敵意》が1点上昇する。また、対象を戦闘で倒した際に、経験点10点を得ることができる。',
282
+ '対象は、あなたの小学校時代の恩師である。懐かしい顔にこんな形で会うことになろうとは。対象への《好意》もしくは《敵意》が1点上昇する。',
283
+ '対象は、過去にあなたと戦い、あなたの体に古傷を残している。今でもときどき傷は代償を求めて疼く。対象への《敵意》が1点上昇する。',
284
+ 'あなたは対象に憧れているが、全く相手にされていない。たとえ敵としてでも対象に認めてもらうことがあなたの願いだ。彼または彼女への《敵意》が1点上昇し、「ライバル」の人間関係を結ぶことが出来れば経験点を10得られるようになる。',
285
+ 'あなたは過去、対象のせいで、思い出したくもない大失敗をしたことがある。嫌いなものに絡んだ大失敗を設定すること。対象への《敵意》が1点上昇する。',
286
+ 'あなたは対象に手酷く敗北したことがある。あなたは屈辱を晴らすためにできる限りのことをする気でいる。対象への《敵意》が1点上昇する。',
287
+ '対象はあなたの親族を殺した。あなたはいつか訪れる復讐の日を信じて、鍛錬を続けてきた。対象への《敵意》が1点上昇する。',
288
+ '対象は、過去のあなたの仲間だ。意見の違いで袂を分かったが、ここまで対立することになるとは考えてもいなかった。対象への《敵意》が1点上昇する。',
289
+ '対象とあなたは、前世があなたの妻/夫であった。幸せな生涯の記憶が蘇る。対象への《好意》が1点上昇する。',
290
+ 'あなたは対象とあなたの通勤・通学路でぶつかったことがあり、そこで一目惚れしている。恋を幸せに成就させるため、もしくは不幸な恋を対象の死によって終わらせるため、あなたは迷宮にめぐる。対象への愛情の《好意》4点と、「片思い」の人間関係を得る。',
291
+ 'あなたは過去に対象の恋人であった。対象のどこが好きだったのかは、自分の好きなものからランダムに単語を決め、それに関連した話をでっち上げること。対象への愛情の《好意》4点と、「恋人」の人間関係を得る。',
292
+ ]
293
+ ),
294
+ "MCT" => DiceTable::Table.new(
295
+ "怪物因縁表",
296
+ "2D6",
297
+ [
298
+ '対象はあなたの故郷を滅ぼした。そこは、もうペンペン草すら生えない廃墟となっている。対象への《敵意》が4点上昇する。',
299
+ '対象はあなたのDNA情報をもとに某国が作り出したものである。GMは対象にあなたのスキルから1つを任意に選んで修得させる。対象への《敵意》が1点上昇する。',
300
+ 'あなたはかつて対象の同族を絶滅させた。しかし、奴らは死んではいなかったのだ。対象への《敵意》が1点上昇する。',
301
+ 'あなたは幼いころに対象と遭遇したが、一顧だにされず見逃された。対象への《敵意》が1点上昇する。',
302
+ '何年も前に死んだ、あなたの親しい人は、ちょうど対象の攻撃手段と同じ方法で殺されている。対象への《敵意》が1点上昇する。',
303
+ '対象はなんとなくあなたが嫌いな特徴をそなえている。嫌いなものに関連した特徴を設定すること。対象への《敵意》が1点上昇する。',
304
+ 'あなたは過去に対象と戦い、完敗を喫している。対象への《敵意》が1点上昇する。対象との戦闘に勝利した場合、経験点10点を得る。',
305
+ '対象はあなたの好きなものを穢したり貶めたことがある。好きなものにちなんだ出来事を設定すること。対象への《敵意》が1点上昇する。',
306
+ 'あなたは、対象が同族のなかでも強力な個体であることを知っている。対象への《敵意》が2点上昇する。対象の《HP》と威力を6点ずつ上昇させる。',
307
+ '対象はあなたが昔飼っていた生き物や持っていたものが変化したものである。対象への《好意》と《敵意》が1点ずつ上昇する。交渉によって対象との戦闘を終わらせた場合、経験点10点を得る。',
308
+ 'かつてあなたは対象と同族であった。対象への《好意》と《敵意》が1点ずつ上昇する。',
309
+ ]
310
+ ),
311
+ "PCT" => DiceTable::Table.new(
312
+ "PC因縁表",
313
+ "2D6",
314
+ [
315
+ '対象はあなたが追い求めていた敵だった。なぜ敵なのか設定すること。対象への《敵意》が4点上昇する。対象を殺害すると経験点100点を得る。',
316
+ '対象は、あなたがあなたのクラスになるきっかけを作った人物である。1分以内に詳細を設定できれば対象への好きな感情値を2点上昇させてよい。',
317
+ '対象と共通の知人がいることが発覚する。好きなものにちなんだ知人を設定すること。対象への《好意》が1点上昇する。',
318
+ '対象と同じ場所に住んでいたり、通っていたことが分かる。対象への《好意》が1点上昇する。',
319
+ 'あなたは何らかの種類の迷宮屋ランキングで対象に負けている。対象への《敵意》が1点上昇する。終了フェイズで対象に(何でもいいので)負けを認めさせれば、経験点を1点獲得する。',
320
+ '対象は、なんとなくあなたの好きな特徴を備えているような気がする。好きなものにちなんだ特徴を1つ設定し、対象のプレイヤーの了解をとること。チャンスは1回だ。OKなら対象への《好意》が1点上昇する。',
321
+ '対象は何らかの媒体で、あなたに対して好意的でないコメントを出したことがあるような気がする。コメントの詳細はあなたが決定すること。対象への《敵意》が1点上昇する。',
322
+ 'あなたは対象に関する良い噂を聞いたことがある。噂の内容を決定したうえで、対象への《好意》が1点上昇する。',
323
+ '対象は実は幼馴染だったことが明らかになる。容姿の変化などで気付かなかったのだ。対象への《好意》が1点上昇する。',
324
+ '対象が実は兄弟であったことが明らかになる。家庭の事情を1分で考えだせれば、対象への《好意》が1点上昇する。',
325
+ 'あなたと対象は、今まで隠していたが実はつきあっている。対象のプレイヤーの了解を15秒以内にとることができれば、お互いへの愛情の《好意》を4点上昇させることができる。',
326
+ ]
327
+ ),
328
+ "LCT" => DiceTable::Table.new(
329
+ "ラブ因縁表",
330
+ "2D6",
331
+ [
332
+ 'あなたは対象と過去にいい友人だった。対象への《好意》が2点上昇するが、その属性は友情に変化する。',
333
+ 'あなたは対象を本来とは別の性別だと思い込んで片思いしていた。対象への《敵意》が2点、または《好意》が1点上昇する。',
334
+ 'あなたはかつて親友であった対象に恋人を奪われたことがある。対象への《敵意》が1点上昇する。',
335
+ '対象は、あなたの好きなものによく似ている。好きなものから1つを選んで、どう似ているか説明できたら、対象への《好意》が1点上昇する。',
336
+ '対象をよく見たらけっこう可愛いような気がしてきた。対象への《好意》が1点上昇し、対象への《好意》をすべて愛情に変換する。',
337
+ 'あなたは対象と過去につきあっていたことがある。現在はどうだか分からないが、あのころは本気だった。対象への《好意》が1点上昇する。',
338
+ '対象は、むかしあなたが好きだった人と印象がよく似ている。対象への《好意》が1点上昇する。',
339
+ 'あなたは対象に助けられたり、命を救われたことがある。1分以内に設定を作り上げられれば、対象への《好意》が1点上昇する。',
340
+ 'あなたは対象に振られ、失意のあまり自殺しようとしたことがある。対象への《好意》と《敵意》が1点上昇する。',
341
+ 'あなたは昔から、対象を独占したいと思っていた。対象があなた以外と関わるたびに怒りを募らせていたのだ。対象への《好意》と《敵意》が2点ずつ上昇する。',
342
+ 'なんだか良く分からないが、とにかく好きでたまらない。対象への《好意》が3点上昇し、対象への《好意》をすべて愛情に変換する。'
343
+ ]
344
+ ),
345
+ "MPT" => DiceTable::Table.new(
346
+ "相場表",
347
+ "2D6",
348
+ [
349
+ 'なし',
350
+ '肉',
351
+ '牙',
352
+ '鉄',
353
+ '魔素',
354
+ '機械',
355
+ '衣料',
356
+ '木',
357
+ '火薬',
358
+ '情報',
359
+ '革',
360
+ ]
361
+ ),
362
+ "T1T" => DiceTable::Table.new(
363
+ "お宝1表",
364
+ "1D6",
365
+ [
366
+ '何もなし。',
367
+ '何もなし。',
368
+ 'そのモンスターの素材欄の中から、好きな素材を1個。',
369
+ 'そのモンスターの素材欄の中から、好きな素材を2個。',
370
+ 'そのモンスターの素材欄の中から、好きな素材を3個。',
371
+ '【お弁当】1個。',
372
+ ]
373
+ ),
374
+ "T2T" => DiceTable::Table.new(
375
+ "お宝2表",
376
+ "1D6",
377
+ [
378
+ 'そのモンスターの素材欄の中から、好きな素材を3個。',
379
+ 'そのモンスターの素材欄の中から、好きな素材を4個。',
380
+ 'そのモンスターの素材欄の中から、好きな素材を5個。',
381
+ 'ランダムな回復アイテム1個。',
382
+ 'ランダムな武具アイテム1個。そのアイテムにレベルがあれば、レベル1のアイテムとなる。',
383
+ 'ランダムなレアアイテム1個。',
384
+ ]
385
+ ),
386
+ "T3T" => DiceTable::Table.new(
387
+ "お宝3表",
388
+ "1D6",
389
+ [
390
+ 'そのモンスターの素材欄の中から、好きな素材を5個。',
391
+ 'そのモンスターの素材欄の中から、好きな素材を7個。',
392
+ 'そのモンスターの素材欄の中から、好きな素材を10個。',
393
+ '好きなコモンアイテムのカテゴリ1種を選ぶ。そのカテゴリの中からランダムなアイテム1個。そのアイテムにレベルがあれば、レベル1のアイテムとなる。',
394
+ 'ランダムなレアアイテム1個',
395
+ 'ランダムなレアアイテム1個。そのアイテムにレベルがあれば、レベル1のアイテムとなる。',
396
+ ]
397
+ ),
398
+ "T4T" => DiceTable::Table.new(
399
+ "お宝4表",
400
+ "1D6",
401
+ [
402
+ 'そのモンスターの素材欄の中から、好きな素材を5個。',
403
+ 'そのモンスターの素材欄の中から、好きな素材を10個。',
404
+ '好きなコモンアイテムのカテゴリ1種を選ぶ。そのカテゴリの中からランダムなアイテム1個。そのアイテムにレベルがあれば、レベル2のアイテムとなる。',
405
+ '好きなコモンアイテムのカテゴリ1種を選ぶ。そのカテゴリの中からランダムなアイテム1個。そのアイテムにレベルがあれば、レベル3のアイテムとなる。',
406
+ 'ランダムなレアアイテム1個。そのアイテムにレベルがあれば、レベル1のアイテムとなる。',
407
+ 'ランダムなレアアイテム1個。そのアイテムにレベルがあれば、レベル2のアイテムとなる。',
408
+ ]
409
+ ),
410
+ }.freeze
411
+
412
+ register_prefix(['\d+MD6?.*', '\d+R6.*'] + TABLES.keys)
413
+ end
414
+ end
415
+ end
@@ -0,0 +1,466 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class MeikyuKingdom < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'MeikyuKingdom'
8
+
9
+ # ゲームシステム名
10
+ NAME = '迷宮キングダム'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'めいきゆうきんくたむ'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
17
+ ・判定 (nMK+m)
18
+  n個のD6を振って大きい物二つだけみて達成値を算出します。修正mも可能です。
19
+  絶対成功と絶対失敗も自動判定します。
20
+ ・各種表
21
+  ・散策表(〜RT):生活散策表 LRT/治安散策表 ORT/文化散策表 CRT/軍事散策表 ART/お祭り表 FRT
22
+  ・休憩表(〜BT):才覚休憩表 TBT/魅力休憩表 CBT/探索休憩表 SBT/武勇休憩表 VBT/お祭り休憩表 FBT/捜索後休憩表 ABT/全体休憩表 WBT/カップル休憩表 LBT
23
+  ・ハプニング表(〜HT):才覚ハプニング表 THT/魅力ハプニング表 CHT/探索ハプニング表 SHT
24
+   /武勇ハプニング表 VHT
25
+  ・王国災厄表 KDT/王国変動表 KCT/王国変動失敗表 KMT
26
+  ・王国名決定表1/2/3/4/5 KNT1/KNT2/KNT3/KNT4
27
+  ・痛打表 CAT/致命傷表 FWT/戦闘ファンブル表 CFT
28
+  ・道中表 TT/交渉表 NT/感情表 ET/相場表 MPT
29
+  ・お宝表1/2/3/4/5 T1T/T2T/T3T/T4T/T5T
30
+  ・名前表 NAMEx (xは個数)
31
+  ・名前表A NAMEA/名前表B NAMEB/エキゾチック名前表 NAMEEX/ファンタジック名前表 NAMEFA
32
+  ・アイテム関連(猟奇戦役不使用の場合をカッコ書きで出力)
33
+   ・デバイスファクトリー  DFT
34
+   ・アイテムカテゴリ決定表 IDT
35
+   ・アイテム表(〜IT):武具 WIT/生活 LIT/回復 RIT/探索 SIT/レア武具 RWIT/レア一般 RUIT
36
+   ・アイテム特性決定表   IFT
37
+  ・ランダムエンカウント表 nRET (nはレベル,1〜6)
38
+  ・地名決定表    PNTx (xは個数)
39
+  ・迷宮風景表    MLTx (xは個数)
40
+  ・単語表1/2/3/4 WORD1/WORD2/WORD3/WORD4
41
+ ・D66ダイスあり
42
+ INFO_MESSAGE_TEXT
43
+
44
+ register_prefix([
45
+ '\d+MK.*', '\d+R6.*',
46
+ 'LRT', 'ORT', 'CRT', 'ART', 'FRT',
47
+ 'TBT', 'CBT', 'SBT', 'VBT', 'FBT', 'ABT', 'WBT', 'LBT',
48
+ 'THT', 'CHT', 'SHT', 'VHT',
49
+ 'KDT', 'KCT', 'KMT',
50
+ 'CAT', 'FWT', 'CFT',
51
+ 'TT', 'NT', 'ET', 'MPT',
52
+ 'T1T', 'T2T', 'T3T', 'T4T', 'T5T',
53
+ 'NAME.*',
54
+ 'DFT', 'IDT\d*',
55
+ 'WIT', 'LIT', 'RIT', 'SIT', 'RWIT', 'RUIT',
56
+ 'IFT',
57
+ '\d+RET',
58
+ 'PNT\d*', 'MLT\d*',
59
+ 'KNT\d+', 'WORD\d+'
60
+ ])
61
+
62
+ def initialize(command)
63
+ super(command)
64
+
65
+ @sort_add_dice = true
66
+ @enabled_d66 = true
67
+ @d66_sort_type = D66SortType::ASC
68
+ end
69
+
70
+ def replace_text(string)
71
+ debug("change_text before string", string)
72
+
73
+ string = string.gsub(/(\d+)MK6/i) { "#{Regexp.last_match(1)}R6" }
74
+ string = string.gsub(/(\d+)MK/i) { "#{Regexp.last_match(1)}R6" }
75
+
76
+ debug("change_text after string", string)
77
+
78
+ return string
79
+ end
80
+
81
+ def check_nD6(total, dice_total, dice_list, cmp_op, target)
82
+ return '' if target == '?'
83
+
84
+ result = get2D6Result(total, dice_total, cmp_op, target)
85
+ result += getKiryokuResult(total, dice_list, target)
86
+
87
+ return result
88
+ end
89
+
90
+ alias check_2D6 check_nD6
91
+
92
+ def get2D6Result(total_n, dice_n, signOfInequality, diff)
93
+ return '' unless signOfInequality == :>=
94
+
95
+ if dice_n <= 2
96
+ " > 絶対失敗"
97
+ elsif dice_n >= 12
98
+ " > 絶対成功"
99
+ else
100
+ get2D6ResultOnlySuccess(total_n, diff)
101
+ end
102
+ end
103
+
104
+ def get2D6ResultOnlySuccess(total_n, diff)
105
+ if total_n >= diff
106
+ " > 成功"
107
+ else
108
+ " > 失敗"
109
+ end
110
+ end
111
+
112
+ def getKiryokuResult(total_n, dice_list, diff)
113
+ num_6 = dice_list.count(6)
114
+
115
+ if num_6 == 0
116
+ return ""
117
+ elsif num_6 >= 2
118
+ return " & 《気力》#{num_6}点獲得"
119
+ end
120
+
121
+ none6_list = dice_list.reject { |i| i == 6 }.sort
122
+
123
+ maxDice1 = none6_list.pop.to_i
124
+ maxDice2 = none6_list.pop.to_i
125
+ debug("maxDice1", maxDice1)
126
+ debug("maxDice2", maxDice2)
127
+
128
+ debug("total_n", total_n)
129
+ none6Total_n = total_n - 6 + maxDice2
130
+ debug("none6Total_n", none6Total_n)
131
+
132
+ none6Dice_n = maxDice1 + maxDice2
133
+ debug("none6Dice_n", none6Dice_n)
134
+ debug("diff", diff)
135
+ none6DiceReuslt = get2D6ResultOnlySuccess(none6Total_n, diff)
136
+
137
+ return " (もしくは) #{none6Total_n}#{none6DiceReuslt} & 《気力》1点獲得"
138
+ end
139
+
140
+ def mayokin_check(string)
141
+ debug("mayokin_check string", string)
142
+
143
+ string = replace_text(string)
144
+
145
+ m = /^S?((\d+)R6([\+\-\d]*)(([>=]+)(\d+))?)/i.match(string)
146
+ unless m
147
+ return nil
148
+ end
149
+
150
+ string = m[1]
151
+ diceCount = m[2].to_i
152
+ modifyText = m[3]
153
+ signOfInequality = m[5] || ""
154
+ diff = m[6].to_i
155
+
156
+ bonus = modifyText ? ArithmeticEvaluator.eval(modifyText) : 0
157
+
158
+ dice_list = @randomizer.roll_barabara(diceCount, 6).sort
159
+ dice_str = dice_list.join(",")
160
+
161
+ dice1 = diceCount >= 2 ? dice_list[diceCount - 2] : 0
162
+ dice2 = diceCount >= 1 ? dice_list[diceCount - 1] : 0
163
+ dice_now = dice1 + dice2
164
+ debug("dice1, dice2, dice_now", dice1, dice2, dice_now)
165
+
166
+ total_n = dice_now + bonus
167
+ dice_str = "[#{dice_str}]"
168
+
169
+ output = "#{dice_now}#{dice_str}"
170
+ if bonus > 0
171
+ output += "+#{bonus}"
172
+ elsif bonus < 0
173
+ output += bonus.to_s
174
+ end
175
+
176
+ if output =~ /[^\d\[\]]+/
177
+ output = "(#{string}) > #{output} > #{total_n}"
178
+ else
179
+ output = "(#{string}) > #{total_n}"
180
+ end
181
+
182
+ if signOfInequality != "" # 成功度判定処理
183
+ cmp_op = Normalize.comparison_operator(signOfInequality)
184
+ output += check_result(total_n, dice_now, dice_list, 6, cmp_op, diff)
185
+ end
186
+
187
+ return output
188
+ end
189
+
190
+ def eval_game_system_specific_command(command)
191
+ output = ""
192
+ type = ""
193
+ total_n = ""
194
+
195
+ if (result = mayokin_check(command))
196
+ return result
197
+ end
198
+
199
+ case command
200
+
201
+ when /^NAMEA/i
202
+ debug("namea passed")
203
+ type = '名前A'
204
+ total_n = @randomizer.roll_d66(D66SortType::ASC)
205
+ output = mk_name_a_table(total_n)
206
+ when /^NAMEB/i
207
+ type = '名前B'
208
+ total_n = @randomizer.roll_d66(D66SortType::ASC)
209
+ output = mk_name_b_table(total_n)
210
+ when /^NAMEEX/i
211
+ type = 'エキゾチック名前'
212
+ total_n = @randomizer.roll_d66(D66SortType::ASC)
213
+ output = mk_name_ex_table(total_n)
214
+ when /^NAMEFA/i
215
+ type = 'ファンタジック名前'
216
+ total_n = @randomizer.roll_d66(D66SortType::ASC)
217
+ output = mk_name_fa_table(total_n)
218
+
219
+ when /^NAME(\d*)/i
220
+ type = '名前'
221
+ count = getCount(Regexp.last_match(1))
222
+ names = ""
223
+ count.times do |_i|
224
+ name, dice = mk_name_table
225
+ names += "[#{dice}]#{name} "
226
+ end
227
+ output = names.strip
228
+ total_n = count
229
+
230
+ when /^PNT(\d*)/i
231
+ type = '地名'
232
+ count = getCount(Regexp.last_match(1))
233
+ output = mk_pn_decide_table(count)
234
+ total_n = count
235
+
236
+ when /^MLT(\d*)/i
237
+ type = '地名'
238
+ count = getCount(Regexp.last_match(1))
239
+ output = mk_ls_decide_table(count)
240
+ total_n = count
241
+ when /^DFT/i
242
+ type = 'デバイスファクトリー'
243
+ output = mk_device_factory_table()
244
+ total_n = 1
245
+ when /^LRT/i
246
+ type = '生活散策'
247
+ output, total_n = mk_life_research_table
248
+ when /^ORT/i
249
+ type = '治安散策'
250
+ output, total_n = mk_order_research_table
251
+ when /^CRT/i
252
+ type = '文化散策'
253
+ output, total_n = mk_calture_research_table
254
+ when /^ART/i
255
+ type = '軍事散策'
256
+ output, total_n = mk_army_research_table
257
+ when /^FRT/i
258
+ type = 'お祭り'
259
+ output, total_n = mk_festival_table
260
+
261
+ # 休憩表(2D6)
262
+ when /^TBT/i
263
+ type = '才覚休憩'
264
+ output, total_n = mk_talent_break_table
265
+ when /^CBT/i
266
+ type = '魅力休憩'
267
+ output, total_n = mk_charm_break_table
268
+ when /^SBT/i
269
+ type = '探索休憩'
270
+ output, total_n = mk_search_break_table
271
+ when /^VBT/i
272
+ type = '武勇休憩'
273
+ output, total_n = mk_valor_break_table
274
+ when /^FBT/i
275
+ type = 'お祭り休憩'
276
+ output, total_n = mk_festival_break_table
277
+ # ハプニング表(2D6)
278
+ when /^THT/i
279
+ type = '才覚ハプニング'
280
+ output, total_n = mk_talent_happening_table
281
+ when /^CHT/i
282
+ type = '魅力ハプニング'
283
+ output, total_n = mk_charm_happening_table
284
+ when /^SHT/i
285
+ type = '探索ハプニング'
286
+ output, total_n = mk_search_happening_table
287
+ when /^VHT/i
288
+ type = '武勇ハプニング'
289
+ output, total_n = mk_valor_happening_table
290
+ # お宝表
291
+ when /^MPT/i
292
+ type = '相場'
293
+ output, total_n = mk_market_price_table
294
+ when /^T1T/i
295
+ type = 'お宝1'
296
+ output, total_n = mk_treasure1_table
297
+ when /^T2T/i
298
+ type = 'お宝2'
299
+ output, total_n = mk_treasure2_table
300
+ when /^T3T/i
301
+ type = 'お宝3'
302
+ output, total_n = mk_treasure3_table
303
+ when /^T4T/i
304
+ type = 'お宝4'
305
+ output, total_n = mk_treasure4_table
306
+ when /^T5T/i
307
+ type = 'お宝5'
308
+ output, total_n = mk_treasure5_table
309
+
310
+ # アイテム表
311
+ when /^RWIT/i
312
+ type = 'レア武具アイテム'
313
+ total_n = @randomizer.roll_d66(D66SortType::NO_SORT)
314
+ output = mk_rare_weapon_item_table(total_n)
315
+ when /^RUIT/i
316
+ type = 'レア一般アイテム'
317
+ total_n = @randomizer.roll_d66(D66SortType::NO_SORT)
318
+ output = mk_rare_item_table(total_n)
319
+ when /^WIT/i
320
+ type = '武具アイテム'
321
+ total_n = @randomizer.roll_d66(D66SortType::ASC)
322
+ output = mk_weapon_item_table(total_n)
323
+ when /^LIT/i
324
+ type = '生活アイテム'
325
+ total_n = @randomizer.roll_d66(D66SortType::ASC)
326
+ output = mk_life_item_table(total_n)
327
+ when /^RIT/i
328
+ type = '回復アイテム'
329
+ total_n = @randomizer.roll_d66(D66SortType::ASC)
330
+ output = mk_rest_item_table(total_n)
331
+ when /^SIT/i
332
+ type = '探索アイテム'
333
+ total_n = @randomizer.roll_d66(D66SortType::ASC)
334
+ output = mk_search_item_table(total_n)
335
+ when /^IFT/i
336
+ type = 'アイテム特性'
337
+ total_n = @randomizer.roll_sum(2, 6)
338
+ output = mk_item_features_table(total_n)
339
+ when /^IDT/i
340
+ type = 'アイテムカテゴリ決定'
341
+ total_n = @randomizer.roll_once(6)
342
+ output = mk_item_decide_table(total_n)
343
+
344
+ # ランダムエンカウント表
345
+ when /^1RET/i
346
+ type = '1Lvランダムエンカウント'
347
+ total_n = @randomizer.roll_once(6)
348
+ output = mk_random_encount1_table(total_n)
349
+ when /^2RET/i
350
+ type = '2Lvランダムエンカウント'
351
+ total_n = @randomizer.roll_once(6)
352
+ output = mk_random_encount2_table(total_n)
353
+ when /^3RET/i
354
+ type = '3Lvランダムエンカウント'
355
+ total_n = @randomizer.roll_once(6)
356
+ output = mk_random_encount3_table(total_n)
357
+ when /^4RET/i
358
+ type = '4Lvランダムエンカウント'
359
+ total_n = @randomizer.roll_once(6)
360
+ output = mk_random_encount4_table(total_n)
361
+ when /^5RET/i
362
+ type = '5Lvランダムエンカウント'
363
+ total_n = @randomizer.roll_once(6)
364
+ output = mk_random_encount5_table(total_n)
365
+ when /^6RET/i
366
+ type = '6Lvランダムエンカウント'
367
+ total_n = @randomizer.roll_once(6)
368
+ output = mk_random_encount6_table(total_n)
369
+
370
+ # その他表
371
+ when /^KDT/i
372
+ type = '王国災厄'
373
+ output, total_n = mk_kingdom_disaster_table
374
+ when /^KCT/i
375
+ type = '王国変動'
376
+ output, total_n = mk_kingdom_change_table
377
+ when /^KMT/i
378
+ type = '王国変動失敗'
379
+ output, total_n = mk_kingdom_mischange_table
380
+ when /^CAT/i
381
+ type = '痛打'
382
+ output, total_n = mk_critical_attack_table
383
+ when /^FWT/i
384
+ type = '致命傷'
385
+ output, total_n = mk_fatal_wounds_table
386
+ when /^CFT/i
387
+ type = '戦闘ファンブル'
388
+ output, total_n = mk_combat_fumble_table
389
+ when /^TT/i
390
+ type = '道中'
391
+ output, total_n = mk_travel_table
392
+ when /^NT/i
393
+ type = '交渉'
394
+ output, total_n = mk_negotiation_table
395
+ when /^ET/i
396
+ type = '感情'
397
+ output, total_n = mk_emotion_table
398
+
399
+ when /^KNT(\d+)/i
400
+ type = '王国名'
401
+ count = getCount(Regexp.last_match(1))
402
+ total_n = @randomizer.roll_d66(D66SortType::ASC)
403
+
404
+ case count
405
+ when 1
406
+ output = mk_kingdom_name_1_table(total_n)
407
+ when 2
408
+ output = mk_kingdom_name_2_table(total_n)
409
+ when 3
410
+ output = mk_kingdom_name_3_table(total_n)
411
+ end
412
+
413
+ when /^WORD(\d+)/i
414
+ type = '単語'
415
+ count = getCount(Regexp.last_match(1))
416
+ total_n = @randomizer.roll_d66(D66SortType::ASC)
417
+
418
+ case count
419
+ when 1
420
+ output = mk_word_1_table(total_n)
421
+ when 2
422
+ output = mk_word_2_table(total_n)
423
+ when 3
424
+ output = mk_word_3_table(total_n)
425
+ when 4
426
+ output = mk_word_4_table(total_n)
427
+ end
428
+
429
+ when /^ABT/i
430
+ type = '捜索後休憩'
431
+ output, total_n = getAftersearchBreakTable()
432
+ when /^WBT/i
433
+ type = '全体休憩'
434
+ output, total_n = getWholeBreakTable()
435
+ when /^LBT/i
436
+ type = 'カップル休憩'
437
+ output, total_n = getLoversBreakTable()
438
+ else
439
+ return nil
440
+ end
441
+
442
+ if output != '1'
443
+ return "#{type}表(#{total_n}) > #{output}"
444
+ else
445
+ return nil
446
+ end
447
+ end
448
+
449
+ def getCount(countText)
450
+ if countText.empty?
451
+ return 1
452
+ end
453
+
454
+ return countText.to_i
455
+ end
456
+ end
457
+ end
458
+ end
459
+
460
+ require 'bcdice/game_system/meikyu_kingdom/item_table'
461
+ require 'bcdice/game_system/meikyu_kingdom/kingdom_name_table'
462
+ require 'bcdice/game_system/meikyu_kingdom/landscape_table'
463
+ require 'bcdice/game_system/meikyu_kingdom/name_tables'
464
+ require 'bcdice/game_system/meikyu_kingdom/placename_table'
465
+ require 'bcdice/game_system/meikyu_kingdom/word_table'
466
+ require 'bcdice/game_system/meikyu_kingdom/tables'