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,135 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class WorldOfDarkness < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'WorldOfDarkness'
8
+
9
+ # ゲームシステム名
10
+ NAME = 'ワールド・オブ・ダークネス'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'わあるとおふたあくねす'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
17
+ ・判定コマンド(xSTn+y or xSTSn+y or xSTAn+y)
18
+  (ダイス個数)ST(難易度)+(自動成功)
19
+  (ダイス個数)STS(難易度)+(自動成功) ※出目10で振り足し
20
+  (ダイス個数)STA(難易度)+(自動成功) ※出目10は2成功 [20thルール]
21
+
22
+  難易度=省略時6
23
+  自動成功=省略時0
24
+ INFO_MESSAGE_TEXT
25
+
26
+ register_prefix(['\d+ST.*'])
27
+
28
+ def initialize(command)
29
+ super(command)
30
+ @successDice = 0
31
+ @botchDice = 0
32
+ @rerollDice = 0
33
+ end
34
+
35
+ def eval_game_system_specific_command(command)
36
+ diff = 6
37
+ auto_success = 0
38
+
39
+ enabled_reroll = false
40
+ enabled_20th = false
41
+
42
+ md = command.match(/\A(\d+)(ST[SA]?)(\d+)?([+-]\d+)?/)
43
+
44
+ dice_pool = md[1].to_i
45
+ case md[2]
46
+ when 'STS'
47
+ enabled_reroll = true
48
+ when 'STA'
49
+ enabled_20th = true
50
+ end
51
+ diff = md[3].to_i if md[3]
52
+ auto_success = md[4].to_i if md[4]
53
+
54
+ diff = 6 if diff < 2
55
+
56
+ sequence = []
57
+ sequence.push "DicePool=#{dice_pool}, Difficulty=#{diff}, AutomaticSuccess=#{auto_success}"
58
+
59
+ # 出力では Difficulty=11..12 もあり得る
60
+ diff = 10 if diff > 10
61
+
62
+ total_success = auto_success
63
+ total_botch = 0
64
+
65
+ dice, success, botch, auto_success = roll_wod(dice_pool, diff, true, enabled_20th ? 2 : 1)
66
+ sequence.push dice.join(',')
67
+ total_success += success
68
+ total_botch += botch
69
+
70
+ if enabled_reroll
71
+ # 振り足し
72
+ while auto_success > 0
73
+ dice_pool = auto_success
74
+ # 振り足しの出目1は大失敗ではない
75
+ dice, success, botch, auto_success = roll_wod(dice_pool, diff, false)
76
+ sequence.push dice.join(',')
77
+ total_success += success
78
+ total_botch += botch
79
+ end
80
+ end
81
+
82
+ if total_success > 0
83
+ sequence.push "成功数#{total_success}"
84
+ elsif total_botch > 0
85
+ sequence.push "大失敗"
86
+ else
87
+ sequence.push "失敗"
88
+ end
89
+
90
+ output = sequence.join(' > ')
91
+ return output
92
+ end
93
+
94
+ # Revised Edition
95
+ # 出目10は1自動成功 振り足し
96
+ # 出目1は大失敗: 成功を1つ相殺
97
+ def roll_wod(dice_pool, diff, enabled_botch = true, auto_success_value = 1)
98
+ # FIXME: まとめて振る
99
+ dice = Array.new(dice_pool) do
100
+ dice_now = @randomizer.roll_once(10)
101
+ dice_now
102
+ end
103
+
104
+ dice.sort!
105
+
106
+ success = 0
107
+ botch = 0
108
+ auto_success = 0
109
+
110
+ dice.each do |d|
111
+ case d
112
+ when 10
113
+ auto_success += auto_success_value
114
+ when diff..10
115
+ success += 1
116
+ when 1
117
+ botch += 1 if enabled_botch
118
+ end
119
+ end
120
+
121
+ # 自動成功を成功に加算する
122
+ success += auto_success
123
+
124
+ if enabled_botch
125
+ # 成功と大失敗を相殺する
126
+ c = [success, botch].min
127
+ success -= c
128
+ botch -= c
129
+ end
130
+
131
+ return dice, success, botch, auto_success
132
+ end
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,440 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bcdice/dice_table/table"
4
+ require "bcdice/dice_table/d66_table"
5
+
6
+ module BCDice
7
+ module GameSystem
8
+ class YankeeYogSothoth < Base
9
+ # ゲームシステムの識別子
10
+ ID = 'YankeeYogSothoth'
11
+
12
+ # ゲームシステム名
13
+ NAME = 'ヤンキー&ヨグ=ソトース'
14
+
15
+ # ゲームシステム名の読みがな
16
+ SORT_KEY = 'やんきいあんとよくそとおす'
17
+
18
+ # ダイスボットの使い方
19
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
20
+ ・判定
21
+ スペシャル/ファンブル/成功/失敗を判定
22
+ ・各種表
23
+ ※うろつき~決闘フェイズ
24
+ FT ファンブル表
25
+ WT 変調表
26
+ RTT ランダム特技決定表
27
+ KKT 関係表
28
+ DBRT 他愛のない会話表
29
+ TKT 戦う理由表
30
+
31
+ ※武勇伝フェイズ
32
+ BUDT 武勇伝表
33
+ GUDT ガイヤンキー武勇伝表
34
+ FTNT 二つ名決定表
35
+ DAIT 第一印象表
36
+ TKKT ツレ関係表
37
+
38
+ ※帰還フェイズ
39
+ GSST 現実世界生活表
40
+ GYST ガイヤンキー生活表
41
+ HPST 病院生活表
42
+ ・D66ダイスあり
43
+ INFO_MESSAGE_TEXT
44
+
45
+ def initialize(command)
46
+ super(command)
47
+ @enabled_d66 = true
48
+ @d66_sort_type = D66SortType::ASC
49
+ end
50
+
51
+ # ゲーム別成功度判定(2D6)
52
+ def check_2D6(total, dice_total, _dice_list, cmp_op, target)
53
+ return '' if target == '?'
54
+ return '' unless cmp_op == :>=
55
+
56
+ if dice_total <= 2
57
+ " > ファンブル(判定失敗。ファンブル表(FT)を振ること)"
58
+ elsif dice_total >= 12
59
+ " > スペシャル(判定成功。【テンション】が1段階上昇)"
60
+ elsif total >= target
61
+ " > 成功"
62
+ else
63
+ " > 失敗"
64
+ end
65
+ end
66
+
67
+ def eval_game_system_specific_command(command)
68
+ roll_tables(command, TABLES)
69
+ end
70
+
71
+ NICKNAME_TABLE1 = DiceTable::D66Table.new(
72
+ '二つ名表1',
73
+ D66SortType::ASC,
74
+ {
75
+ 11 => '「愛死天流(あいしてる)」',
76
+ 12 => '「喧嘩上等(けんかじょうとう)」',
77
+ 13 => '「正々堂々(せいせいどうどう)」',
78
+ 14 => '「天下無敵(てんかむてき)」',
79
+ 15 => '「一騎当千(いっきとうせん)」',
80
+ 16 => '「威風堂々(いふうどうどう)」',
81
+ 22 => '「焼肉定食(やきにくていしょく)」',
82
+ 23 => '「完全無欠(かんぜんむけつ)」',
83
+ 24 => '「獅子奮迅(ししふんじん)」',
84
+ 25 => '「臥薪嘗胆(がしんしょうたん)」',
85
+ 26 => '「疾風迅雷(しっぷうじんらい)」',
86
+ 33 => '「夜露死苦(よろしく)」',
87
+ 34 => '「天上天下(てんじょうてんげ)」',
88
+ 35 => '「唯我独尊(ゆいがどくそん)」',
89
+ 36 => '「電光石火(でんこうせっか)」',
90
+ 44 => '「仏恥義理(ぶっちぎり)」',
91
+ 45 => '「百戦百勝(ひゃくせんひゃくしょう)」',
92
+ 46 => '「百戦錬磨(ひゃくせんれんま)」',
93
+ 55 => '「残酷非道(ざんこくひどう)」',
94
+ 56 => '「一意専心(いちいせんしん)」',
95
+ 66 => '「時給千円(じきゅうせんえん)」'
96
+ }
97
+ )
98
+
99
+ NICKNAME_TABLE2 = DiceTable::D66Table.new(
100
+ '二つ名表2',
101
+ D66SortType::ASC,
102
+ {
103
+ 11 => '「みんなの」',
104
+ 12 => '「スルー推奨」',
105
+ 13 => '「暴れん坊」',
106
+ 14 => '「仲間思い」',
107
+ 15 => '「サボり魔」',
108
+ 16 => '「熱血番長の」',
109
+ 22 => '「今日がダメでも明日がある」',
110
+ 23 => '「すぐカッとなる」',
111
+ 24 => '「夢を応援する」',
112
+ 25 => '「地元じゃ有名な」',
113
+ 26 => '「喧嘩慣れている」',
114
+ 33 => '「いつかビックになる」',
115
+ 34 => '「いいやつの」',
116
+ 35 => '「意外とまじめな」',
117
+ 36 => '「イイ感じの」',
118
+ 44 => '「家族想いの」',
119
+ 45 => '「とにかくモテる」',
120
+ 46 => '「学校を代表するワル」',
121
+ 55 => '「邪神ハンター」',
122
+ 56 => '「男前/イイ女」',
123
+ 66 => '「悪そうなやつはだいたい友達」'
124
+ }
125
+ )
126
+
127
+ NICKNAME_TABLE3 = DiceTable::D66Table.new(
128
+ '二つ名表3',
129
+ D66SortType::ASC,
130
+ {
131
+ 11 => '「ファッションヤンキー」',
132
+ 12 => '「誰もが知っている」',
133
+ 13 => '「チャラい」',
134
+ 14 => '「ツヨメ」',
135
+ 15 => '「中学時代はすごかった」',
136
+ 16 => '「イカれたやつ」',
137
+ 22 => '「道徳の授業で泣いた」',
138
+ 23 => '「マジか」',
139
+ 24 => '「イケイケ」',
140
+ 25 => '「鬼語り」',
141
+ 26 => '「とりま」',
142
+ 33 => '「ちょっと眠たい」',
143
+ 34 => '「パネエ」',
144
+ 35 => '「エモい」',
145
+ 36 => '「やべーぞ!」',
146
+ 44 => '「お腹が減っている」',
147
+ 45 => '「むっつりスケベの」',
148
+ 46 => '「いじわるな」',
149
+ 55 => '「全国区に報道された」',
150
+ 56 => '「毎日が楽しい」',
151
+ 66 => '「おやじ狩り狩り」'
152
+ }
153
+ )
154
+
155
+ NICKNAME_TABLE4 = DiceTable::D66Table.new(
156
+ '二つ名表4',
157
+ D66SortType::ASC,
158
+ {
159
+ 11 => '「国産」',
160
+ 12 => '「ブレブレ」',
161
+ 13 => '「ロボ」',
162
+ 14 => '「大銀河」',
163
+ 15 => '「超獣」',
164
+ 16 => '「ミステリー」',
165
+ 22 => '「超電磁」',
166
+ 23 => '「危険な」',
167
+ 24 => '「湯上がり」',
168
+ 25 => '「すごい」',
169
+ 26 => '「エロ」',
170
+ 33 => '「福岡」',
171
+ 34 => '「エリート」',
172
+ 35 => '「どんまい」',
173
+ 36 => '「がり勉」',
174
+ 44 => '「東京」',
175
+ 45 => '「スペース」',
176
+ 46 => '「永遠の」',
177
+ 55 => '「大阪」',
178
+ 56 => '「輝け!」',
179
+ 66 => '「名古屋」'
180
+ }
181
+ )
182
+
183
+ TABLES = {
184
+ "RTT" => DiceTable::SaiFicSkillTable.new(
185
+ [
186
+ ['苦手', ['大人', '勉強', '敗北', '昆虫', '親', '異性', '孤独', '高所', '暗がり', 'ホラー', '子供']],
187
+ ['部活', ['柔道', 'プロレス', 'テコンドー', '空手', 'ボクシング', '帰宅', '剣道', '野球', '応援団', '科学', '文系']],
188
+ ['中学時代', ['悪ガキ', '統一', 'バイト', '習い事', '喧嘩', 'サボり', 'マジメくん', '遊び歩き', '真似ごと', '部活', '何もしない']],
189
+ ['趣味', ['すけべ', '車・バイク', '家事', '料理', '運動', '修行', 'ファッション', 'つるむ', '寝る', 'ゲーム', '読書']],
190
+ ['スタイル', ['テキトー', 'ばか', 'オラオラ', '熱血', '硬派', '自然体', '軟派', '自分大好き', '腹黒', 'クール', 'インテリ']],
191
+ ['好み', ['だらだら', '食事', '逆転', '家族', '支配', '褒められる', '恋愛', '友情', '勝利', '金', '静寂']],
192
+ ],
193
+ peekaboo_style: true
194
+ ),
195
+ "FTNT" => DiceTable::ChainTable.new(
196
+ "二つ名決定表",
197
+ "1D6",
198
+ [
199
+ NICKNAME_TABLE1,
200
+ NICKNAME_TABLE1,
201
+ NICKNAME_TABLE2,
202
+ NICKNAME_TABLE2,
203
+ NICKNAME_TABLE3,
204
+ NICKNAME_TABLE4,
205
+ ]
206
+ ),
207
+ "FT" => DiceTable::Table.new(
208
+ "ファンブル表",
209
+ "1D6",
210
+ [
211
+ 'やっちまった……。テンションが1段階減少する。',
212
+ 'ひょうなことから嫌な状況になる。ランダムに変調(WT)を1つ受ける。',
213
+ 'あまりにもカッコ悪いところが伝わってしまう。自分に対して【友情度】を持つPC全員は、リスペクトにチェックを入れる。',
214
+ '自分の絶望を観測し、邪神が活性化する。バッドヤンキーの「ケツモチ邪神の加護」が1点上昇する。',
215
+ 'つまらないことで怪我をする。自分の【HP】が1D6点減少する。',
216
+ '逆境に燃える。テンションが1段階上昇する。'
217
+ ]
218
+ ),
219
+ "WT" => DiceTable::Table.new(
220
+ "変調表",
221
+ "1D6",
222
+ [
223
+ '毒:サイクル終了時もしくはラウンド終了時に、2D6点のダメージを受ける。',
224
+ '呪い:熱血蘇生の達成値が2点減少する。NPCが受けた場合、受けるダメージが2点上昇する。',
225
+ '火傷:テンションの効果によって、【攻撃力】が上昇しない。NPCは【攻撃力】が2点低いものとして扱う(最低0点)。',
226
+ '骨折:判定に失敗するたびに、5点のダメージを受ける。',
227
+ '出血:サイクル終了時もしくはラウンド終了時に、2点のダメージを受ける。また、施設やアイテムの効果で【HP】が上昇しない。',
228
+ '目つぶし:判定の達成値が2点減少する。'
229
+ ]
230
+ ),
231
+ "KKT" => DiceTable::Table.new(
232
+ "関係表",
233
+ "1D6",
234
+ ['「家族/気に食わない」', '「親友/近寄るな」', '「悪友/こざかしい」', '「ライバル/チンピラ」', '「いい奴/悪い奴」', '「利用できる/ヘタレ」']
235
+ ),
236
+ "DBRT" => DiceTable::D66Table.new(
237
+ "他愛のない会話表",
238
+ :asc,
239
+ {
240
+ 11 => "「政治の話」",
241
+ 12 => "「勉強の話」",
242
+ 13 => "「友達の話」",
243
+ 14 => "「兄弟姉妹の話」",
244
+ 15 => "「好きなものの話」",
245
+ 16 => "「嫌いなものの話」",
246
+ 22 => "「ラーメンの話」",
247
+ 23 => "「コンビニの話」",
248
+ 24 => "「学校生活の話」",
249
+ 25 => "「先輩後輩の話」",
250
+ 26 => "「趣味の話」",
251
+ 33 => "「肉の話」",
252
+ 34 => "「中学時代の話」",
253
+ 35 => "「喧嘩の話」",
254
+ 36 => "「ファッションの話」",
255
+ 44 => "「家の話」",
256
+ 45 => "「好みの異性の話」",
257
+ 46 => "「テレビ番組の話」",
258
+ 55 => "「野菜の話」",
259
+ 56 => "「部活の話」",
260
+ 66 => "「ダブりの話」",
261
+ }
262
+ ),
263
+ "TKT" => DiceTable::D66Table.new(
264
+ "戦う理由表",
265
+ :asc,
266
+ {
267
+ 11 => "「なんとなく」",
268
+ 12 => "「好みのエルフがいた」",
269
+ 13 => "「エルフに世話になった」",
270
+ 14 => "「ドワーフの飯がうまかった」",
271
+ 15 => "「ドワーフにファッション特徴を作ってもらった」",
272
+ 16 => "「妖精たちのいたずらがほほえましかった」",
273
+ 22 => "「バッドヤンキーと昔からの因縁があるから」",
274
+ 23 => "「バッドヤンキーが気に入らなかった」",
275
+ 24 => "「強いやつと戦いたい」",
276
+ 25 => "「異世界にワクワクしているから」",
277
+ 26 => "「バッドヤンキー集団に迷惑を受けたから」",
278
+ 33 => "「夢見るNPCが好みだったから」",
279
+ 34 => "「夢見るNPCの夢に共感したから」",
280
+ 35 => "「夢見るNPCの夢を応援したいと思ったから」",
281
+ 36 => "「夢見るNPCを放っておけないから」",
282
+ 44 => "「家に帰りたいから」",
283
+ 45 => "「夢見るNPCは友達だから」",
284
+ 46 => "「他のPCと気が合ったから」",
285
+ 55 => "「マーメイドと仲良くなった」",
286
+ 56 => "「退屈を紛らわせられそうだから」",
287
+ 66 => "「ただ暴れたかった」",
288
+ }
289
+ ),
290
+ "BUDT" => DiceTable::D66Table.new(
291
+ "武勇伝表",
292
+ :asc,
293
+ {
294
+ 11 => "バッドヤンキーのチームに自分が所属する学校を破壊されたが、最後まで戦った。/テンションが1段階上昇",
295
+ 12 => "バッドヤンキーチームの兵隊が襲い掛かってきたが、撃退した。/【HP】+3",
296
+ 13 => "バッドヤンキーと何度も戦い、ライバルとして認識されていた。/【打たれ強さ】+1",
297
+ 14 => "バッドヤンキー配下の集団をいくつか潰してまわっていた。/【攻撃力】+1",
298
+ 15 => "バッドヤンキーのチームに入りそうになった後輩を説得した。/【HP】+3",
299
+ 16 => "バッドヤンキーに支配されていた店を救った。/【攻撃力】+1",
300
+ 22 => "アメリカで暴れた。/テンションが1段階上昇",
301
+ 23 => "学校をサボって、日本全国を旅をしてまわった。/【HP】+3",
302
+ 24 => "好きなアーティストのライブに行き、マナーの悪いファンを黙らせた。/【打たれ強さ】+1",
303
+ 25 => "抗争中の学校に一人で乗り込んで、戦いを終わらせた。/【攻撃力】+1",
304
+ 26 => "へまをした仲間を助けるため、頭を下げた。/【HP】+3",
305
+ 33 => "大規模な運動会で活躍し、最優秀賞を獲得した。/【攻撃力】+1",
306
+ 34 => "家族や仲間に迷惑をかけたチームを潰した。/【打たれ強さ】+1",
307
+ 35 => "暴走族を一人で潰した。/【攻撃力】+1",
308
+ 36 => "本職(ヤクザ)と戦って謝らせた。/【打たれ強さ】+1",
309
+ 44 => "ドッジボール大会に出場し、優勝をして賞品を手に入れた。/「絆創膏」「テンアゲアイテム」「ポーション」「お守り」のうち1つを選んで獲得する",
310
+ 45 => "仲間たちと一緒に学校行事を盛り上げた。/【打たれ強さ】+1",
311
+ 46 => "仲間と一緒にディスカウントストアで買い物をし、キャンプをした。/「絆創膏」「テンアゲアイテム」「ポーション」「お守り」のうち1つを選んで獲得する",
312
+ 55 => "隣のプレイヤーのPCが所属する高校と大きな抗争をした。/右隣のプレイヤーのPCに対する【友情度】が1点上昇",
313
+ 56 => "修学旅行先で喧嘩し、その後友情を深めた。/【攻撃力】+1",
314
+ 66 => "隣のプレイヤーのPCと一緒に、大きな悪の組織を潰した。/右隣のプレイヤーのPCに対する【友情度】が1点上昇",
315
+ }
316
+ ),
317
+ "GUDT" => DiceTable::D66Table.new(
318
+ "ガイヤンキー武勇伝表",
319
+ :asc,
320
+ {
321
+ 11 => "アザトースが突然接触してきたので、殴って追い返した。/テンションが1段階上昇",
322
+ 12 => "シュブ=ニグラスのサバトに乗り込んで潰した。/【HP】+3",
323
+ 13 => "クトゥルフの落とし子を殴り倒して追い返した。/【打たれ強さ】+1",
324
+ 14 => "ヨグ=ソトースの勧誘を受けたが、断ってやった。/【攻撃力】+1",
325
+ 15 => "深きものどもが住む漁村を訪ね、罠にはめられたが脱出した。/【HP】+3",
326
+ 16 => "一晩飲み明かした相手がナイアーラトテップだった。/【攻撃力】+1",
327
+ 22 => "生きてる恐竜と出会った。/テンションが1段階上昇",
328
+ 23 => "ファンタジー世界を冒険者として旅してまわった。/【HP】+3",
329
+ 24 => "町で起こった少女たちの失踪事件を解決した。/【打たれ強さ】+1",
330
+ 25 => "バッドヤンキーに潰された騎士団を鼓舞して、立て直しに協力した。/【攻撃力】+1",
331
+ 26 => "大きな城下町に起こった殺人事件や傷害事件を幾つも解決した。/【HP】+3",
332
+ 33 => "大きな城下町で、テンションが上がっていろいろ買い込んでしまった。/「絆創膏」「テンアゲアイテム」「ポーション」「お守り」のうち1つを選んで獲得する",
333
+ 34 => "エルフの森を燃やしつくそうとする拝火暴走族をこらしめた。/【打たれ強さ】+1",
334
+ 35 => "ドワーフの洞窟に現われた巨大ワームを投げ飛ばした。/【攻撃力】+1",
335
+ 36 => "妖精たちの村に迷い込んで、村を荒らそうとするゴブリンをブッ飛ばした。/【打たれ強さ】+1",
336
+ 44 => "巨大な王国が主催している武術大会で優勝し、名誉とアイテムを手に入れた。/「絆創膏」「テンアゲアイテム」「ポーション」「お守り」のうち1つを選んで獲得する",
337
+ 45 => "ゴブリンの襲撃から町を守り切った。/【打たれ強さ】+1",
338
+ 46 => "悪いチームにさらわれた姫や王子様を助けたら、惚れられた。/【攻撃力】+1",
339
+ 55 => "次に会うヤンキーのために、この世界の土産話を作ってきた。/右隣のプレイヤーのPCに対する【友情度】が1点上昇",
340
+ 56 => "悪い魔法使いの儀式を突き止めて、潰した。/【攻撃力】+1",
341
+ 66 => "次に会うヤンキーのために、うまいものを用意した。/右隣のプレイヤーのPCに対する【友情度】が1点上昇",
342
+ }
343
+ ),
344
+ "DAIT" => DiceTable::Table.new(
345
+ "第一印象表",
346
+ "1D6",
347
+ ['「ヤベエ」', '「パネエ」', '「スゲエ」', '「びっくり」', '「たばい」', '「アウトオブ眼中」']
348
+ ),
349
+ "TKKT" => DiceTable::Table.new(
350
+ "ツレ関係表",
351
+ "1D6",
352
+ ['「すごそう」', '「勇者様」', '「つよい」', '「いい人」', '「かっこいい」', '「利用できる」']
353
+ ),
354
+ "GSST" => DiceTable::D66Table.new(
355
+ "現実世界生活表",
356
+ :asc,
357
+ {
358
+ 11 => "喧嘩に明け暮れた",
359
+ 12 => "真面目に授業を受けた",
360
+ 13 => "今回の仲間と食事をしに行った",
361
+ 14 => "チーム同士の抗争を沈めた",
362
+ 15 => "ぼーっとしていた",
363
+ 16 => "バイトに専念した",
364
+ 22 => "仲間とバーベキューをした",
365
+ 23 => "自分の体を鍛えることにした",
366
+ 24 => "仲間との毎日をより大切にした",
367
+ 25 => "家族とゆっくりすごした",
368
+ 26 => "喧嘩の技術を磨いた",
369
+ 33 => "本職(ヤクザ)と喧嘩をした",
370
+ 34 => "好きなだけ寝た",
371
+ 35 => "ツレができた",
372
+ 36 => "今回の仲間と旅に出た",
373
+ 44 => "異性と遊園地に行くことになった",
374
+ 45 => "あの戦いの日々を思い返していた",
375
+ 46 => "次の戦いに備えた",
376
+ 55 => "運動部の助っ人として、大会に出た",
377
+ 56 => "好きなだけ好物を食べた",
378
+ 66 => "汚い大人の罠にはめられたが、なんとかした",
379
+ }
380
+ ),
381
+ "GYST" => DiceTable::D66Table.new(
382
+ "ガイヤンキー生活表",
383
+ :asc,
384
+ {
385
+ 11 => "ツレと生活をした",
386
+ 12 => "異世界について学んだ",
387
+ 13 => "エルフの美形(平均年齢200歳)に接待を受けた",
388
+ 14 => "ドワーフから地元の酒をもらった",
389
+ 15 => "妖精の村に迷い込んでしまった",
390
+ 16 => "この世界の遺跡を回った",
391
+ 22 => "この世界に野球などのスポーツを広めた",
392
+ 23 => "広大な森の中で迷ってしまい、数か月ほどサバイバルした",
393
+ 24 => "不思議な力が溢れる泉の水を飲み干した",
394
+ 25 => "魔法使いの研究に協力したが、さっぱりだった",
395
+ 26 => "ハーピィに誘われて空の旅を満喫した",
396
+ 33 => "この世界にヤンキー文化を伝えた",
397
+ 34 => "バッドヤンキーに荒らされた小さな村を復興した",
398
+ 35 => "悪徳領主にさらわれた少女を助けた",
399
+ 36 => "わるい商人を殴り飛ばした",
400
+ 44 => "エルフの漫画家が誕生するのを見届けた",
401
+ 45 => "巨大なドラゴンと殴りあって勝利した",
402
+ 46 => "海中に住むマーメイドを脅かす悪人を退治した",
403
+ 55 => "邪神を信奉している神殿に殴り込みをして、企みを阻止した",
404
+ 56 => "天使っぽいのが悪いことをしていたので蹴り飛ばした",
405
+ 66 => "農作業をした",
406
+ }
407
+ ),
408
+ "HPST" => DiceTable::D66Table.new(
409
+ "病院生活表",
410
+ :asc,
411
+ {
412
+ 11 => "治療に専念した",
413
+ 12 => "見舞いでもらった漫画を読み倒した",
414
+ 13 => "ゲームをひたすらやった",
415
+ 14 => "悪化した病と闘った",
416
+ 15 => "入院している子供と約束をした",
417
+ 16 => "看護師と仲良くなった",
418
+ 22 => "現代の医術では治療できなかったので、異世界の魔法に賭けた",
419
+ 23 => "院内パーティを盛り上げた",
420
+ 24 => "飯がまずくて苦労した",
421
+ 25 => "飯がうまくて感動をした",
422
+ 26 => "やることがなくて暇だった",
423
+ 33 => "スーパードクターが現われて、自分の怪我を見事に治してくれた",
424
+ 34 => "とにかくテレビを見続けて、知識がついた",
425
+ 35 => "勉強をしてみたら、いつも以上にはかどった",
426
+ 36 => "たくさんの人たちが見舞いに来て、感動した",
427
+ 44 => "入院をしている爺さんから色々教えてもらった",
428
+ 45 => "リハビリに思ったより時間がかかった",
429
+ 46 => "次に喧嘩するときのイメージトレーニングをした",
430
+ 55 => "ヤンキー漫画に感動をした",
431
+ 56 => "院内で喧嘩をした",
432
+ 66 => "売店で売っているお菓子をコンプリートした",
433
+ }
434
+ ),
435
+ }.freeze
436
+
437
+ register_prefix(TABLES.keys)
438
+ end
439
+ end
440
+ end