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,121 @@
1
+ module BCDice
2
+ module GameSystem
3
+ class MeikyuKingdomBasic
4
+ # 単語表1(D66)
5
+ # override
6
+ def mk_word_1_table(num)
7
+ table = [
8
+ [11, "魔法"],
9
+ [12, "おめかし"],
10
+ [13, "狭いところ"],
11
+ [14, "夜更かし"],
12
+ [15, "節約"],
13
+ [16, "会議"],
14
+ [22, "ヒゲ"],
15
+ [23, "孤独"],
16
+ [24, "説教"],
17
+ [25, "自分探し"],
18
+ [26, "異性"],
19
+ [33, "ヒラヒラした服"],
20
+ [34, "平穏な生活"],
21
+ [35, "自分語り"],
22
+ [36, "風呂"],
23
+ [44, "古いもの"],
24
+ [45, "頭が悪い人"],
25
+ [46, "暗闇"],
26
+ [55, "許嫁"],
27
+ [56, "民"],
28
+ [66, "バカ"],
29
+ ]
30
+ return get_table_by_number(num, table)
31
+ end
32
+
33
+ # 単語表2(D66)
34
+ # override
35
+ def mk_word_2_table(num)
36
+ table = [
37
+ [11, "科学"],
38
+ [12, "読書"],
39
+ [13, "広いところ"],
40
+ [14, "早起き"],
41
+ [15, "ムダ"],
42
+ [16, "仕事"],
43
+ [22, "陰謀"],
44
+ [23, "みんなで集まること"],
45
+ [24, "ナンパ"],
46
+ [25, "昔話"],
47
+ [26, "同性"],
48
+ [33, "武器の手入れ"],
49
+ [34, "戦争"],
50
+ [35, "人の噂"],
51
+ [36, "散髪"],
52
+ [44, "新しいもの"],
53
+ [45, "頭がよい人"],
54
+ [46, "光"],
55
+ [55, "親"],
56
+ [56, "外国人"],
57
+ [66, "ホラ話"],
58
+ ]
59
+ return get_table_by_number(num, table)
60
+ end
61
+
62
+ # 単語表3(D66)
63
+ # override
64
+ def mk_word_3_table(num)
65
+ table = [
66
+ [11, "子供"],
67
+ [12, "弱い人"],
68
+ [13, "処刑"],
69
+ [14, "叙事詩"],
70
+ [15, "煙草"],
71
+ [16, "病院"],
72
+ [22, "演説"],
73
+ [23, "酒盛り"],
74
+ [24, "料理"],
75
+ [25, "武芸"],
76
+ [26, "田舎"],
77
+ [33, "自分の国"],
78
+ [34, "伝統"],
79
+ [35, "お祭り"],
80
+ [36, "告げ口"],
81
+ [44, "自分の声"],
82
+ [45, "マヨネーズ"],
83
+ [46, "おせっかい"],
84
+ [55, "猫"],
85
+ [56, "混沌"],
86
+ [66, "占い"],
87
+ ]
88
+ return get_table_by_number(num, table)
89
+ end
90
+
91
+ # 単語表4(D66)
92
+ # override
93
+ def mk_word_4_table(num)
94
+ table = [
95
+ [11, "年寄り"],
96
+ [12, "強い人"],
97
+ [13, "空想"],
98
+ [14, "冗談"],
99
+ [15, "クスリ"],
100
+ [16, "怪物"],
101
+ [22, "一騎打ち"],
102
+ [23, "賭け事"],
103
+ [24, "歌"],
104
+ [25, "勉強"],
105
+ [26, "都会"],
106
+ [33, "冒険"],
107
+ [34, "ダイナマイト大帝"],
108
+ [35, "盗み"],
109
+ [36, "言い訳"],
110
+ [44, "隣のキャラのジョブ"],
111
+ [45, "小鬼"],
112
+ [46, "謝ること"],
113
+ [55, "隣のキャラのクラス"],
114
+ [56, "星"],
115
+ [66, "肉"],
116
+ ]
117
+ return get_table_by_number(num, table)
118
+ end
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,67 @@
1
+ module BCDice
2
+ module GameSystem
3
+ class OneWayHeroics < Base
4
+ class DungeonTable
5
+ attr_reader :key
6
+
7
+ def initialize(name, key, type, items)
8
+ @name = name
9
+ @key = key
10
+ @items = items.freeze
11
+
12
+ m = /(\d+)D(\d+)/i.match(type)
13
+ unless m
14
+ raise ArgumentError, "Unexpected table type: #{type}"
15
+ end
16
+
17
+ @times = m[1].to_i
18
+ @sides = m[2].to_i
19
+ end
20
+
21
+ def roll_with_day(day, randomizer)
22
+ value = randomizer.roll_sum(@times, @sides)
23
+ value += @times if day >= 4
24
+
25
+ index = value - @times
26
+ return "#{@name}(#{value}) > #{@items[index]}"
27
+ end
28
+ end
29
+
30
+ DUNGEON_TABLE = DungeonTable.new(
31
+ "ダンジョン表",
32
+ "DNGN",
33
+ "1D6",
34
+ [
35
+ "犬小屋(155ページ)",
36
+ "犬小屋(155ページ)",
37
+ "「ダンジョン遭遇表」(153ページ)へ移動。小型ダンジョンだ。",
38
+ "「ダンジョン遭遇表」(153ページ)へ移動。小型ダンジョンだ。",
39
+ "「ダンジョン遭遇表」(153ページ)へ移動。ここは中型ダンジョンなので、モンスターが出現した場合、数が1体増加する。さらにイベントの経験値が1増加する。",
40
+ "「ダンジョン遭遇表」(153ページ)へ移動。ここは大型ダンジョンなので、モンスターが出現した場合、数が2体増加する。さらにイベントの経験値が2増加する。",
41
+ "牢獄遭遇表へ移動(154ページ)。牢獄つきダンジョン。",
42
+ ]
43
+ )
44
+
45
+ DUNGEON_TABLE_PLUS = DungeonTable.new(
46
+ "ダンジョン表プラス",
47
+ "DNGNP",
48
+ "2D6",
49
+ [
50
+ "犬小屋(基本155ページ)",
51
+ "犬小屋(基本155ページ)",
52
+ "犬小屋(基本155ページ)",
53
+ "犬小屋(基本155ページ)",
54
+ "「ダンジョン遭遇表」(基本153ページ)へ移動。小型ダンジョンだ。",
55
+ "「ダンジョン遭遇表」(基本153ページ)へ移動。小型ダンジョンだ。",
56
+ "「ダンジョン遭遇表」(基本153ページ)へ移動。ここは中型ダンジョンのため、モンスターが出現した場合、数が1体増加する。またイベントの【経験値】が1増加する。",
57
+ "「ダンジョン遭遇表」(基本153ページ)へ移動。ここは大型ダンジョンのため、モンスターが出現した場合、数が2体増加する。またイベントの【経験値】が2増加する。",
58
+ "「ダンジョン遭遇表」(基本153ページ)へ移動。近くに寄っただけで吸い込まれる罠のダンジョンだ。「ダンジョン遭遇表」を使用したあと、中央にあるモニュメントに触れて転移して出るか、【鉄格子】と戦闘して出るか選択する。転移した場合は闇の目の前に出てしまい、全力ダッシュで【ST】を1D6消費する。【鉄格子】との戦闘では逃走を選択できない。",
59
+ "「ダンジョン遭遇表」(基本153ページ)へ移動。水浸しのダンジョンで、「ダンジョン遭遇表」を使用した直後に【ST】が3減少する。「水泳」",
60
+ "水路に囲まれた水上遺跡だ。なかに入るなら【ST】を4消費(「水泳」)してから「ダンジョン遭遇表」(基本153ページ)へ移動。イベントの判定に成功すると追加で【豪華な宝箱】が1つ出現し、戦闘か開錠を試みられる。",
61
+ "「牢獄遭遇表」(基本154ページ)へ移動。牢獄つきダンジョンだ。",
62
+ "砂の遺跡にたどりつき、「牢獄遭遇表」(基本154ページ)へ移動。モンスターが出現した場合、数が2体増加する。またイベントの【経験値】が2増加する。イベントの判定に成功すると追加で【珍しい箱】が1つ出現し、戦闘か開錠を試みられる。",
63
+ ]
64
+ )
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,166 @@
1
+ module BCDice
2
+ module GameSystem
3
+ class OneWayHeroics < Base
4
+ class RandomEventTable
5
+ def initialize(name, type, items)
6
+ @name = name
7
+ @items = items.freeze
8
+
9
+ m = /(\d+)D(\d+)/i.match(type)
10
+ unless m
11
+ raise ArgumentError, "Unexpected table type: #{type}"
12
+ end
13
+
14
+ @times = m[1].to_i
15
+ @sides = m[2].to_i
16
+ end
17
+
18
+ def roll_with_day(day, randomizer)
19
+ value = randomizer.roll_sum(@times, @sides)
20
+ index = value - 1
21
+
22
+ chosen = @items[index]
23
+ chosen =
24
+ if chosen.respond_to?(:roll)
25
+ chosen.roll(randomizer)
26
+ elsif chosen.respond_to?(:roll_with_day)
27
+ chosen.roll_with_day(day, randomizer)
28
+ else
29
+ chosen
30
+ end
31
+
32
+ return "#{@name}(#{value}) > #{chosen}"
33
+ end
34
+ end
35
+
36
+ class BranchByDay
37
+ def initialize(text, less_than_equal, greater)
38
+ @text = text
39
+ @greater = greater
40
+ @less_than_equal = less_than_equal
41
+ end
42
+
43
+ def roll_with_day(day, randomizer)
44
+ value = randomizer.roll_once(6)
45
+ chosen = choise(value, day)
46
+
47
+ chosen =
48
+ if chosen.respond_to?(:roll_with_day)
49
+ "#{chosen.key}#{day} > #{chosen.roll_with_day(day, randomizer)}"
50
+ elsif chosen.ascii_only?
51
+ [chosen, TABLES[chosen].roll(randomizer)].join(" > ")
52
+ else
53
+ chosen
54
+ end
55
+
56
+ result = <<~RESULT.chomp
57
+ #{@text} >
58
+ 1D6 > #{value} > #{branch_result(value, day)} >
59
+ #{chosen}
60
+ RESULT
61
+ return result
62
+ end
63
+
64
+ def choise(value, day)
65
+ raise NotImplementedError
66
+ end
67
+
68
+ def branch_result(value, day)
69
+ raise NotImplementedError
70
+ end
71
+ end
72
+
73
+ class BranchByElapsedDays < BranchByDay
74
+ def choise(value, day)
75
+ value > day ? @greater : @less_than_equal
76
+ end
77
+
78
+ def branch_result(value, day)
79
+ if value > day
80
+ "日数[#{day}]を超えている"
81
+ else
82
+ "日数[#{day}]以下"
83
+ end
84
+ end
85
+ end
86
+
87
+ class BranchByDayParity < BranchByDay
88
+ def choise(value, _)
89
+ value.odd? ? @greater : @less_than_equal
90
+ end
91
+
92
+ def branch_result(value, _)
93
+ if value.odd?
94
+ "奇数"
95
+ else
96
+ "偶数"
97
+ end
98
+ end
99
+ end
100
+
101
+ class MoveToTableWithDay
102
+ def initialize(text, table)
103
+ @text = text
104
+ @table = table
105
+ end
106
+
107
+ def roll_with_day(day, randomizer)
108
+ <<~RESULT.chomp
109
+ #{@text} >
110
+ #{@table.key}#{day} > #{@table.roll_with_day(day, randomizer)}
111
+ RESULT
112
+ end
113
+ end
114
+
115
+ RANDOM_EVENT_TABLE = RandomEventTable.new(
116
+ "ランダムイベント表",
117
+ "1D6",
118
+ [
119
+ BranchByElapsedDays.new(
120
+ "さらに1D6を振る。現在PCがいるエリアの【日数】以下なら「施設表」へ移動。【日数】を超えていれば「ダンジョン表」(153ページ)へ移動。",
121
+ "FCLT",
122
+ DUNGEON_TABLE
123
+ ),
124
+ BranchByElapsedDays.new(
125
+ "さらに1D6を振る。現在PCがいるエリアの【日数】以下なら「世界の旅表」(157ページ)へ移動。【日数】を超えていれば「野外遭遇表(OUTENC)」(155ページ)へ移動。",
126
+ "「世界の旅表」(157ページ)へ。",
127
+ "OUTENC"
128
+ ),
129
+ MoveToTable.new("「施設表」へ移動。", "FCLT"),
130
+ "「世界の旅表」(157ページ)へ移動。",
131
+ MoveToTable.new("「野外遭遇表」(155ページ)へ移動。", "OUTENC"),
132
+ MoveToTableWithDay.new("「ダンジョン表」(152ページ)へ移動。", DUNGEON_TABLE),
133
+ ]
134
+ )
135
+
136
+ RANDOM_EVENT_TABLE_PLUS = RandomEventTable.new(
137
+ "ランダムイベント表プラス",
138
+ "1D6",
139
+ [
140
+ BranchByElapsedDays.new(
141
+ "さらに1D6を振る。現在PCがいるエリアの【日数】以下なら施設表プラス(022ページ)へ移動。【経過日数】を超えていればダンジョン表プラス(025ページ)へ移動",
142
+ "FCLTP",
143
+ DUNGEON_TABLE_PLUS
144
+ ),
145
+ BranchByElapsedDays.new(
146
+ "さらに1D6を振る。現在PCがいるエリアの【日数】以下なら世界の旅表(基本157ページ)へ移動。【経過日数】を超えていれば野外遭遇表(基本155ページ)へ移動",
147
+ "「世界の旅表」(157ページ)へ。",
148
+ "OUTENC"
149
+ ),
150
+ BranchByElapsedDays.new(
151
+ "さらに1D6を振る。現在PCがいるエリアの【日数】以下なら世界の旅表2(028ページ)へ移動。【経過日数】を超えていれば野外遭遇表プラス(025ページ)へ移動",
152
+ "世界の旅表2(028ページ)へ。",
153
+ "OUTENCP"
154
+ ),
155
+ BranchByDayParity.new(
156
+ "さらに1D6を振る。奇数なら世界の旅表(基本157ページ)へ移動。偶数なら世界の旅表2(028ページ)へ移動",
157
+ "世界の旅表(基本157ページ)へ。",
158
+ "世界の旅表2(028ページ)へ。"
159
+ ),
160
+ MoveToTable.new("施設表プラスへ移動(022ページ)", "FCLTP"),
161
+ MoveToTableWithDay.new("ダンジョン表プラスへ移動(025ページ)", DUNGEON_TABLE_PLUS)
162
+ ]
163
+ )
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,668 @@
1
+ module BCDice
2
+ module GameSystem
3
+ class OneWayHeroics < Base
4
+ class GoldFlow
5
+ def initialize(times, action)
6
+ @times = times
7
+ @action = action
8
+ end
9
+
10
+ def roll(randomizer)
11
+ dice_list = randomizer.roll_barabara(@times, 6)
12
+ dice_total = dice_list.sum()
13
+ gold = dice_total * 100
14
+
15
+ sequence = [
16
+ "#{@times}D6に100を掛け、それだけの【所持金】を#{@action}",
17
+ "#{@times}D6[#{dice_list.join(',')}]*100",
18
+ "【所持金】#{gold} を#{@action}"
19
+ ]
20
+
21
+ return sequence.join(" > ")
22
+ end
23
+ end
24
+
25
+ class StatusDown
26
+ def initialize(status, times)
27
+ @status = status
28
+ @times = times
29
+ end
30
+
31
+ def roll(randomizer)
32
+ dice_list = randomizer.roll_barabara(@times, 6)
33
+ total = dice_list.sum()
34
+
35
+ sequence = [
36
+ "#{@status}が#{@times}D6減少する",
37
+ "#{@times}D6[#{dice_list.join(',')}]",
38
+ "#{@status}が #{total} 減少する"
39
+ ]
40
+
41
+ return sequence.join(" > ")
42
+ end
43
+ end
44
+
45
+ class MoveToTable
46
+ def initialize(text, table_key)
47
+ @text = text
48
+ @table_key = table_key
49
+ end
50
+
51
+ def roll(randomizer)
52
+ <<~RESULT.chomp
53
+ #{@text} >
54
+ #{@table_key} > #{TABLES[@table_key].roll(randomizer)}
55
+ RESULT
56
+ end
57
+ end
58
+
59
+ TABLES = {
60
+ "FT" => DiceTable::ChainTable.new(
61
+ "ファンブル表",
62
+ "1D6",
63
+ [
64
+ "装備以外のアイテムのうちプレイヤー指定の1つを失う",
65
+ "装備のうちプレイヤー指定の1つを失う",
66
+ GoldFlow.new(1, "失う"), # "1D6に100を掛け、それだけの【所持金】を失う",
67
+ GoldFlow.new(1, "拾う"), # "1D6に100を掛け、それだけの【所持金】を拾う",
68
+ "【経験値】2を獲得する",
69
+ "【経験値】4を獲得する",
70
+ ]
71
+ ),
72
+ "DC" => DiceTable::ChainTable.new(
73
+ "魔王追撃表",
74
+ "1D6",
75
+ [
76
+ "装備以外のアイテムのうちGM指定の1つを失う",
77
+ "装備のうちGM指定の1つを失う",
78
+ GoldFlow.new(2, "失う"), # "2D6に100を掛け、それだけの【所持金】を失う",
79
+ StatusDown.new("【LIFE】", 1), # 【LIFE】が1D6減少する
80
+ StatusDown.new("【ST】", 1), # 【ST】が1D6減少する
81
+ StatusDown.new("【LIFE】", 2) # 【LIFE】が2D6減少する
82
+ ]
83
+ ),
84
+ "PR" => DiceTable::Table.new(
85
+ "進行ルート表",
86
+ "1D6",
87
+ [
88
+ "少し荒れた地形が続く。【日数】から【筋力】を引いただけ【ST】が減少する(最低0)",
89
+ "穏やかな地形が続く。【日数】から【敏捷】を引いただけ【ST】が減少する(最低0)",
90
+ "険しい岩山だ。【日数】に1を足して【生命】を引いただけ【ST】が減少する(最低0)「登山」",
91
+ "山で迷った。【日数】に2を足して【知力】を引いただけ【ST】が減少する(最低0)「登山」",
92
+ "川を泳ぐ。【日数】に1を足して【意志】を引いただけ【ST】が減少する(最低0)「水泳」",
93
+ "広い川を船で渡る。【日数】に2を足して【魅力】を引いただけ【ST】が減少する(最低0)「水泳」"
94
+ ]
95
+ ),
96
+ "TT" => DiceTable::Table.new(
97
+ "会話テーマ表",
98
+ "1D6",
99
+ [
100
+ "身体の悩みごとについて話す。【筋力】で判定。",
101
+ "仕事の悩みごとについて話す。【敏捷】で判定。",
102
+ "家族の悩みごとについて話す。【生命】で判定。",
103
+ "勇者としてこれでいいのか的悩みごとを話す。【知力】で判定。",
104
+ "友人関係の悩みごとを話す。【意志】で判定。",
105
+ "恋の悩みごとを話す。【魅力】で判定。"
106
+ ]
107
+ ),
108
+ "EC" => DiceTable::Table.new(
109
+ "逃走判定表",
110
+ "1D6",
111
+ [
112
+ "崖を登れば逃げられそうだ。【筋力】を使用する。",
113
+ "障害物はない。走るしかない。【敏捷】を使用する。",
114
+ "しつこく追われる。【生命】を使用する。",
115
+ "隠れられる地形がある。【知力】を使用する。",
116
+ "背中を向ける勇気が出るか? 【意志】を使用す",
117
+ "もう人徳しか頼れない。【魅力】を使用する。"
118
+ ]
119
+ ),
120
+ "RNPC" => DiceTable::Table.new(
121
+ "ランダムNPC特徴表",
122
+ "2D6",
123
+ [
124
+ "【物持ちの】",
125
+ "【目のいい】",
126
+ "【弱そうな】",
127
+ "【宝石好きな】",
128
+ "【エッチな】",
129
+ "【ケチな】",
130
+ "【変態の】",
131
+ "【金持ちの】",
132
+ "【強そうな】",
133
+ "【目の悪い】",
134
+ "【すばやい】"
135
+ ]
136
+ ),
137
+ "SCT" => DiceTable::Table.new(
138
+ "偵察表",
139
+ "1D6",
140
+ [
141
+ "山に突き当たる。「登山」判定:【筋力】 ジャッジ:山を登る描写。",
142
+ "川を流れ下る。「水泳」判定:【敏捷】 ジャッジ:川でピンチに陥る描写。",
143
+ "広い湖だ……。「水泳」判定:【生命】 ジャッジ:湖面を泳ぐ描写。",
144
+ "山の楽なルートを探そう。「登山」判定:【知力】 ジャッジ:山の豆知識。",
145
+ "迫る闇から恐怖のあまり目を離せない。判定:【意志】 ジャッジ:勇者としての決意。",
146
+ "任意のNPCに会って情報を聞く。判定:【魅力】 ジャッジ:相手を立てる会話。"
147
+ ]
148
+ ),
149
+ "FCLT" => DiceTable::Table.new(
150
+ "施設表",
151
+ "2D6",
152
+ [
153
+ "聖なる神殿(152ページ)。",
154
+ "魔王の力を封じた神殿(152ページ)。",
155
+ "耳長たちの村(152ページ)。",
156
+ "「村遭遇表」へ移動。大きな街なので村遭遇表を2回使用し、好きな結果を選べる。",
157
+ "「村遭遇表」へ移動。小さな村だ。",
158
+ "エリアの地形が「雪原」なら雪国の小屋(152ページ)。エリアの地形が「山岳」なら山小屋(152ページ)。それ以外の地形なら「村遭遇表」へ移動。この村は「石の小屋」だ。",
159
+ "村遭遇表」へ移動。小さな村だ。",
160
+ "村遭遇表」へ移動。大きな街なので村遭遇表を2回使用し、好きな結果を選べる。",
161
+ "滅びた石の小屋(152ページ)。",
162
+ "滅びた小さな村(152ページ)。",
163
+ "闇ギルド(152ページ)。"
164
+ ]
165
+ ),
166
+ "FCLTP" => DiceTable::D66Table.new(
167
+ "施設表プラス",
168
+ D66SortType::ASC,
169
+ {
170
+ 11 => "聖なる神殿(基本152ページ)",
171
+ 12 => "魔王の力を封じた神殿(基本152ページ)",
172
+ 13 => "耳長たちの村(基本152ページ)判定成功時に【耳長の軽い弓】【耳長の杖】を購入可能",
173
+ 14 => "村遭遇表へ移動(基本151ページ)大きな街なので村遭遇表を2回振り、好きな結果を選べる",
174
+ 15 => "村遭遇表へ移動(基本151ページ)小さな村",
175
+ 16 => "エリアの地形が雪原なら雪国の小屋(基本152ページ)エリアの地形が山岳なら山小屋(基本152ページ)それ以外の地形なら石の小屋、村遭遇表へ移動(基本151ページ)",
176
+ 22 => "村遭遇表へ移動(基本151ページ)小さな村",
177
+ 23 => "村遭遇表へ移動(基本151ページ)大きな街なので村遭遇表を2回振り、好きな結果を選べる",
178
+ 24 => "滅びた石の小屋(基本152ページ)",
179
+ 25 => "滅びた小さな村(基本152ページ)",
180
+ 26 => "闇ギルド(基本152ページ)判定成功時に一度だけ【闇ギルド袋屋】に3000シルバ支払い【所持重量】を1増加することができる。",
181
+ 33 => "小さな店遭遇表プラスへ移動(023ページ)",
182
+ 34 => "酒場遭遇表プラスへ移動",
183
+ 35 => "酒場遭遇表プラスへ移動",
184
+ 36 => "錬金おばばの家(024ページ)",
185
+ 44 => "鍛冶屋の家(024ページ)",
186
+ 45 => "半獣人の隠れ家(024ページ)",
187
+ 46 => "罪人の街(024ページ)",
188
+ 55 => "封印の街(024ページ)",
189
+ 56 => "水上の街(024ページ)",
190
+ 66 => "人魚の集落(024ページ)",
191
+ }
192
+ ),
193
+ "OUTENC" => DiceTable::ChainTable.new(
194
+ "野外遭遇表",
195
+ "1D6",
196
+ [
197
+ MoveToTable.new("エリアの地形ごとの野外モンスター表へ移動。モンスターのうち1体にランダムな特徴がつく。モンスター特徴表(156ページ)を使用する。", "MONFT"),
198
+ "エリアの地形ごとの野外モンスター表へ移動",
199
+ "エリアの地形ごとの野外モンスター表へ移動",
200
+ "アンデッドの群れ(156ページ)",
201
+ "盗賊の群れ(156ページ)",
202
+ MoveToTable.new("希少動物表(基本156ページ)へ移動", "RANI"),
203
+ ]
204
+ ),
205
+ "OUTENCP" => DiceTable::ChainTable.new(
206
+ "野外遭遇表プラス",
207
+ "1D6",
208
+ [
209
+
210
+ MoveToTable.new("エリアの地形ごとの野外モンスター表プラスへ移動。モンスターのうち1体にランダムな特徴がつく。モンスター特徴表プラス(027ページ)を使用する。", "MONFTP"),
211
+ "エリアの地形ごとの野外モンスター表プラスへ移動し、出現したモンスターとの戦闘が発生する",
212
+ "スライムモンスター表プラス(027ページ)へ移動",
213
+ "アンデッドの群れ(基本156ページ)",
214
+ "盗賊の群れ(基本156ページ)",
215
+ MoveToTable.new("希少動物表(基本156ページ)へ移動", "RANI"),
216
+ ]
217
+ ),
218
+ "MONFT" => DiceTable::D66Table.new(
219
+ "モンスター特徴表",
220
+ D66SortType::ASC,
221
+ {
222
+ 11 => "【エッチな】",
223
+ 12 => "【変態の】",
224
+ 13 => "【弱そうな】",
225
+ 14 => "【目のいい】",
226
+ 15 => "【目の悪い】",
227
+ 16 => "【強そうな】",
228
+ 22 => "【強そうな】",
229
+ 23 => "【宝石好きな】",
230
+ 24 => "【幻の】",
231
+ 25 => "【違法な】",
232
+ 26 => "【イカした】",
233
+ 33 => "【物持ちの】",
234
+ 34 => "【炎を吐く】",
235
+ 35 => "【必中の】",
236
+ 36 => "【すばやい】",
237
+ 44 => "【やたら硬い】",
238
+ 45 => "【名の知れた】",
239
+ 46 => "【凶悪な】",
240
+ 55 => "【賞金首の】",
241
+ 56 => "【古代種の】",
242
+ 66 => "【最強の】",
243
+ }
244
+ ),
245
+ "MONFTP" => DiceTable::D66Table.new(
246
+ "モンスター特徴表プラス",
247
+ D66SortType::ASC,
248
+ {
249
+ 11 => "【エッチな】(基本178ページ)",
250
+ 12 => "【変態の】(基本178ページ)",
251
+ 13 => "【目のいい】(基本178ページ)",
252
+ 14 => "【目の悪い】(基本178ページ)",
253
+ 15 => "【強そうな】(基本178ページ)",
254
+ 16 => "【宝石好きな】(基本178ページ)",
255
+ 22 => "【幻の】(基本178ページ)",
256
+ 23 => "【違法な】(基本178ページ)",
257
+ 24 => "【イカした】(基本178ページ)",
258
+ 25 => "【物持ちの】(基本178ページ)",
259
+ 26 => "【炎を吐く】(基本178ページ)",
260
+ 33 => "【やたら硬い】(基本178ページ)",
261
+ 34 => "【古代種の】(基本178ページ)",
262
+ 35 => "【最強の】(基本178ページ)",
263
+ 36 => "【異国風の】(047ページ)",
264
+ 44 => "【毛深い】(047ページ)",
265
+ 45 => "【耐火の】(047ページ)",
266
+ 46 => "【耐雷の】(047ページ) ",
267
+ 55 => "【浮遊の】(047ページ)",
268
+ 56 => "【臭い】(047ページ)",
269
+ 66 => "【恐怖の】(047ページ)",
270
+ }
271
+ ),
272
+ "RANI" => DiceTable::RangeTable.new(
273
+ "希少動物表",
274
+ "1D6",
275
+ [
276
+ [1, "【『緑の森』隊長】1体と遭遇する。今回のセッションで【雪ウサギ】【山岳ゴート】【遺跡白馬】【草原カワウソ】【砂漠キツネ】のいずれかを倒したことがあれば、戦闘が発生する。戦闘にならなかった場合はなごやかに別れる。"],
277
+ [2..3, "【『緑の森』団員】1体と遭遇する。今回のセッションで【雪ウサギ】【山岳ゴート】【遺跡白馬】【草原カワウソ】【砂漠キツネ】のいずれかを倒したことがあれば、戦闘が発生する。戦闘にならなかった場合はなごやかに別れる。"],
278
+ [4..6, "地形によって異なる希少動物が1体出現する。雪原なら【雪ウサギ】、山岳なら【山岳ゴート】、遺跡なら【遺跡白馬】、草原なら【草原カワウソ】、砂漠と荒野は【砂漠キツネ】。それ以外は【緑の森団員】となる。戦闘を挑んでもいいし、見送ってもいい。"]
279
+ ]
280
+ ),
281
+ "DROP" => DiceTable::ChainTable.new(
282
+ "ドロップアイテム表",
283
+ "1D6",
284
+ [
285
+ MoveToTable.new("武器ドロップ表へ移動", "DROPWP"),
286
+ MoveToTable.new("武器ドロップ表へ移動", "DROPWP"),
287
+ MoveToTable.new("防具ドロップ表へ移動", "DROPAR"),
288
+ MoveToTable.new("食品ドロップ表へ移動", "DROPFD"),
289
+ MoveToTable.new("巻物ドロップ表へ移動", "DROPSC"),
290
+ MoveToTable.new("その他ドロップ表へ移動", "DROPOT"),
291
+ ]
292
+ ),
293
+ "DROPWP" => DiceTable::D66Table.new(
294
+ "武器ドロップ表",
295
+ D66SortType::ASC,
296
+ {
297
+ 11 => "【さびた小剣】",
298
+ 12 => "【さびた長剣】",
299
+ 13 => "【さびた大剣】",
300
+ 14 => "【長い棒】",
301
+ 15 => "【ダガー】",
302
+ 16 => "【木こりの大斧】",
303
+ 22 => "【ショートブレイド】",
304
+ 23 => "【木の杖】",
305
+ 24 => "【狩人の弓】",
306
+ 25 => "【レイピア】",
307
+ 26 => "【携帯弓】",
308
+ 33 => "【ロングブレイド】",
309
+ 34 => "【スレンドスピア】",
310
+ 35 => "【バトルアックス】",
311
+ 36 => "【軍用剛弓】",
312
+ 44 => "【グランドブレイド】",
313
+ 45 => "【祈りの杖】",
314
+ 46 => "【ヘビィボウガン】",
315
+ 55 => "【シルバーランス】",
316
+ 56 => "【イーグルブレイド】",
317
+ 66 => "【クレセントアクス】"
318
+ }
319
+ ),
320
+ "DROPAR" => DiceTable::D66Table.new(
321
+ "防具ドロップ表",
322
+ D66SortType::ASC,
323
+ {
324
+ 11 => "【旅人の服】",
325
+ 12 => "【旅人の服】",
326
+ 13 => "【旅人の服】",
327
+ 14 => "【レザーシールド】",
328
+ 15 => "【レザーシールド】",
329
+ 16 => "【騎士のコート】",
330
+ 22 => "【騎士のコート】",
331
+ 23 => "【スケイルシールド】",
332
+ 24 => "【スケイルシールド】",
333
+ 25 => "【レザーベスト】",
334
+ 26 => "【レザーベスト】",
335
+ 33 => "【ヘビィシールド】",
336
+ 34 => "【チェインクロス】",
337
+ 35 => "【チェインクロス】",
338
+ 36 => "【試練の腕輪】",
339
+ 44 => "【精霊のローブ】",
340
+ 45 => "【必殺の腕輪】",
341
+ 46 => "【ギガントプレート】",
342
+ 55 => "【破壊の腕輪】",
343
+ 56 => "【理力の腕輪】",
344
+ 66 => "【加速の腕輪】"
345
+ }
346
+ ),
347
+ "DROPHW" => DiceTable::Table.new(
348
+ "聖武具ドロップ表",
349
+ "2D6",
350
+ [
351
+ "【紅き太陽の剣】",
352
+ "【紅き太陽の剣】",
353
+ "【聖剣カレドヴルフ】 ",
354
+ "【聖斧エルサーベス】 ",
355
+ "【水霊のマント】",
356
+ "【大地の鎧】",
357
+ "【大気の盾】",
358
+ "【聖弓ル・アルシャ】",
359
+ "【聖槍ヴァルキウス】",
360
+ "【聖なる月の剣】",
361
+ "【聖なる月の剣】"
362
+ ]
363
+ ),
364
+ "DROPFD" => DiceTable::D66Table.new(
365
+ "食品ドロップ表",
366
+ D66SortType::ASC,
367
+ {
368
+ 11 => "【枯れた草】",
369
+ 12 => "【こげた草】",
370
+ 13 => "【サボテンの肉】",
371
+ 14 => "【動物の肉】",
372
+ 15 => "【癒しの草】、地形が火山なら【こげた草】",
373
+ 16 => "【癒しの草】、地形が火山なら【こげた草】、地形が雪原なら【スノークリスタ草】",
374
+ 22 => "【スタミナ草】、地形が火山なら【こげた草】",
375
+ 23 => "【スタミナ草】、地形が火山なら【こげた草】、地形が雪原なら【スノークリスタ草】",
376
+ 24 => "【触手の草】、地形が火山なら【こげた草】",
377
+ 25 => "【触手の草】、地形が火山なら【こげた草】、地形が雪原なら【スノークリスタ草】",
378
+ 26 => "【スタミナのアンプル】",
379
+ 33 => "【癒しのアンプル】",
380
+ 34 => "【癒しのアンプル】",
381
+ 35 => "【ナユタの実】、地形が火山なら【こげた草】",
382
+ 36 => "【ナユタの実】、地形が火山なら【こげた草】",
383
+ 44 => "【火炎のアンプル】",
384
+ 45 => "【強酸のアンプル】",
385
+ 46 => "【とぶクスリ】",
386
+ 55 => "【竜炎のアンプル】",
387
+ 56 => "【おいしいお弁当】",
388
+ 66 => "【自然治癒のアンプル】"
389
+ }
390
+ ),
391
+ "DROPSC" => DiceTable::D66Table.new(
392
+ "巻物ドロップ表",
393
+ D66SortType::ASC,
394
+ {
395
+ 11 => "【石壁の巻物】",
396
+ 12 => "【石壁の巻物】",
397
+ 13 => "【周辺の地図】",
398
+ 14 => "【周辺の地図】",
399
+ 15 => "【周辺の地図】",
400
+ 16 => "【火炎付与の巻物】",
401
+ 22 => "【混乱の巻物】",
402
+ 23 => "【剣の巻物】",
403
+ 24 => "【剣の巻物】",
404
+ 25 => "【鎧の巻物】",
405
+ 26 => "【鎧の巻物】",
406
+ 33 => "【応急修理の巻物】",
407
+ 34 => "【応急修理の巻物】",
408
+ 35 => "【移動不能付与の巻物】",
409
+ 36 => "【移動不能付与の巻物】",
410
+ 44 => "【宝の地図】",
411
+ 45 => "【宝の地図】",
412
+ 46 => "【召喚の巻物】",
413
+ 55 => "【剣の王の巻物】",
414
+ 56 => "【守りの神の巻物】",
415
+ 66 => "【高度修復の巻物】"
416
+ }
417
+ ),
418
+ "DROPOT" => DiceTable::D66Table.new(
419
+ "その他ドロップ表",
420
+ D66SortType::ASC,
421
+ {
422
+ 11 => "【大きな石】、地形が火山なら【くすんだ宝石】",
423
+ 12 => "【大きな石】、地形が火山なら【くすんだ宝石】",
424
+ 13 => "【大きな石】、地形が火山なら【美しい宝石】",
425
+ 14 => "【木製の矢】",
426
+ 15 => "【理力の矢】",
427
+ 16 => "【鉄製の矢】",
428
+ 22 => "【投げナイフ】",
429
+ 23 => "【爆弾矢】",
430
+ 24 => "【くすんだ宝石】",
431
+ 25 => "【盾修復キット】",
432
+ 26 => "【上質の研ぎ石】",
433
+ 33 => "【エルザイト爆弾】",
434
+ 34 => "【セーブクリスタル】",
435
+ 35 => "【試練の腕輪】",
436
+ 36 => "【必殺の腕輪】",
437
+ 44 => "【破壊の腕輪】",
438
+ 45 => "【理力の腕輪】",
439
+ 46 => "【加速の腕輪】",
440
+ 55 => "【美しい宝石】",
441
+ 56 => "【封印のカギ】",
442
+ 66 => "【闇ギルド会員証】"
443
+ }
444
+ ),
445
+ "DROPP" => DiceTable::D66Table.new(
446
+ "ドロップアイテム表プラス",
447
+ D66SortType::ASC,
448
+ {
449
+ 11 => MoveToTable.new("武器ドロップ表", "DROPWP"),
450
+ 12 => MoveToTable.new("武器ドロップ表", "DROPWP"),
451
+ 13 => MoveToTable.new("武器ドロップ表2", "DROPWP2"),
452
+ 14 => MoveToTable.new("武器ドロップ表2", "DROPWP2"),
453
+ 15 => MoveToTable.new("防具ドロップ表", "DROPAR"),
454
+ 16 => MoveToTable.new("防具ドロップ表", "DROPAR"),
455
+ 22 => MoveToTable.new("防具ドロップ表2", "DROPAR2"),
456
+ 23 => MoveToTable.new("防具ドロップ表2", "DROPAR2"),
457
+ 24 => MoveToTable.new("食品ドロップ表", "DROPFD"),
458
+ 25 => MoveToTable.new("食品ドロップ表", "DROPFD"),
459
+ 26 => MoveToTable.new("食品ドロップ表2", "DROPFD2"),
460
+ 33 => MoveToTable.new("食品ドロップ表2", "DROPFD2"),
461
+ 34 => MoveToTable.new("薬品ドロップ表プラス", "DROPDRP"),
462
+ 35 => MoveToTable.new("薬品ドロップ表プラス", "DROPDRP"),
463
+ 36 => MoveToTable.new("巻物ドロップ表", "DROPSC"),
464
+ 44 => MoveToTable.new("巻物ドロップ表", "DROPSC"),
465
+ 45 => MoveToTable.new("巻物ドロップ表2", "DROPSC2"),
466
+ 46 => MoveToTable.new("巻物ドロップ表2", "DROPSC2"),
467
+ 55 => MoveToTable.new("その他ドロップ表", "DROPOT"),
468
+ 56 => MoveToTable.new("その他ドロップ表", "DROPOT"),
469
+ 66 => MoveToTable.new("その他ドロップ表2", "DROPOT2")
470
+ }
471
+ ),
472
+ "DROPDRP" => DiceTable::D66Table.new(
473
+ "薬品ドロップ表プラス",
474
+ D66SortType::ASC,
475
+ {
476
+ 11 => "【燃料油のビン】",
477
+ 12 => "【燃料油のビン】",
478
+ 13 => "【燃料油のビン】",
479
+ 14 => "【弱体の薬】",
480
+ 15 => "【弱体の薬】",
481
+ 16 => "【弱体の薬】",
482
+ 22 => "【成長の薬】",
483
+ 23 => "【ベルセルクアンプル】",
484
+ 24 => "【ベルセルクアンプル】",
485
+ 25 => "【浮遊の薬】",
486
+ 26 => "【浮遊の薬】",
487
+ 33 => "【反動解消の薬】",
488
+ 34 => "【反動解消の薬】",
489
+ 35 => "【癒しの大ボトル】",
490
+ 36 => "【癒しの大ボトル】",
491
+ 44 => "【超元気のアンプル】",
492
+ 45 => "【超元気のアンプル】",
493
+ 46 => "【薬命酒】",
494
+ 55 => "【薬命酒】",
495
+ 56 => "【洗脳のクスリ】",
496
+ 66 => "【洗脳のクスリ】"
497
+ }
498
+ ),
499
+ "DROPSC2" => DiceTable::D66Table.new(
500
+ "巻物ドロップ表2",
501
+ D66SortType::ASC,
502
+ {
503
+ 11 => "【火炎波の巻物】",
504
+ 12 => "【悟りの巻物】",
505
+ 13 => "【理盾の巻物】",
506
+ 14 => "【泉の巻物】",
507
+ 15 => "【雷神の巻物】",
508
+ 16 => "【超激震の巻物】",
509
+ 22 => "【闇を阻む巻物】",
510
+ 23 => "【引きこもりの巻物】",
511
+ 24 => "【鋼鉄の巻物】",
512
+ 25 => "【回廊の巻物】",
513
+ 26 => "【騎士団の巻物】",
514
+ 33 => "【水泳能力の巻物】",
515
+ 34 => "【浮遊能力の巻物】",
516
+ 35 => "【治癒の書】",
517
+ 36 => "【浮遊の書】",
518
+ 44 => "【突風の書】",
519
+ 45 => "【睡眠の書】",
520
+ 46 => "【火炎の書】",
521
+ 55 => "【鋼鉄の書】",
522
+ 56 => "【加速の書】",
523
+ 66 => "【闇払いの書】"
524
+ }
525
+ ),
526
+ "DROPWP2" => DiceTable::D66Table.new(
527
+ "武器ドロップ表2",
528
+ D66SortType::ASC,
529
+ {
530
+ 11 => "【さびた巨大斧】",
531
+ 12 => "【さびた巨大斧】",
532
+ 13 => "【モコモコのバトン】",
533
+ 14 => "【モコモコのバトン】",
534
+ 15 => "【ベルセルクアクス】",
535
+ 16 => "【ベルセルクアクス】",
536
+ 22 => "【クナイ】",
537
+ 23 => "【クナイ】",
538
+ 24 => "【術殺槍】",
539
+ 25 => "【ウィンドスピア】",
540
+ 26 => "【ウィンドスピア】",
541
+ 33 => "【つるはし】",
542
+ 34 => "【つるはし】",
543
+ 35 => "【理力の剣】",
544
+ 36 => "【蒼い短刀】",
545
+ 44 => "【クリムゾンクロウ】",
546
+ 45 => "【ナユタの杖】",
547
+ 46 => "【ナユタの杖】",
548
+ 55 => "【一撃斧】",
549
+ 56 => "【ファイアブランド】",
550
+ 66 => "【ソードクロスボウ】"
551
+ }
552
+ ),
553
+ "DROPAR2" => DiceTable::D66Table.new(
554
+ "防具ドロップ表2",
555
+ D66SortType::ASC,
556
+ {
557
+ 11 => "【ボロボロの服】",
558
+ 12 => "【ボロボロの服】",
559
+ 13 => "【穴だらけの鎧】",
560
+ 14 => "【穴だらけの鎧】",
561
+ 15 => "【木製の追加装甲】",
562
+ 16 => "【木製の追加装甲】",
563
+ 22 => "【ガラスの鎧】",
564
+ 23 => "【ガラスの鎧】",
565
+ 24 => "【鉄板の追加装甲】",
566
+ 25 => "【鉄板の追加装甲】",
567
+ 26 => "【太陽のランタン】",
568
+ 33 => "【耐火服】",
569
+ 34 => "【獣の革のバッグ】",
570
+ 35 => "【重量ブーツ】",
571
+ 36 => "【冒険者のブーツ】",
572
+ 44 => "【ラバーブーツ】",
573
+ 45 => "【風のマント】",
574
+ 46 => "【狩人の服】",
575
+ 55 => "【ドラゴンスケイル】",
576
+ 56 => "【不育の腕輪】",
577
+ 66 => "【竜革の大きなバッグ】"
578
+ }
579
+ ),
580
+ "DROPHWP" => DiceTable::D66Table.new(
581
+ "聖武具ドロップ表プラス",
582
+ D66SortType::ASC,
583
+ {
584
+ 11 => "【大気の盾】",
585
+ 23 => "【聖剣カレドヴルフ】",
586
+ 36 => "【紅蓮の書】",
587
+ 12 => "【大気の盾】",
588
+ 24 => "【聖斧エルサーベス】",
589
+ 44 => "【聖弓ル・アルシャ】",
590
+ 13 => "【大地の鎧】",
591
+ 25 => "【聖斧エルサーベス】",
592
+ 45 => "【聖弓ル・アルシャ】",
593
+ 14 => "【大地の鎧】",
594
+ 26 => "【聖槍ヴァルキウス】",
595
+ 46 => "【聖なる月の剣】",
596
+ 15 => "【水霊のマント】",
597
+ 33 => "【聖槍ヴァルキウス】",
598
+ 55 => "【紅き太陽の剣】",
599
+ 16 => "【水霊のマント】",
600
+ 34 => "【聖槍ヴァルキウス】",
601
+ 56 => "【嵐の聖剣】",
602
+ 22 => "【聖剣カレドヴルフ】",
603
+ 35 => "【紅蓮の書】",
604
+ 66 => "【超重の聖斧】"
605
+ }
606
+ ),
607
+ "DROPFD2" => DiceTable::Table.new(
608
+ "食品ドロップ表2",
609
+ "1D6",
610
+ [
611
+ "【解毒の草】、地形が火 山なら【こげた草】、地 形が海岸なら【おいし い海藻】",
612
+ "【気付けの草】、地形が 火山なら【こげた草】、 地形が海岸なら【おい しい海藻】",
613
+ "【夜目の草】",
614
+ "【力が湧く草】",
615
+ "【集中の草】",
616
+ "【牛乳】"
617
+ ]
618
+ ),
619
+ "DROPOT2" => DiceTable::Table.new(
620
+ "その他 ドロップ表2",
621
+ "2D6",
622
+ [
623
+ "【五連の矢】",
624
+ "【炎の矢】",
625
+ "【聖なる投げ刃】",
626
+ "【物体破壊爆弾】",
627
+ "【閃光弾】",
628
+ "【聖なる短剣の破片】",
629
+ "【閃光弾】",
630
+ "【旋風の投げ刃】",
631
+ "【スーパーエルザイト 爆弾】",
632
+ "【炎の矢】",
633
+ "【五連の矢】"
634
+ ]
635
+ ),
636
+ "DROPRAREBOX2" => DiceTable::Table.new(
637
+ "珍しい箱ドロップ表2",
638
+ "2D6",
639
+ [
640
+ "聖武具ドロップ表プラ スへ",
641
+ "【耐久力の結晶】",
642
+ "【偉大な筋力の結晶】",
643
+ "【偉大な敏捷の結晶】",
644
+ "【偉大な生命の結晶】",
645
+ "【竜鱗の追加装甲】",
646
+ "【偉大な魅力の結晶】",
647
+ "【偉大な意志の結晶】",
648
+ "【偉大な知力の結晶】",
649
+ "【スタミナの結晶】",
650
+ "【闇払いの書】"
651
+ ]
652
+ ),
653
+ "KNGFTP" => DiceTable::Table.new(
654
+ "王特徴表プラス",
655
+ "1D6",
656
+ [
657
+ "【力の王の】(047ページ)",
658
+ "【力の王の】(047ページ)",
659
+ "【疾風の王の】(047ページ)",
660
+ "【疾風の王の】(047ページ)",
661
+ "【炎の王の】(047ページ)",
662
+ "【絶望の王の】(047ページ)"
663
+ ]
664
+ ),
665
+ }.freeze
666
+ end
667
+ end
668
+ end