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,452 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class SterileLife < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'SterileLife'
8
+
9
+ # ゲームシステム名
10
+ NAME = 'ステラーライフTRPG'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'すてらあらいふTRPG'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~MESSAGETEXT
17
+ ◆判定 nDAc[s,d,t] n:ダイス数 c:各種修正 s:1成功(省略不可) d:2成功(省略不可) t:3成功(ダイス目一致時のみ 省略時:無し)
18
+  例)2DA-3[7,10]
19
+ ◆船名ランダム表
20
+  ・船名接頭辞表 VPFT
21
+  ・船名前半表 VNFT
22
+  ・船名後半表 VNRT
23
+  ・アバターアルファベット表① AAFT
24
+  ・アバターアルファベット表② AAST
25
+ ◆ヴォヤージュ各種表
26
+  ・ランダムNPC艦表 RNST
27
+  ・ランダムイベント表 RET
28
+  ・お宝特徴表 TRST
29
+  ・お宝形容表 TRAT
30
+  ・お宝外見表 TRMT
31
+  ・お宝物品表 TROT
32
+ ◆ステラーライフお題表
33
+  ・超未来の技術 TET
34
+  ・超未来のエンタメ ENT
35
+  ・超未来の文化 CUT
36
+  ・超未来の自然 NAT
37
+  ・超未来の宇宙船内 INT
38
+ MESSAGETEXT
39
+
40
+ register_prefix(['(\d+)*DA.*\[(\d+),(\d+)(,(\d+))?\]', 'VPFT', 'VNFT', 'VNRT', 'AAFT', 'AST', 'RNST', 'RET', 'TRST', 'TRAT', 'TRMT', 'TROT', 'TET', 'ENT', 'CUT', 'NAT', 'INT']) # '(\d+)*DA.*\[.*\]'
41
+
42
+ def eval_game_system_specific_command(command) # ダイスロールコマンド
43
+ # 通常判定部分をgetJudgeResultコマンドに切り分け
44
+ output = getJudgeResult(command)
45
+ return output unless output.nil?
46
+
47
+ # テーブル
48
+ result = '0'
49
+ type = ""
50
+ total_n = ""
51
+
52
+ case command.upcase # 大文字にしてチェックする
53
+ when 'VPFT'
54
+ type = '船名接頭辞表'
55
+ result, total_n = get_shipprefix_table
56
+ when 'VNFT'
57
+ type = '船名前半表'
58
+ result, total_n = get_shipnameformer_table
59
+ when 'VNRT'
60
+ type = '船名後半表'
61
+ result, total_n = get_shipnamelatter_table
62
+ when 'AAFT'
63
+ type = 'アバターアルファベット表①'
64
+ result, total_n = get_avataralphabetfirst_table
65
+ when 'AAST'
66
+ type = 'アバターアルファベット表②'
67
+ result, total_n = get_avataralphabetsecond_table
68
+ when 'RNST'
69
+ type = 'ランダムNPC艦表'
70
+ result, total_n = get_randomnpcship_table
71
+ when 'RET'
72
+ type = 'ランダムイベント表'
73
+ result, total_n = get_randomevent_table
74
+ when 'TRST'
75
+ type = 'お宝特徴表'
76
+ result, total_n = get_treasurespec_table
77
+ when 'TRAT'
78
+ type = 'お宝形容表'
79
+ result, total_n = get_treasureappearance_table
80
+ when 'TRMT'
81
+ type = 'お宝外見表'
82
+ result, total_n = get_treasurematerial_table
83
+ when 'TROT'
84
+ type = 'お宝物品表'
85
+ result, total_n = get_treasureobject_table
86
+ when 'TET'
87
+ type = '超未来の技術'
88
+ result, total_n = get_sftechnology_table
89
+ when 'ENT'
90
+ type = '超未来のエンタメ'
91
+ result, total_n = get_sfentertainment_table
92
+ when 'CUT'
93
+ type = '超未来の文化'
94
+ result, total_n = get_sfculture_table
95
+ when 'NAT'
96
+ type = '超未来の自然'
97
+ result, total_n = get_sfnature_table
98
+ when 'INT'
99
+ type = '超未来の宇宙船内'
100
+ result, total_n = get_sfinterior_table
101
+ end
102
+ return "#{type}(#{total_n}) > #{result}"
103
+ end
104
+
105
+ def getJudgeResult(command)
106
+ case command
107
+ when /(\d+)*DA([\d\+\*\-]*[\d])?\[(\d+),(\d+)(,(\d+))?\]/i
108
+ number = (Regexp.last_match(1) || 1).to_i
109
+ correction = (Regexp.last_match(2) || 0).to_i
110
+ single = (Regexp.last_match(3) || 4).to_i
111
+ double = (Regexp.last_match(4) || 8).to_i
112
+ triple = (Regexp.last_match(6) || -1).to_i
113
+ else
114
+ return nil
115
+ end # ^は行頭 $は行末 iは大文字小文字区別しない https://ruby-doc.org/core-2.7.0/Regexp.html
116
+
117
+ success = 0
118
+ dicetext = ""
119
+ corrected = ""
120
+
121
+ if number <= 0 then number = 1 end
122
+
123
+ number.times do
124
+ dice = @randomizer.roll_once(10) - 1
125
+ if (dice + correction).to_i >= single || dice == triple then success += 1 end
126
+ if (dice + correction).to_i >= double || dice == triple then success += 1 end
127
+ if dice == triple then success += 1 end # unless triple == -1 3成功はダイス目一致時のみ
128
+ if dicetext == ""
129
+ dicetext = dice.to_s
130
+ corrected = (dice + correction).to_s
131
+ else
132
+ dicetext = dicetext + "," + dice.to_s
133
+ corrected = corrected + "," + (dice + correction).to_s
134
+ end
135
+ end
136
+
137
+ if correction == 0
138
+ result = "(#{dicetext}) > 成功数#{success}"
139
+ end
140
+
141
+ if correction > 0
142
+ result = "(#{dicetext}) +#{correction} > (#{corrected}) > 成功数#{success}"
143
+ end
144
+
145
+ if correction < 0
146
+ result = "(#{dicetext}) #{correction} > (#{corrected}) > 成功数#{success}"
147
+ end
148
+
149
+ return result
150
+ end
151
+
152
+ # 1D10 ロール用
153
+ def get_table_by_1d10(table)
154
+ dice = @randomizer.roll_once(10)
155
+
156
+ text = table[dice - 1]
157
+
158
+ indexText = (dice - 1).to_s
159
+
160
+ return '1', indexText if text.nil?
161
+
162
+ return text, indexText
163
+ end
164
+
165
+ # D1010 ロール用
166
+ def get_table_by_d1010(table)
167
+ dice1 = @randomizer.roll_once(10)
168
+ dice2 = @randomizer.roll_once(10)
169
+
170
+ num = (dice1 - 1) * 10 + (dice2 - 1)
171
+
172
+ text = table[num]
173
+
174
+ indexText = "#{dice1 - 1}#{dice2 - 1}"
175
+
176
+ return '1', indexText if text.nil?
177
+
178
+ return text, indexText
179
+ end
180
+
181
+ # D510 ロール用
182
+ def get_table_by_d510(table)
183
+ dice1 = @randomizer.roll_once(10)
184
+ dice2 = @randomizer.roll_once(10)
185
+
186
+ num = ((dice1 - 1) / 2) * 10 + (dice2 - 1)
187
+
188
+ text = table[num]
189
+
190
+ indexText = "#{dice1 - 1}#{dice2 - 1}"
191
+
192
+ return '1', indexText if text.nil?
193
+
194
+ return text, indexText
195
+ end
196
+
197
+ # 船名接頭辞表
198
+ def get_shipprefix_table
199
+ table = [
200
+ 'ISS(独立宇宙船)',
201
+ 'PCS(惑星運搬船)',
202
+ 'NSS(中立星間船)',
203
+ 'SMS(星間商船)',
204
+ 'PSS(民間宇宙船)',
205
+ 'CIS(勅許独立船)',
206
+ 'FTS(自由貿易船)',
207
+ 'OES(外縁探検船)',
208
+ 'SSS(主権星間船)',
209
+ 'HMS(陛下の船)'
210
+ ]
211
+ return get_table_by_1d10(table)
212
+ end
213
+
214
+ # 船名前半表
215
+ def get_shipnameformer_table
216
+ table = [
217
+ 'ブラック', 'ホワイト', 'レッド', 'ブルー', 'グリーン', 'パープル', 'ライラック', 'ブラウン', 'シルバー', 'ゴールド',
218
+ 'ネイビー', 'マリン', 'オーシャン', 'アクア', 'セイル', 'アンカー', 'パイレーツ', 'プライヴァティア', 'アルマダ', 'フロティラ',
219
+ 'ギャリソン', 'タンク', 'センチネル', 'スクァッド', 'トループ', 'フロント', 'オフェンシブ', 'ヴァンガード', 'オーダー', 'フラッグ',
220
+ 'ゲイザー', 'アストロ', 'ステラー', 'ギャラクティック', 'スターリー', 'ミルキー', 'プラネタリー', 'ゾディアック', 'ポラリス', 'イクェータ',
221
+ 'アイアンクラッド', 'サイエンス', 'ストーン', 'ソリッド', 'ウッド', 'ストック', 'フロー', 'ブレイズ', 'ディヴァイン', 'グロリアス',
222
+ 'ドラゴン', 'コヨーテ', 'ペガサス', 'カーバンクル', 'ガーゴイル', 'バジリスク', 'フェニックス', 'フェンリル', 'ケルベロス', 'キマイラ',
223
+ 'ジュラフ', 'ディアー', 'ゼブラ', 'ホエール', 'ラクーン', 'キャメル', 'ペンギン', 'リザード', 'サーバル', 'エルク',
224
+ 'フリー', 'ライト', 'リベラル', 'リッチ', 'エコノミー', 'マーケット', 'ナショナル', 'ソーシャル', 'エコロジカル', 'ナチュラル',
225
+ 'ロイヤル', 'プリンシパル', 'インペリアル', 'マジェスティック', 'ノーブル', 'ロード', 'ハイネス', 'デューク', 'カウント', 'バロン',
226
+ 'スモーク', 'クリア', 'ブリザード', 'ゲイル', 'ミスト', 'ヘイル', 'スノウ', 'ライトニング', 'サンダー', '(PC1人の名前)'
227
+ ]
228
+ return get_table_by_d1010(table)
229
+ end
230
+
231
+ # 船名後半表
232
+ def get_shipnamelatter_table
233
+ table = [
234
+ 'ローズ', 'ダンデリオン', 'オーキッド', 'アザリア', 'スウォードリリー', 'アイリス', 'ラベンダー', 'プロテア', 'グラジオラス', 'マグノリア',
235
+ 'ライナー', 'カッター', 'フライター', 'フェリー', 'バルジ', 'クルーザー', 'クラフト', 'リガー', 'キール', 'ヴェッセル',
236
+ 'リミテッド', 'インク', 'マーチャント', 'エクスペディション', 'コンボイ', 'キャラバン', 'コマース', 'レティニュー', 'アドバイザリー', 'コンサルティング',
237
+ 'テレスコープ', 'オブザーバー', 'グラス', 'コスモス', 'ヘブン', 'ノート', 'ロット', 'スペースフェアラー', 'ノマド',
238
+ 'ブローカー', 'ディーラー', 'ダイバー', 'ドライバー', 'アドベンチャラー', 'ランナー', 'ウォーカー', 'トラベラー', 'トレーダー', 'エクスプローラー',
239
+ 'キャット', 'パンサー', 'ライオン', 'ピューマ', 'レオパルド', 'タイガー', 'ジャガー', 'オセロット', 'リンクス', 'チーター',
240
+ 'ウォルフ', 'カメレオン', 'クラブ', 'オスカー', 'シャーク', 'イーグル', 'コンドル', 'ドルフィン', 'サウルス', 'フィッシュ',
241
+ 'コンキスタドール', 'フサリア', 'ナイト', 'コサック', 'ヘタイロイ', 'バーサーカー', 'レギオン', 'ウォリアー', 'テルシオ', 'ライダー',
242
+ 'ルール', 'ディメイン', 'レイン', 'ジャスティス', 'エンクレーブ', 'ステート', 'カントリー', 'レルム', 'ドミニオン', 'ソブリン',
243
+ 'ストーム', 'テンペスト', 'アヴァランチ', 'ストライク', 'フォール', 'クエイク', 'ハリケーン', 'ブラスター', 'ブリザード', '(PC 1人の名前)'
244
+ ]
245
+ return get_table_by_d1010(table)
246
+ end
247
+
248
+ # アバターアルファベット表①
249
+ def get_avataralphabetfirst_table
250
+ table = [
251
+ 'A', 'F', 'G', 'I', 'J', 'K', 'R', 'S', 'T', 'V'
252
+ ]
253
+ return get_table_by_1d10(table)
254
+ end
255
+
256
+ # アバターアルファベット表②
257
+ def get_avataralphabetsecond_table
258
+ table = [
259
+ 'D', 'F', 'L', 'M', 'N', 'O', 'R', 'S', 'X', 'Z'
260
+ ]
261
+ return get_table_by_1d10(table)
262
+ end
263
+
264
+ # ランダムNPC艦
265
+ def get_randomnpcship_table
266
+ table = [
267
+ '装甲+20(HP+400)', '装甲+20(HP+400)', '〈電磁パルスフィールド〉1基', '〈中性粒子ビーム砲〉2基', '〈バリアフィールド〉2基',
268
+ '装甲+20(HP+400)', '装甲+20(HP+400)', '〈電磁パルスフィールド〉1基 〈高機動ミサイル〉2基', '〈バリアフィールド〉2基',
269
+ '装甲+20(HP+400)', '装甲+20(HP+400)', '〈リサイクルフォージ〉', '〈高機動ミサイル〉2基', '〈バリアフィールド〉2基',
270
+ '装甲+20(HP+400)', '装甲+20(HP+400)', '〈リサイクルフォージ〉', '〈高機動ミサイル〉2基', '〈レーザーディフェンス〉2基',
271
+ '装甲+20(HP+400)', '〈ホーミング量子ビーム〉2基', '〈高圧縮精製装置〉', '〈アタックドローン〉1基 〈レーザーディフェンス〉2基',
272
+ '装甲+20(HP+400)', '〈ホーミング量子ビーム〉2基', '〈高圧縮精製装置〉', '〈爆縮高エネルギービーム砲〉2基 〈レーザーディフェンス〉2基',
273
+ '装甲+20(HP+400)', '〈ホーミング量子ビーム〉2基', '〈艦載メタルディテクター〉', '〈マグネティックアロイミサイル〉2基', '〈艦内防護装甲〉',
274
+ '装甲+20(HP+400)', '〈ロングランスミサイル〉2基', '〈「スターブレイカー」のハリボテ〉', '〈ドローンアバター〉1基 装甲+40(HP+800)',
275
+ '装甲+20(HP+400)', '〈ロングランスミサイル〉2基', '〈中性粒子ビーム砲〉2基', '〈拡散粒子ビーム砲〉2基 装甲+40(HP+800)',
276
+ '装甲+20(HP+400)', '〈ロングランスミサイル〉2基', '〈中性粒子ビーム砲〉2基', '〈マイクロミサイルポッド〉2基', '装甲+40(HP+800)'
277
+ ]
278
+ return get_table_by_d510(table)
279
+ end
280
+
281
+ # ランダムイベント表
282
+ def get_randomevent_table
283
+ table = [
284
+ # 0
285
+ '燃料1 《周辺探索》成功数0~1では推進剤[1D10×30]獲得', '燃料1 《周辺探索》成功数0~1では推進剤[1D10×30]獲得', '燃料1 《周辺探索》成功数0~1では推進剤[1D10×30]獲得', '燃料1 《周辺探索》成功数0~1では推進剤[1D10×30]獲得', '燃料1 《周辺探索》成功数0~1では推進剤[1D10×30]獲得', '鋼材1 《周辺探索》成功数0~1では鋼材[1D10×30]獲得', '鋼材1 《周辺探索》成功数0~1では鋼材[1D10×30]獲得', '鋼材1 《周辺探索》成功数0~1では鋼材[1D10×30]獲得', '鋼材1 《周辺探索》成功数0~1では鋼材[1D10×30]獲得', '鋼材1 《周辺探索》成功数0~1では鋼材[1D10×30]獲得',
286
+ # 1
287
+ '鋼材1 《周辺探索》成功数0~1では鋼材[1D10×30]獲得', '鋼材1 《周辺探索》成功数0~1では鋼材[1D10×30]獲得', '巨大暗黒星雲 この星系ではビーム属性の攻撃の判定で達成値-1', '超新星残骸 この星系では実体弾属性の攻撃の判定で達成値-1', 'C型アステロイド 推進剤400を獲得', '氷のアステロイド群 推進剤500を獲得', '巨大アイスブロック 推進剤600を獲得', '資源アステロイド 推進剤200、鋼材200を獲得', '枯渇彗星核 実体弾攻撃でダメージ200を出すと推進剤600を獲得', '放棄されたドローン 鋼材200、希少金属1を獲得',
288
+ # 2
289
+ '金属塊 鋼材300を獲得', 'S型アステロイド 鋼材400を獲得', 'S型アステロイド 鋼材400を獲得', 'スペースデブリ 鋼材500を獲得', 'スペースデブリ 鋼材500を獲得', 'M型アステロイド 鋼材600を獲得', '艦船の残骸 鋼材700を獲得', '大資源アステロイド 推進剤300、鋼材300を獲得', '小惑星の欠片 ビーム攻撃でダメージ200を出すと鋼材600を獲得', '希少金属アステロイド 希少金属2を獲得',
290
+ # 3
291
+ '砕けた惑星核 希少金属3を獲得', '燃料1 《周辺探索》成功数0~1では推進剤[1D10×30]獲得', '燃料1 《周辺探索》成功数0~1では推進剤[1D10×30]獲得', '燃料1 《周辺探索》成功数0~1では推進剤[1D10×30]獲得', '燃料1 《周辺探索》成功数0~1では推進剤[1D10×30]獲得', '鋼材1 《周辺探索》成功数0~1では鋼材[1D10×30]獲得', '鋼材1 《周辺探索》成功数0~1では鋼材[1D10×30]獲得', '鋼材1 《周辺探索》成功数0~1では鋼材[1D10×30]獲得', '氷のアステロイド群 推進剤500を獲得', '巨大アイスブロック 推進剤600を獲得',
292
+ # 4
293
+ '大資源アステロイド 推進剤300、鋼材300を獲得', '氷火山アステロイド 推進剤300、希少金属1を獲得', 'オーガニックアステロイド 推進剤700を獲得', '金属塊 鋼材300を獲得', 'スペースデブリ 鋼材500を獲得', 'M型アステロイド 鋼材600を獲得', '放棄されたモジュール 鋼材300、希少金属1を獲得', '砕けた惑星核 希少金属3を獲得', 'レアアースアステロイド 希少金属4を獲得', 'レアアースアステロイド 希少金属4を獲得'
294
+ ]
295
+ return get_table_by_d510(table)
296
+ end
297
+
298
+ # お宝特徴表
299
+ def get_treasurespec_table
300
+ table = [
301
+ '恐竜を模した(価値+3)', 'ヘビを模した(価値+1)', '魚を模した(価値+1)', 'イヌを模した(価値+1)', 'ウマを模した(価値+1)', 'ネズミを模した(価値+1)', 'ウサギを模した(価値+1)', 'クマを模した(価値+1)', 'ネコを模した(価値+1)', '鳥を模した(価値+2)',
302
+ '触り心地の良い(価値+1)', 'ふかふかした(価値+1)', 'ふわふわの', '柔らかな', 'なめらかな', 'かすかに震える', 'とげとげした', '硬質な', 'ザラッとした', '持ちやすい(価値+1)',
303
+ '美しい(価値+1)', 'きれいな', '麗しの(価値+1)', '華美な', '派手な', 'ほのかに発光する', '色とりどりの', '鮮やかな', '変化に富む', '可憐な(価値+1)',
304
+ 'しゃべる(価値+1)', '泣き声がする', '鳴き声がする', '歌が聞こえる(価値+1)', '音を吸い込む', '静寂の', '聞き上手の', '良い音の', '共鳴する', '響きの良い(価値+1)',
305
+ 'おいしい匂いがする(価値+1)', '血の匂いがする', '動物の匂いがする', '草いきれの匂いがする', '上品な香りがする(価値+1)', '目の醒める匂いがする', '甘い匂いがする', '柑橘系の香りがする', '清冽な香りがする', '安らぎの香りがする(価値+1)',
306
+ '好意を感じさせる(価値+1)', '痛みを感じさせる', '怒りを感じさせる', '苦悶を感じさせる', '弱さを感じさせる', '癒やしを感じさせる(価値+1)', '母性を感じさせる', '優しさを感じさせる', '力強さを感じさせる', '年月を感じさせる(価値+1)',
307
+ '洗練された(価値+1)', 'とろけるような', '不安定な', 'まろやかな', '穏やかな', '柔和な', 'オーガニックな(価値+1)', 'ストイックな', 'シンプルな', 'ナチュラルな(価値+1)',
308
+ '気高き(価値+1)', '艶やかな', '気取った', '気位の高い', 'リッチな', '気品漂う', '高潔な', '格調高い(価値+1)', '典雅な', 'ロイヤルな(価値+1)',
309
+ '闇に溶けるような(価値+1)', '血塗られた', '片翼の', '円環の', '「機関」の', 'オッドアイの', '片目の', '堕天使の', '二重人格の(価値+1)', '輝きを纏う(価値+1)',
310
+ '秘密を持つ(価値+2)', 'いわく付きの(価値+1)', '歴史ある(価値+1)', '奪い合われた(価値+1)', '受け継がれた(価値+1)', '失われた文化の(価値+1)', '謎に満ちた(価値+1)', '廃墟で見つかった(価値+1)', 'あのシリーズの1つ(価値+1)', '寵愛を受けた(価値+3)'
311
+ ]
312
+ return get_table_by_d1010(table)
313
+ end
314
+
315
+ # お宝形容表
316
+ def get_treasureappearance_table
317
+ table = [
318
+ 'ブレスト(価値+3)', 'ホーリー(価値+1)', 'ワンダフル(価値+1)', 'シャイニング(価値+1)', 'スーパー(価値+1)', 'エクセレント(価値+1)', 'グロリアス(価値+1)', 'グレート(価値+1)', 'フラワリー(価値+1)', 'ミラクル(価値+2)',
319
+ 'アース(価値+1)', 'サバンナ(価値+1)', 'マウンテン', 'リバー', 'フォレスト', 'ジャングル', 'デザート', 'ハイランド', 'レイク', 'オーシャン(価値+1)',
320
+ 'スペース(価値+1)', 'コスモ', 'ワールド(価値+1)', 'ユニバーサル', 'スカイ', 'メテオール', 'コメット', 'ルナティック', 'プラネタリー', 'ステラー(価値+1)',
321
+ 'アンティーク(価値+1)', 'エンシェント', 'オールド', 'エルダー(価値+1)', 'カスタム', 'レーテスト', 'アバンギャルド', 'アドバンスト', 'カティングエッジ', 'フューチャー(価値+1)',
322
+ 'ダーク(価値+1)', 'ソイル', 'ウォーター', 'アイス', 'フィジカル(価値+1)', 'マインド', 'フレイム', 'ウィンド', 'サンダー', 'ライト(価値+1)',
323
+ '闇の(価値+1)', '土の', '水の', '氷の', '物理', '心の(価値+1)', '炎の', '風の', '雷の', '光の(価値+1)',
324
+ '骨董品の(価値+1)', 'いにしえの', '古き', '長老の', '特注', '最新型', '前衛的(価値+1)', '発展的', '先進的', '未来的(価値+1)',
325
+ '宇宙(価値+1)', '乾坤', '世界', '森羅万象', '空の', '流星の', '隕石の', '月の(価値+1)', '惑星', '星の(価値+1)',
326
+ '大地の(価値+1)', '草原の', '山の', '川の', '森の', '林の', '砂漠の', '高地の', '湖の(価値+1)', '海の(価値+1)',
327
+ '祝福の(価値+2)', '神聖な(価値+1)', '不思議な(価値+1)', '輝かしい(価値+1)', '超(価値+1)', '素晴らしい(価値+1)', '栄光の(価値+1)', '偉大な(価値+1)', '華の(価値+1)', '奇跡の(価値+3)'
328
+ ]
329
+ return get_table_by_d1010(table)
330
+ end
331
+
332
+ # お宝外見表
333
+ def get_treasurematerial_table
334
+ table = [
335
+ 'ダイヤモンド(価値+3)', 'ジェイド(価値+1)', 'エメラルド(価値+1)', 'トパーズ(価値+1)', 'サファイア(価値+1)', 'ルビー(価値+1)', 'ガーネット(価値+1)', 'ラピスラズリ(価値+1)', 'アメジスト(価値+1)', 'スモーキークォーツ(価値+2)',
336
+ 'ゴールデン(価値+1)', 'チタン(価値+1)', 'ブリキの', 'アイアン', 'スチール', '真鍮の', 'ブロンズ', 'カッパー', 'シルバー', 'プラチナ(価値+1)',
337
+ 'マーブル(価値+1)', 'グラナイト', 'オブシディアン(価値+1)', 'スレート', 'ライムストーン', 'ガラス', 'リネン', 'ビロード', 'コットン', 'シルク(価値+1)',
338
+ 'セラミック(価値+1)', 'プラスチック', 'レンガの', 'カーボン(価値+1)', 'コンクリート', 'クォーツの', 'オークの', 'レッドウッド', 'スプルースの', 'マホガニーの(価値+1)',
339
+ 'ブラック(価値+1)', 'オレンジ', 'グレー', 'ブルー', 'マジェンタ(価値+1)', 'グリーン', 'レッド', 'パープル', 'イエロー', 'ホワイト(価値+1)',
340
+ '黒い(価値+1)', '橙の', '灰色の', '青い', 'インディゴ', '緑の(価値+1)', '赤い', '紫の', '黄色い', '白い(価値+1)',
341
+ '磁器の(価値+1)', '陶器の', '粘土の', '紙の', '石膏の', '水晶の', 'チークの(価値+1)', 'ヒノキの', '杉の', 'ウォルナット(価値+1)',
342
+ '大理石の(価値+1)', '御影石の', '黒曜石の', '粘板岩の', '石灰岩の', '玻璃の', '麻の', '天鵞絨の(価値+1)', '綿の', '絹の(価値+1)',
343
+ '黄金の(価値+1)', 'アルミニウム', '錫の', '鉄の', '鋼鉄の', '鉛の', '青銅の', '銅の', '銀の(価値+1)', '白金の(価値+1)',
344
+ '金剛石の(価値+2)', '翡翠の(価値+1)', '翠玉の(価値+1)', '黄玉の(価値+1)', '蒼玉の(価値+1)', '紅玉の(価値+1)', '紅榴石の(価値+1)', '瑠璃の(価値+1)', '紫水晶の(価値+1)', '煙水晶の(価値+3)'
345
+ ]
346
+ return get_table_by_d1010(table)
347
+ end
348
+
349
+ # お宝物品表
350
+ def get_treasureobject_table
351
+ table = [
352
+ 'フルート(価値+3)', 'オカリナ(価値+1)', 'ギター(価値+1)', 'ピアノ(価値+1)', 'ドラム(価値+1)', 'ティンパニー(価値+1)', '太鼓(価値+1)', 'トランペット(価値+1)', 'ハープ(価値+1)', 'マイク(価値+2)',
353
+ 'ブランコ(価値+1)', '人形(価値+1)', 'シーソー', 'ベンチ', 'すべり台', 'ラケット', 'ミニカー', 'コースター', 'ボール', 'オーブ(価値+1)',
354
+ '皿(価値+1)', 'プレート', 'ティーセット(価値+1)', '箸', 'フォーク', 'スプーン', 'ナイフ', 'フライパン', '鍋', 'カップ(価値+1)',
355
+ '王冠(価値+1)', '櫛', 'イヤリング', '首飾り(価値+1)', '腕輪', '指輪', 'ブローチ', 'サークレット', 'チョーカー', '羽飾り(価値+1)',
356
+ 'ロッド(価値+1)', 'ウィップ', 'ハンマー', 'アックス', 'ブレイド(価値+1)', 'セイバー', 'シールド', 'クラブ', 'ランス', 'ソード(価値+1)',
357
+ '錫杖(価値+1)', '鞭', '槌', '斧', '刃', '刀(価値+1)', '盾', '棍棒', '槍', '剣(価値+1)',
358
+ '扇(価値+1)', 'ボトル', '燭台', 'ペン', '仮面', 'バッグ', '時計(価値+1)', '傘', '徽章', '鏡(価値+1)',
359
+ 'スマートドレス(価値+1)', 'タッチパネル', 'インプットグローブ', 'プロジェクター', 'ディテクター', 'アナライザー', 'インジェクター', 'エアーボトル(価値+1)', 'ワイヤーロンチャー', 'ジェットパック(価値+1)',
360
+ 'ランプ(価値+1)', 'ドア', '窓', '灯籠', '棚', 'キッチン', 'ソファ', '椅子', 'テーブル(価値+1)', 'ベッド(価値+1)',
361
+ '人物像(価値+2)', 'フィギュア(価値+1)', 'モデル(価値+1)', '植物像(価値+1)', '動物像(価値+1)', 'レリーフ(価値+1)', 'オブジェ(価値+1)', 'ドーム(価値+1)', 'タペストリー(価値+1)', '絵画(価値+3)'
362
+ ]
363
+ return get_table_by_d1010(table)
364
+ end
365
+
366
+ # 超未来の技術
367
+ def get_sftechnology_table
368
+ table = [
369
+ '船の種、家の種、ビルの種:発達したバイオテクノロジーにより、光合成をしながらカーボン製品を作り出す「種」が作られました。土に植えると一軒家に育ったり、立派な木になってコップの実をならせたりします。',
370
+ 'ワープリング:星と星の間を結ぶ空間のトンネルを作り出すのが、「ワープリング」です。中に入ると超光速で空間が周回しており、数時間から数日で数光年先の星に辿り着くことができます。',
371
+ '擬似重力発生装置:超未来の宇宙船や宇宙ステーションでは、回転による遠心力などを活用して、擬似的に床に引っ張られる力を発生させています。パラメーターを変えれば、物の重さも体重も思いのままです。',
372
+ 'アニマフォーム:ファブリックやマイクロマシンを使って作った人工の「動物」に、ネットワーク接続して「乗り移る」技術です。動物の姿で動物になりきって、自然の中を探索できます。',
373
+ 'スマートテクスタイル:布やロープが自由自在に動きます。カーボンナノチューブなどの導電性の素材を織り込むことで繊維自体が電子機器として稼働・変形し、ボタンのセンサーと連動して様々な機能を果たします。',
374
+ 'パーソナルバリア:人間の周囲を囲うバリアーで、身体の各所に付けた発生機から生まれた電磁フィールドが宇宙空間を飛び交う危険な宇宙線を防いでくれます。船外活動には必須の装備です。',
375
+ 'フィンガーティップデザイン:指と手首を動かしながら頭の中でイメージを作ることで、あっという間に3D のデザインを作成できます。超未来は「繊維やケーブルが動く」ため、モノ作りがかなり複雑になっているのです。',
376
+ 'ジェットパック:個人用の強力なジェット噴射機で、誰でも空に飛び上がることができます。長く使っていると高熱を発するので注意。宇宙空間では、これとスマートワイヤーを組み合わせて移動に使います。',
377
+ 'メンタルプロジェクション:ヒトの心は、様々な価値観や性格が溶け合う複層的なもの。その複雑な姿を脳波投影で視界に映して、心の整理を付けやすくする技術です。しばしば「天使と悪魔」のビジュアルを付けます。',
378
+ 'スライムソファ:球体状の大きなソファで、ポリマーとカーボン素材でできており、自在に変形させたり柔らかさを変えたりできます。床や壁に吸着してくれるため、無重力空間では身体を固定してくれます。'
379
+ ]
380
+ return get_table_by_1d10(table)
381
+ end
382
+
383
+ # 超未来のエンタメ
384
+ def get_sfentertainment_table
385
+ table = [
386
+ 'ホロシアター:劇場いっぱいにホログラムを展開して、広大な大地や美しい空の上などで大冒険のスペクタクルショーを「その場にいるような」臨場感で楽しむことができます。',
387
+ 'アバターファイト!:手の平サイズの小型の人型アバターを思念で操って、ドームの中でバトルを楽しみます。フィールドはホログラム生成で、ビームやミサイルもホログラム再現なので、損傷の心配はありません。',
388
+ 'VRゲーム:外接電脳さえ持っていれば、VR ゴーグルがなくても仮想現実世界にダイブできます。圧倒的なリアリティを持つ仮想世界を堪能し、育成や対戦、パズルなど様々なゲームを楽しめます。',
389
+ 'ハイド・アンド・シーク:惑星全域を舞台にしたかくれんぼです。第七感覚をフル活用して都市の全域を見て回り、ときには動物たちからも情報を集めながら、この星のどこかにいる鬼を見つけ出しましょう。',
390
+ 'アロマバス:リラックスできる香りがいっぱいのお湯に浸かって、心身を癒やします。神経に疲れが溜まる超未来。ハーブの香りを思い切り吸い込んで、緊張を溶きほぐします。',
391
+ 'ロジックパズル:外接電脳をフル活用しないと解けないような、難解なパズルに挑戦します。一見すると無関係な2つの要素を組み合わせることで、意外な手がかりが見つかります。',
392
+ 'ホロアスレチック:コンクリートや植物性ビルなどを使って組み立てた殺風景なアスレチックを、ホログラムで美しくダイナミックに彩ります。超未来人の高い運動能力を存分に発揮できます。',
393
+ 'スカイレース:超未来なので人は空を飛べます。トリブリードは自前の翼で、そうでなくても自分で設計したグライダーなどで、空中にホロ投影されるリングを通過しながら、複雑なコースを高速で飛びます。',
394
+ 'ミステリーハウス:宝探しや事件解決など、規定時間以内に「謎」を解くイベントです。屋敷の中には手がかりが散りばめられており、VRでもリアルでも手軽に探偵遊びを楽しむことができます。',
395
+ 'SNS:超未来のSNS は濃密にして苛烈!超高速でやり取りが行いながら、惑星の多くの人々と触れ合い交流を深めます。惑星ごとの微妙な文化の違いに注意を払いましょう。'
396
+ ]
397
+ return get_table_by_1d10(table)
398
+ end
399
+
400
+ # 超未来の文化
401
+ def get_sfculture_table
402
+ table = [
403
+ 'リスペクト・ユー:超未来の社会では、他人に対する「リスペクト」が何より大事にされています。見てもらうこと、尊敬されることを目指して、今日も人々はSNSで活動したり、働いたりします。',
404
+ 'マインドミュージック:手を振るうことで感情を音色にする未来的な音楽です。VRやホログラフィと組み合わせれば映像効果も付き、思うままに自分の心から湧き出る音楽を演奏することができます。',
405
+ 'レプロドュィーユ:オペラやバレエ、歌舞伎、ミュージカルといった歌劇の血筋を引いた文化です。物語や歴史の登場人物になりきって、身体の動きを正確に制御しつつ音楽を演奏して全身で表現を行います。',
406
+ '物語:小説やアニメムービーなど、誰かが紡いだ物語を追体験します。星系によって異なる文化、異なるトレンドを持っているので、その違いもまた楽しめます。',
407
+ 'Deep in myself:深い瞑想をします。静かな落ち着いた空間でゆっくりと精神を集中し、自分の心の中に潜るように意識の状態を変容させ、マインドフルネスを達成します。',
408
+ 'ファッションコーデ:自然派やロマン風、モノトーンなど、統一感あるファッションは気品を感じさせます。今日のテーマはどうしましょうか。お部屋の家具も変形して、同じ系統にコーディネートしましょう。',
409
+ '美術品:超未来の絵画や彫刻は、動きます。内部のカーボンナノファイバーやナノマシンが変形することで、あらかじめ制作者がプログラムした動きやインタラクティブな動きを繰り返します。',
410
+ 'ガーデニング:平たい土地に植物や柵、椅子や机などの種を植えて、美しい庭を造成します。惑星ごとに異なる気候に適応した様々な固有種を使って、その惑星ならではの花の彩りを演出しましょう。',
411
+ 'お料理!:超未来の合成肉や促成栽培野菜などを使って、舌を楽しませるおいしい料理を作りましょう。調理器具は3Dプリンターやクローナイフ、調味料は塩や砂糖、マイクロマシンに香辛料などです。',
412
+ 'シリコンオフィス:角張ったオフィス机やタイムカードなど超未来の世界では絶滅しました。人々は家からでも公園からでも木の上や洞窟の中からでもワークに参加しますし、趣味と労働の区別を付けません。'
413
+ ]
414
+ return get_table_by_1d10(table)
415
+ end
416
+
417
+ # 超未来の自然
418
+ def get_sfnature_table
419
+ table = [
420
+ 'アニマルハート:動物たちの鳴き声の意味を解読し、また脳波分析を組み合わせることで、高等知能動物たちとある程度の意思疎通ができます。共通の話題は天気の話や景色の話、それにコイバナなど。',
421
+ 'キャンプ:野外で夜を越すときは、キャンプをします。スマートテクスタイルを広げて雨風を避けるテントを作り、虫や鳥の鳴き声を聞きながら星空を眺めて一晩を過ごします。',
422
+ 'ミネラルウォーター:テラフォーミングした惑星の海は、元の惑星のミネラル組成によって成分がだいぶ違ってきます。それほどしょっぱくない海もあれば、赤や緑っぽい海もあり。生息する魚等もまったく違います。',
423
+ 'レイクサイド:クレーター等起伏のある地形に水が溜まってできた湖は、山裾の木々を鏡面のように反射して美麗な風景を作り出しています。中心部上層の澄んだ水は、簡単に浄化すれば飲み水にもできます。',
424
+ '固有種:惑星に導入した動植物は、その惑星の環境に合わせて急速に独自の進化を遂げます。やたらにふわふわしたネコ科動物や雪の上に育つスノードロップ、転がって移動するアルマジロなどなど。',
425
+ '枯れ草集め:都市部を離れると、エネルギー源はバイオ燃料に頼ることになります。地球以外の惑星には、基本的に石油や石炭など存在しません。燃料生成に使えそうな草木を集めましょう。',
426
+ '山に進め:ジェットパックやスマートワイヤーがあるといっても、特に重力が強い惑星では高いところで大気が薄くなりやすく、山登りは大変なもの。しかしその分、山の上からの眺めは絶景です。',
427
+ 'スカイハイ・ビュー:自然の環境ですばやく移動するには、グライダーや翼を使って滑空するのが手っ取り早いです。高い木や丘に上ってからジェットパック併用で舞い上がれば、空からの美しい景観も楽しめます。',
428
+ '道なき森の道:惑星を覆う森の中には、基本的に整備された道はありません。空を見上げれば陽の光を遮る樹の冠。草をかき分け、花や草いきれの臭いを感じながら、ときには木の上を通って、先に進みます。',
429
+ 'テラフォーミング:この銀河で、地球以外のすべての惑星はヒトが入植するために「テラフォーミング」したものです。水と大気を形成し、植物を育て、動物たちを導入し、長い年月を経て現在の姿になりました。'
430
+ ]
431
+ return get_table_by_1d10(table)
432
+ end
433
+
434
+ # 超未来の宇宙船内
435
+ def get_sfinterior_table
436
+ table = [
437
+ '甲板上でお茶を:狭い宇宙船に飽きてきたら、甲板の上に出て無限に広がる宇宙を感じることもできます。気圧0なので圧力ポットで持ってくる必要がありますが、星空を眺めながら飲むお茶は乙なものです。',
438
+ 'マイクロマシン隔壁:宇宙船の隔壁はメタルナノカーボンやナノスチールでできていますが、補修のためにマイクロマシンが住んでいます。ときどき壁の端がちらちら動いて見えるのも、彼らのためかもしれません。',
439
+ 'ダンベル100kg持てる:惑星環境と比べれば、宇宙船の擬似重力はどうしても弱くなるもの。筋力の衰えを防ぐために、部屋にトレーニングマシンを生成して筋トレをします。適度な負荷をかけましょう。',
440
+ 'ユリカゴ:宇宙船に乗っている間は、多くの時間を宇宙船の居住スペース兼コントロールルームである「ユリカゴ」で過ごすことになります。たまにはホログラフィックで模様替えして気分を変えます。',
441
+ '宇宙農法:数週間に渡る宇宙の旅では、食べ物や水は船内で育てます。マゼンダ色のLED ライトで植物やユーグレナを促成栽培し、バイオプラントでエネルギーゼリーを合成します。',
442
+ 'メンテナンス:宇宙船は数多くのパーツでできているため、どこかが不具合や故障を起こすこともあります。基本的に自動制御で管理できますが、自分の目と外接電脳でもチェックを入れてみましょう。',
443
+ '重力のムラ:宇宙船は擬似重力発生装置を持っており、床に足が付きますが、場所によって「重力」にムラがあります。身体が重いと感じたら、部屋の隅に行けば軽くなるかもしれません。',
444
+ 'ワープ酔い:ワープ航法は空間の歪みを利用します。装甲が最も厚いユリカゴの中でも、ワープリングを出入りするときはグラっとくる感触があります。気分が悪くなったら、おとなしく寝ていましょう。',
445
+ '1日25時間:宇宙船に「昼夜」はないため、照明を人工的に調整して生活サイクルを作ります。どうせ惑星ごとに1日の長さは違うので、24時間にこだわる必要はありません。自由に決めます。',
446
+ 'スターリー・スカイ:惑星の明かりも大気もない宇宙船の上からは、星空を鮮やかに見ることができます。当然、星によって天球図も違います。月が2つや4つあったり、連星が見られたりします。'
447
+ ]
448
+ return get_table_by_1d10(table)
449
+ end
450
+ end
451
+ end
452
+ end
@@ -0,0 +1,103 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class StrangerOfSwordCity < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'StrangerOfSwordCity'
8
+
9
+ # ゲームシステム名
10
+ NAME = '剣の街の異邦人TRPG'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'けんのまちのいほうしんTRPG'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
17
+ ・判定 xSR or xSRy or xSR+y or xSR-y or xSR+y>=z
18
+  x=ダイス数、y=修正値(省略可、±省略時は+として扱う)、z=難易度(省略可)
19
+  判定時はクリティカル、ファンブルの自動判定を行います。
20
+ ・通常のnD6ではクリティカル、ファンブルの自動判定は行いません。
21
+ ・D66ダイスあり
22
+ INFO_MESSAGE_TEXT
23
+
24
+ register_prefix(['\d+SR.*'])
25
+
26
+ def initialize(command)
27
+ super(command)
28
+
29
+ @sort_add_dice = true
30
+ @enabled_d66 = true
31
+ @d66_sort_type = D66SortType::NO_SORT
32
+ @round_type = RoundType::FLOOR
33
+ end
34
+
35
+ def eval_game_system_specific_command(command)
36
+ debug('eval_game_system_specific_command command', command)
37
+
38
+ command = command.upcase
39
+
40
+ result = checkRoll(command)
41
+ return result unless result.empty?
42
+
43
+ return result
44
+ end
45
+
46
+ def checkRoll(command)
47
+ debug("checkRoll begin command", command)
48
+
49
+ result = ''
50
+ return result unless command =~ /^(\d+)SR([\+\-]?\d+)?(>=(\d+))?$/i
51
+
52
+ diceCount = Regexp.last_match(1).to_i
53
+ modify = Regexp.last_match(2).to_i
54
+ difficulty = Regexp.last_match(4).to_i if Regexp.last_match(4)
55
+
56
+ diceList = @randomizer.roll_barabara(diceCount, 6).sort
57
+ dice = diceList.sum()
58
+
59
+ totalValue = (dice + modify)
60
+ modifyText = getModifyText(modify)
61
+ result += "(#{command}) > #{dice}[#{diceList.join(',')}]#{modifyText} > #{totalValue}"
62
+
63
+ criticalResult = getCriticalResult(diceList)
64
+ unless criticalResult.nil?
65
+ result += " > クリティカル(+#{criticalResult}D6)"
66
+ return result
67
+ end
68
+
69
+ if isFumble(diceList, diceCount)
70
+ result += ' > ファンブル'
71
+ return result
72
+ end
73
+
74
+ unless difficulty.nil?
75
+ result += totalValue >= difficulty ? ' > 成功' : ' > 失敗'
76
+ end
77
+
78
+ return result
79
+ end
80
+
81
+ def getModifyText(modify)
82
+ return "" if modify == 0
83
+ return modify.to_s if modify < 0
84
+
85
+ return "+#{modify}"
86
+ end
87
+
88
+ def getCriticalResult(diceList)
89
+ dice6Count = diceList.select { |i| i == 6 }.size
90
+
91
+ if dice6Count >= 2
92
+ return dice6Count.to_s
93
+ end
94
+
95
+ return nil
96
+ end
97
+
98
+ def isFumble(diceList, diceCount)
99
+ (diceList.select { |i| i == 1 }.size >= diceCount)
100
+ end
101
+ end
102
+ end
103
+ end