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,240 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class Cthulhu_Korean < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'Cthulhu:Korean'
8
+
9
+ # ゲームシステム名
10
+ NAME = '크툴루'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = '国際化:Korean:크툴루의부름7'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
17
+ c=크리티컬치 / f=펌블치 / s=스페셜
18
+
19
+ 1d100<=n c・f・s 모두 오프(단순하게 수치만을 뽑아낼 때 사용)
20
+
21
+ ・cfs이 붙는 판정의 커맨드
22
+
23
+ CC 1d100 판정을 행함 c=1、f=100
24
+ CCB 위와 동일、c=5、f=96
25
+
26
+ 예:CC<=80 (기능치 80로 행휘판정. 1%룰으로 cf적용)
27
+ 예:CCB<=55 (기능치 55로 행휘판정. 5%룰으로 cf적용)
28
+
29
+ ・경우의 수 판정에 대해서
30
+
31
+ CBR(x,y) c=1、f=100
32
+ CBRB(x,y) c=5、f=96
33
+
34
+ ・저항 판정에 대해서
35
+ RES(x-y) c=1、f=100
36
+ RESB(x-y) c=5、f=96
37
+
38
+ ※고장 넘버 판정
39
+
40
+ ・CC(x) c=1、f=100
41
+ x=고장 넘버. 주사위 눈x이상이 나온 후에, 펌블이 동시에 발생했을 경우. 모두 출력한다. (텍스트 「펌블&고장」)
42
+ 펌블이 아닌 경우, 성공・실패에 관련되지 않고 「고장」만을 출력한다. (성공・실패를 출력하지 않고 덧쓰기한 것을 출력하는 형태)
43
+
44
+ ・CCB(x) c=5、f=96
45
+ 위와 동일
46
+ INFO_MESSAGE_TEXT
47
+
48
+ register_prefix(['CC(B)?\(\d+\)', 'CC(B)?.*', 'RES(B)?.*', 'CBR(B)?\(\d+,\d+\)'])
49
+
50
+ def initialize(command)
51
+ super(command)
52
+ @special_percentage = 20
53
+ @critical_percentage = 1
54
+ @fumble_percentage = 1
55
+ end
56
+
57
+ def eval_game_system_specific_command(command)
58
+ case command
59
+ when /CCB/i
60
+ # 5%
61
+ @critical_percentage = 5
62
+ @fumble_percentage = 5
63
+ return getCheckResult(command)
64
+ when /CC/i
65
+ # 1%
66
+ @critical_percentage = 1
67
+ @fumble_percentage = 1
68
+ return getCheckResult(command)
69
+ when /RESB/i
70
+ # 5%
71
+ @critical_percentage = 5
72
+ @fumble_percentage = 5
73
+ return getRegistResult(command)
74
+ when /CBRB/i
75
+ # 5%
76
+ @critical_percentage = 5
77
+ @fumble_percentage = 5
78
+ return getCombineRoll(command)
79
+ when /RES/i
80
+ # 1%
81
+ @critical_percentage = 1
82
+ @fumble_percentage = 1
83
+ return getRegistResult(command)
84
+ when /CBR/i
85
+ # 1%
86
+ @critical_percentage = 1
87
+ @fumble_percentage = 1
88
+ return getCombineRoll(command)
89
+ end
90
+
91
+ return nil
92
+ end
93
+
94
+ def getCheckResult(command)
95
+ broken_num = 0
96
+ diff = 0
97
+
98
+ if (m = /CC(B)?(\d+)<=(\d+)/i.match(command))
99
+ # /\(\d+\)/의()는 pattern-killer로 해석되는 듯 함
100
+ broken_num = m[2].to_i
101
+ diff = m[3].to_i
102
+ elsif (m = /CC(B)?<=(\d+)/i.match(command))
103
+ diff = m[2].to_i
104
+ end
105
+
106
+ output = ""
107
+
108
+ if diff > 0
109
+ output = "(1D100<=#{diff})"
110
+
111
+ if broken_num > 0
112
+ output += " 고장넘버[#{broken_num}]"
113
+ end
114
+
115
+ total_n = @randomizer.roll_once(100)
116
+
117
+ output += " > #{total_n}"
118
+ output += " > #{getCheckResultText(total_n, diff, broken_num)}"
119
+ else
120
+ # 1D100단순 치환 취급
121
+ # 필요없을지도
122
+ total_n = @randomizer.roll_once(100)
123
+ output = "(1D100) > #{total_n}"
124
+ end
125
+
126
+ return output
127
+ end
128
+
129
+ def getCheckResultText(total_n, diff, broken_num = 0)
130
+ result = ""
131
+ diff_special = 0
132
+ fumble = false
133
+
134
+ if @special_percentage > 0
135
+ # special의 값설정이 없는 경우 크리티컬/펌블 판정도 없다
136
+ diff_special = (diff * @special_percentage / 100).floor
137
+ if diff_special < 1
138
+ diff_special = 1
139
+ end
140
+ end
141
+
142
+ if (total_n <= diff) && (total_n < 100)
143
+ result = "성공"
144
+
145
+ if diff_special > 0
146
+ if total_n <= @critical_percentage
147
+ if total_n <= diff_special
148
+ result = "크리티컬/스페셜"
149
+ else
150
+ result = "크리티컬"
151
+ end
152
+ else
153
+ if total_n <= diff_special
154
+ result = "스페셜"
155
+ end
156
+ end
157
+ end
158
+ else
159
+ result = "실패"
160
+
161
+ if diff_special > 0
162
+ if (total_n >= (101 - @fumble_percentage)) && (diff < 100)
163
+ result = "펌블"
164
+ fumble = true
165
+ end
166
+ end
167
+ end
168
+
169
+ if broken_num > 0
170
+ if total_n >= broken_num
171
+ if fumble
172
+ result += "/고장"
173
+ else
174
+ result = "고장"
175
+ end
176
+ end
177
+ end
178
+
179
+ return result
180
+ end
181
+
182
+ def getRegistResult(command)
183
+ m = /RES(B)?([-\d]+)/i.match(command)
184
+ unless m
185
+ return "1"
186
+ end
187
+
188
+ value = m[2].to_i
189
+ target = value * 5 + 50
190
+
191
+ if target < 5
192
+ return "(1d100<=#{target}) > 자동실패"
193
+ end
194
+
195
+ if target > 95
196
+ return "(1d100<=#{target}) > 자동성공"
197
+ end
198
+
199
+ # 통상판정
200
+ total_n = @randomizer.roll_once(100)
201
+ result = getCheckResultText(total_n, target)
202
+
203
+ return "(1d100<=#{target}) > #{total_n} > #{result}"
204
+ end
205
+
206
+ def getCombineRoll(command)
207
+ m = /CBR(B)?\((\d+),(\d+)\)/i.match(command)
208
+ unless m
209
+ return "1"
210
+ end
211
+
212
+ diff_1 = m[2].to_i
213
+ diff_2 = m[3].to_i
214
+
215
+ total = @randomizer.roll_once(100)
216
+
217
+ result_1 = getCheckResultText(total, diff_1)
218
+ result_2 = getCheckResultText(total, diff_2)
219
+
220
+ successList = ["크리티컬/스페셜", "크리티컬", "스페셜", "성공"]
221
+
222
+ succesCount = 0
223
+ succesCount += 1 if successList.include?(result_1)
224
+ succesCount += 1 if successList.include?(result_2)
225
+ debug("succesCount", succesCount)
226
+
227
+ rank =
228
+ if succesCount >= 2
229
+ "성공"
230
+ elsif succesCount == 1
231
+ "부분적 성공"
232
+ else
233
+ "실패"
234
+ end
235
+
236
+ return "(1d100<=#{diff_1},#{diff_2}) > #{total}[#{result_1},#{result_2}] > #{rank}"
237
+ end
238
+ end
239
+ end
240
+ end
@@ -0,0 +1,207 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bcdice/normalize'
4
+ require 'bcdice/format'
5
+
6
+ module BCDice
7
+ module GameSystem
8
+ class DarkBlaze < Base
9
+ # ゲームシステムの識別子
10
+ ID = 'DarkBlaze'
11
+
12
+ # ゲームシステム名
13
+ NAME = 'ダークブレイズ'
14
+
15
+ # ゲームシステム名の読みがな
16
+ SORT_KEY = 'たあくふれいす'
17
+
18
+ # ダイスボットの使い方
19
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
20
+ ・行為判定 (DBxy#n)
21
+  行為判定専用のコマンドです。
22
+  "DB(能力)(技能)#(修正)"でロールします。Rコマンド(3R6+n[x,y]>=m mは難易度)に読替をします。
23
+  クリティカルとファンブルも自動で処理されます。
24
+  DB@x@y#m と DBx,y#m にも対応しました。
25
+  例)DB33   DB32#-1   DB@3@1#1   DB3,2   DB23#1>=4   3R6+1[3,3]>=4
26
+
27
+ ・掘り出し袋表 (BTx)
28
+  "BT(ダイス数)"で掘り出し袋表を自動で振り、結果を表示します。
29
+  例)BT1   BT2   BT[1...3]
30
+ INFO_MESSAGE_TEXT
31
+
32
+ register_prefix(['DB.*', 'BT.*', '3R6.*'])
33
+
34
+ def replace_text(string)
35
+ return string unless string =~ /DB/i
36
+
37
+ string = string.gsub(/DB(\d),(\d)/) { "DB#{Regexp.last_match(1)}#{Regexp.last_match(2)}" }
38
+ string = string.gsub(/DB\@(\d)\@(\d)/) { "DB#{Regexp.last_match(1)}#{Regexp.last_match(2)}" }
39
+ string = string.gsub(/DB(\d)(\d)(#([\d][\+\-\d]*))/) { "3R6+#{Regexp.last_match(4)}[#{Regexp.last_match(1)},#{Regexp.last_match(2)}]" }
40
+ string = string.gsub(/DB(\d)(\d)(#([\+\-\d]*))/) { "3R6#{Regexp.last_match(4)}[#{Regexp.last_match(1)},#{Regexp.last_match(2)}]" }
41
+ string = string.gsub(/DB(\d)(\d)/) { "3R6[#{Regexp.last_match(1)},#{Regexp.last_match(2)}]" }
42
+
43
+ return string
44
+ end
45
+
46
+ # ゲーム別成功度判定(nD6)
47
+ def check_nD6(total, _dice_total, _dice_list, cmp_op, target)
48
+ if cmp_op != :>= || target == "?"
49
+ ''
50
+ elsif total >= target
51
+ " > 成功"
52
+ else
53
+ " > 失敗"
54
+ end
55
+ end
56
+
57
+ def check_roll(string)
58
+ string = replace_text(string)
59
+ return nil unless (m = /(^|\s)S?(3[rR]6([\+\-\d]+)?(\[(\d+),(\d+)\])(([>=]+)(\d+))?)(\s|$)/i.match(string))
60
+
61
+ string = m[2]
62
+ mod = 0
63
+ abl = 1
64
+ skl = 1
65
+ signOfInequality = ""
66
+ diff = 0
67
+
68
+ mod = ArithmeticEvaluator.eval(m[3]) if m[3]
69
+
70
+ if m[4]
71
+ abl = m[5].to_i
72
+ skl = m[6].to_i
73
+ end
74
+
75
+ if m[7]
76
+ cmp_op = Normalize.comparison_operator(m[8])
77
+ signOfInequality = Format.comparison_operator(cmp_op)
78
+ diff = m[9].to_i
79
+ end
80
+
81
+ total, out_str, dice_list = get_dice(mod, abl, skl)
82
+ output = "(#{string}) > #{out_str}"
83
+
84
+ if signOfInequality != "" # 成功度判定処理
85
+ dice_total = dice_list.inject(&:+)
86
+ cmp_op = Normalize.comparison_operator(signOfInequality)
87
+ output += check_result(total, dice_total, dice_list, 6, cmp_op, diff)
88
+ end
89
+
90
+ return output
91
+ end
92
+
93
+ def get_dice(mod, abl, skl)
94
+ total = 0
95
+ crit = 0
96
+ fumble = 0
97
+ dice_c = 3 + mod.abs
98
+
99
+ dice_arr = @randomizer.roll_barabara(dice_c, 6).sort
100
+ dice_str = dice_arr.join(",")
101
+
102
+ 3.times do |i|
103
+ ch = dice_arr[i]
104
+
105
+ if mod < 0
106
+ ch = dice_arr[dice_c - i - 1]
107
+ end
108
+
109
+ total += 1 if ch <= abl
110
+ total += 1 if ch <= skl
111
+ crit += 1 if ch <= 2
112
+ fumble += 1 if ch >= 5
113
+ end
114
+
115
+ resultText = ""
116
+
117
+ if crit >= 3
118
+ resultText = " > クリティカル"
119
+ total = 6 + skl
120
+ end
121
+
122
+ if fumble >= 3
123
+ resultText = " > ファンブル"
124
+ total = 0
125
+ end
126
+
127
+ output = "#{total}[#{dice_str}]#{resultText}"
128
+
129
+ return total, output, dice_arr
130
+ end
131
+
132
+ def eval_game_system_specific_command(command)
133
+ if (m = /^BT(\d)?$/i.match(command))
134
+ dice = m[1]&.to_i || 1
135
+ return get_horidasibukuro_table(dice)
136
+ end
137
+
138
+ return check_roll(command)
139
+ end
140
+
141
+ # ** 掘り出し袋表
142
+ def get_horidasibukuro_table(dice)
143
+ output = '1'
144
+
145
+ material_kind = [ # 2D6
146
+ "蟲甲", # 5
147
+ "金属", # 6
148
+ "金貨", # 7
149
+ "植物", # 8
150
+ "獣皮", # 9
151
+ "竜鱗", # 10
152
+ "レアモノ", # 11
153
+ "レアモノ", # 12
154
+ ]
155
+
156
+ magic_stone = [ # 1D3
157
+ "火炎石",
158
+ "雷撃石",
159
+ "氷結石",
160
+ ]
161
+
162
+ num1 = @randomizer.roll_sum(2, 6)
163
+ num2 = @randomizer.roll_sum(dice, 6)
164
+
165
+ debug('dice', dice)
166
+ debug('num1', num1)
167
+ debug('num2', num2)
168
+
169
+ if num1 <= 4
170
+ num2 = @randomizer.roll_once(6)
171
+ magic_stone_result = (magic_stone[(num2 / 2).to_i - 1])
172
+ output = "《#{magic_stone_result}》を#{dice}個獲得"
173
+ elsif num1 == 7
174
+ output = "《金貨》を#{num2}枚獲得"
175
+ else
176
+ type = material_kind[num1 - 5]
177
+
178
+ if num2 <= 3
179
+ output = "《#{type} I》を1個獲得"
180
+ elsif num2 <= 5
181
+ output = "《#{type} I》を2個獲得"
182
+ elsif num2 <= 7
183
+ output = "《#{type} I》を3個獲得"
184
+ elsif num2 <= 9
185
+ output = "《#{type} II》を1個獲得"
186
+ elsif num2 <= 11
187
+ output = "《#{type} I》を2個《#{type} II》を1個獲得"
188
+ elsif num2 <= 13
189
+ output = "《#{type} I》を2個《#{type} II》を2個獲得"
190
+ elsif num2 <= 15
191
+ output = "《#{type} III》を1個獲得"
192
+ elsif num2 <= 17
193
+ output = "《#{type} II》を2個《#{type} III》を1個獲得"
194
+ else
195
+ output = "《#{type} II》を2個《#{type} III》を2個獲得"
196
+ end
197
+ end
198
+
199
+ if output != '1'
200
+ output = "掘り出し袋表[#{num1},#{num2}] > #{output}"
201
+ end
202
+
203
+ return output
204
+ end
205
+ end
206
+ end
207
+ end
@@ -0,0 +1,425 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class DarkDaysDrive < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'DarkDaysDrive'
8
+
9
+ # ゲームシステム名
10
+ NAME = 'ダークデイズドライブ'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'たあくていすとらいふ'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
17
+ ・判定
18
+ スペシャル/ファンブル/成功/失敗を判定
19
+ ・各種表
20
+ RTT ランダム特技決定表
21
+ ABRT アビリティ決定表
22
+ DT ダメージ表
23
+ FT 失敗表
24
+ GJT 大成功表
25
+ ITT 移動トラブル表
26
+ NTT 任務トラブル表
27
+ STT 襲撃トラブル表
28
+ HTT 変身トラブル表
29
+ DET ドライブイベント表
30
+ BET ブレイクイベント表
31
+ CT キャンプ表
32
+ KZT 関係属性表
33
+ IA イケメンアクション決定表
34
+ IAA 遠距離
35
+ IAB 移動
36
+ IAC 近距離
37
+ IAD 善人
38
+ IAE 悪人
39
+ IAF 幼い
40
+ IAG バカ
41
+ IAH 渋い
42
+ IAI 賢い
43
+ IAJ 超自然
44
+ ・D66ダイスあり
45
+ INFO_MESSAGE_TEXT
46
+
47
+ def initialize(command)
48
+ super(command)
49
+ @enabled_d66 = true
50
+ @d66_sort_type = D66SortType::ASC
51
+ end
52
+
53
+ # ゲーム別成功度判定(2D6)
54
+ def check_2D6(total, dice_total, _dice_list, cmp_op, target)
55
+ return '' if target == '?'
56
+ return '' unless cmp_op == :>=
57
+
58
+ if dice_total <= 2
59
+ " > ファンブル(判定失敗。失敗表(FT)を追加で1回振る)"
60
+ elsif dice_total >= 12
61
+ " > スペシャル(判定成功。大成功表(GJT)を1回使用可能)"
62
+ elsif total >= target
63
+ " > 成功"
64
+ else
65
+ " > 失敗"
66
+ end
67
+ end
68
+
69
+ def eval_game_system_specific_command(command)
70
+ roll_tables(command, TABLES)
71
+ end
72
+
73
+ TABLES = {
74
+ "RTT" => DiceTable::SaiFicSkillTable.new(
75
+ [
76
+ ['背景', ['呪い', '絶望', '孤児', '死別', '一般人', '獲物', '憧れ', '友人', '挑戦者', '血縁', '永遠']],
77
+ ['仕事', ['脅迫', '捨てる', '拉致', '盗む', 'ハッキング', '侵入', '変装', 'だます', '隠す', 'のぞく', '聞き出す']],
78
+ ['捜索', ['トイレ', '食事', '自然', '運動施設', '街', '友愛会', '暗部', '史跡', '文化施設', '温泉', '宿泊']],
79
+ ['趣味', ['お酒', 'グルメ', 'ダンス', 'スポーツ', '健康', 'ファッション', '恋愛', 'フェス', '音楽', '物語', '学問']],
80
+ ['雰囲気', ['だらしない', 'のんびり', '暖かい', '明るい', '甘い', '普通', '洗練', '渋い', '静か', '真面目', '冷たい']],
81
+ ['戦闘法', ['忍術', '古武術', '剣術', '棒術', '拳法', 'ケンカ', '総合格闘技', 'レスリング', '軍隊格闘術', '射撃', '弓術']],
82
+ ]
83
+ ),
84
+ "ABRT" => DiceTable::D66Table.new(
85
+ "アビリティ決定表",
86
+ D66SortType::ASC,
87
+ {
88
+ 11 => "インストラクター(P155)",
89
+ 12 => "運送業(P155)",
90
+ 13 => "運転手(P155)",
91
+ 14 => "カフェ店員(P155)",
92
+ 15 => "趣味人(P155)",
93
+ 16 => "ショップ店員(P155)",
94
+ 22 => "正社員(P156)",
95
+ 23 => "大工(P156)",
96
+ 24 => "探偵(P156)",
97
+ 25 => "バイヤー(P156)",
98
+ 26 => "俳優(P156)",
99
+ 33 => "派遣社員(P156)",
100
+ 34 => "犯罪者(P157)",
101
+ 35 => "バンドマン(P157)",
102
+ 36 => "バーテンダー(P157)",
103
+ 44 => "ヒモ(P157)",
104
+ 45 => "ホスト(P157)",
105
+ 46 => "ホテルマン(P157)",
106
+ 55 => "無職(P158)",
107
+ 56 => "用心棒(P158)",
108
+ 66 => "料理人(P158)"
109
+ }
110
+ ),
111
+ "DT" => DiceTable::Table.new(
112
+ "ダメージ表",
113
+ "1D6",
114
+ [
115
+ "疲れ",
116
+ "痛み",
117
+ "焦り",
118
+ "不調",
119
+ "ショック",
120
+ "ケガ"
121
+ ]
122
+ ),
123
+ "FT" => DiceTable::Table.new(
124
+ "失敗表",
125
+ "1D6",
126
+ [
127
+ "任意のアイテムを一つ失う",
128
+ "1ダメージを受ける",
129
+ "【所持金ランク】が1減少する(最低0)",
130
+ "2ダメージを受ける",
131
+ "【所持金ランク】が2減少する(最低0)",
132
+ "標的レベルが1増加する"
133
+ ]
134
+ ),
135
+ "GJT" => DiceTable::Table.new(
136
+ "大成功表",
137
+ "1D6",
138
+ [
139
+ "主人からお褒めの言葉をいただく",
140
+ "ダメージを1回復する",
141
+ "ダメージを1回復する",
142
+ "関係のチェックを一つ消す",
143
+ "ダメージを2回復する",
144
+ "【所持金ランク】が1増加する"
145
+ ]
146
+ ),
147
+ "ITT" => DiceTable::Table.new(
148
+ "移動トラブル表",
149
+ "1D6",
150
+ [
151
+ "検問(P220)",
152
+ "急な腹痛(P220)",
153
+ "黒煙(P221)",
154
+ "蚊(P221)",
155
+ "落とし物(P222)",
156
+ "空腹(P222)"
157
+ ]
158
+ ),
159
+ "NTT" => DiceTable::Table.new(
160
+ "任務トラブル表",
161
+ "1D6",
162
+ [
163
+ "通報(P223)",
164
+ "プレッシャー(P223)",
165
+ "マナー違反(P224)",
166
+ "志願者(P224)",
167
+ "仲間割れ(P225)",
168
+ "狩人の噂(P225)"
169
+ ]
170
+ ),
171
+ "STT" => DiceTable::Table.new(
172
+ "襲撃トラブル表",
173
+ "1D6",
174
+ [
175
+ "孤独な追跡者(P226)",
176
+ "地元の若者たち(P226)",
177
+ "V-FILES(P227)",
178
+ "チンピラの群れ(P227)",
179
+ "孤独な狩人(P228)",
180
+ "狩人の群れ(P228)"
181
+ ]
182
+ ),
183
+ "HTT" => DiceTable::D66Table.new(
184
+ "変身トラブル表",
185
+ D66SortType::NO_SORT,
186
+ {
187
+ 11 => "あれを食べたい(P214)",
188
+ 12 => "あれを着たい(P214)",
189
+ 13 => "あれを見たい(P215)",
190
+ 14 => "あれを狩りたい(P215)",
191
+ 15 => "あれを踊りたい(P216)",
192
+ 16 => "あれに入りたい(P216)",
193
+ 21 => "強奪(P217)",
194
+ 22 => "暴行(P217)",
195
+ 23 => "虐殺(P218)",
196
+ 24 => "誘拐(P218)",
197
+ 25 => "無精(P219)",
198
+ 26 => "失踪(P219)",
199
+ 31 => "あれを食べたい(P214)",
200
+ 32 => "あれを着たい(P214)",
201
+ 33 => "あれを見たい(P215)",
202
+ 34 => "あれを狩りたい(P215)",
203
+ 35 => "あれを踊りたい(P216)",
204
+ 36 => "あれに入りたい(P216)",
205
+ 41 => "強奪(P217)",
206
+ 42 => "暴行(P217)",
207
+ 43 => "虐殺(P218)",
208
+ 44 => "誘拐(P218)",
209
+ 45 => "無精(P219)",
210
+ 46 => "失踪(P219)",
211
+ 51 => "あれを食べたい(P214)",
212
+ 52 => "あれを着たい(P214)",
213
+ 53 => "あれを見たい(P215)",
214
+ 54 => "あれを狩りたい(P215)",
215
+ 55 => "あれを踊りたい(P216)",
216
+ 56 => "あれに入りたい(P216)",
217
+ 61 => "強奪(P217)",
218
+ 62 => "暴行(P217)",
219
+ 63 => "虐殺(P218)",
220
+ 64 => "誘拐(P218)",
221
+ 65 => "無精(P219)",
222
+ 66 => "失踪(P219)"
223
+ }
224
+ ),
225
+ "DET" => DiceTable::Table.new(
226
+ "ドライブイベント表",
227
+ "1D6",
228
+ [
229
+ "身の上話をする。目標が背景分野で選択している特技がドライブ判定の指定特技になる。",
230
+ "スキル自慢をする。目標が仕事分野で選択している特技がドライブ判定の指定特技になる。",
231
+ "むかし行った場所の話をする。目標が捜索分野で選択している特技がドライブ判定の指定特技になる。",
232
+ "趣味の話をする。目標が趣味分野で選択している特技がドライブ判定の指定特技になる。",
233
+ "テーマがない雑談をする。目標が雰囲気分野で選択している特技がドライブ判定の指定特技になる。",
234
+ "物騒な話をする。目標が戦闘法分野で選択している特技がドライブ判定の指定特技になる。"
235
+ ]
236
+ ),
237
+ "BET" => DiceTable::Table.new(
238
+ "ブレイクイベント表",
239
+ "1D6",
240
+ [
241
+ "イケメンの車は風光明美な場所に到着する。197ページの「観光地」を参照。",
242
+ "イケメンの車は明るい光に照らされた小さな店に到着する。197ページの「コンビニ」を参照。",
243
+ "イケメンの車は巨大かつ何でも売っている店に到着する。198ページの「ホームセンター」を参照。",
244
+ "イケメンの車はドライバーたちの憩いの地に到着する。198ページの「サービスエリア」を参照。",
245
+ "イケメンの車は大きなサービスエリアのような場所に到着する。199ページの「道の駅」を参照。",
246
+ "イケメンの車は闇の底に隠された秘密の場所に到着する。199ページの「友愛会支部」を参照。"
247
+ ]
248
+ ),
249
+ "CT" => DiceTable::Table.new(
250
+ "キャンプ表",
251
+ "1D6",
252
+ [
253
+ "無料仮眠所・いい感じの空き地:定員無制限/居住性-2/価格0/発見率2",
254
+ "カプセルホテル:定員1/居住性-1/価格3/発見率2",
255
+ "ラブホテル:定員2/居住性0/価格4/発見率1",
256
+ "ビジネスホテル:定員2/居住性0/価格4/発見率1",
257
+ "観光ホテル:定員4/居住性1/価格5/発見率1",
258
+ "高級ホテル:定員4/居住性2/価格6/発見率0"
259
+ ]
260
+ ),
261
+ "KZT" => DiceTable::Table.new(
262
+ "関係属性表",
263
+ "1D6",
264
+ [
265
+ "軽蔑",
266
+ "反感",
267
+ "混乱",
268
+ "興味",
269
+ "共感",
270
+ "憧れ"
271
+ ]
272
+ ),
273
+ "IA" => DiceTable::D66Table.new(
274
+ "イケメンアクション決定表",
275
+ D66SortType::ASC,
276
+ {
277
+ 11 => "遠距離",
278
+ 12 => "遠距離",
279
+ 13 => "移動",
280
+ 14 => "移動",
281
+ 15 => "近距離",
282
+ 16 => "近距離",
283
+ 22 => "善人",
284
+ 23 => "善人",
285
+ 24 => "悪人",
286
+ 25 => "悪人",
287
+ 26 => "幼い",
288
+ 33 => "幼い",
289
+ 34 => "バカ",
290
+ 35 => "バカ",
291
+ 36 => "渋い",
292
+ 44 => "渋い",
293
+ 45 => "賢い",
294
+ 46 => "賢い",
295
+ 55 => "超自然",
296
+ 56 => "超自然",
297
+ 66 => "振り直しor自由選択"
298
+ }
299
+ ),
300
+ "IAA" => DiceTable::Table.new(
301
+ "イケメンアクション(遠距離)表",
302
+ "1D6",
303
+ [
304
+ "目を合わせて微笑む(かっこよさ:4)",
305
+ "場所を譲る(かっこよさ:4)",
306
+ "髪をかきあげる(かっこよさ:5)",
307
+ "複雑なポーズで座る(かっこよさ:5)",
308
+ "物憂げな表情で振り返る(かっこよさ:6)",
309
+ "ものを上に持つ(かっこよさ:6)"
310
+ ]
311
+ ),
312
+ "IAB" => DiceTable::Table.new(
313
+ "イケメンアクション(移動)表",
314
+ "1D6",
315
+ [
316
+ "車道側を歩く(かっこよさ:4)",
317
+ "乗り物から降りる(かっこよさ:4)",
318
+ "真剣な表情で近づく(かっこよさ:4)",
319
+ "馬に乗る(かっこよさ:6)",
320
+ "ダメージを受けつつ移動(かっこよさ:6)",
321
+ "瞬間移動(かっこよさ:6)"
322
+ ]
323
+ ),
324
+ "IAC" => DiceTable::Table.new(
325
+ "イケメンアクション(近距離)表",
326
+ "1D6",
327
+ [
328
+ "黙って見つめる(かっこよさ:3)",
329
+ "ちょっとしたプレゼント(かっこよさ:3)",
330
+ "顎クイ(かっこよさ:5)",
331
+ "壁ドン(かっこよさ:5)",
332
+ "お姫様抱っこ(かっこよさ:7)",
333
+ "床ドン(かっこよさ:7)"
334
+ ]
335
+ ),
336
+ "IAD" => DiceTable::Table.new(
337
+ "イケメンアクション(善人)表",
338
+ "1D6",
339
+ [
340
+ "手を引いて逃げる(かっこよさ:4)",
341
+ "毛布を掛ける(かっこよさ:4)",
342
+ "守る(かっこよさ:5)",
343
+ "笑って去る(かっこよさ:5)",
344
+ "全てを捧げる(かっこよさ:6)",
345
+ "悪堕ち(かっこよさ:6)"
346
+ ]
347
+ ),
348
+ "IAE" => DiceTable::Table.new(
349
+ "イケメンアクション(悪人)表",
350
+ "1D6",
351
+ [
352
+ "攻撃する(かっこよさ:4)",
353
+ "暗く笑う(かっこよさ:4)",
354
+ "奪う(かっこよさ:4)",
355
+ "目論見を口にする(かっこよさ:6)",
356
+ "罠にかける(かっこよさ:6)",
357
+ "改心する(かっこよさ:6)"
358
+ ]
359
+ ),
360
+ "IAF" => DiceTable::Table.new(
361
+ "イケメンアクション(幼い)表",
362
+ "1D6",
363
+ [
364
+ "甘える(かっこよさ:3)",
365
+ "疲れる(かっこよさ:3)",
366
+ "無邪気な発言(かっこよさ:5)",
367
+ "おねだり(かっこよさ:5)",
368
+ "上目遣い(かっこよさ:7)",
369
+ "抱きつく(かっこよさ:7)"
370
+ ]
371
+ ),
372
+ "IAG" => DiceTable::Table.new(
373
+ "イケメンアクション(バカ)表",
374
+ "1D6",
375
+ [
376
+ "苦悩する(かっこよさ:4)",
377
+ "屈託のない笑顔(かっこよさ:4)",
378
+ "転ぶ(かっこよさ:4)",
379
+ "叫ぶ(かっこよさ:6)",
380
+ "間違える(かっこよさ:6)",
381
+ "怖がる(かっこよさ:6)"
382
+ ]
383
+ ),
384
+ "IAH" => DiceTable::Table.new(
385
+ "イケメンアクション(渋い)表",
386
+ "1D6",
387
+ [
388
+ "説教(かっこよさ:4)",
389
+ "気づかせる(かっこよさ:4)",
390
+ "見守る(かっこよさ:5)",
391
+ "残心(かっこよさ:5)",
392
+ "称える(かっこよさ:6)",
393
+ "いい位置を取る(かっこよさ:6)"
394
+ ]
395
+ ),
396
+ "IAI" => DiceTable::Table.new(
397
+ "イケメンアクション(賢い)表",
398
+ "1D6",
399
+ [
400
+ "難しい本を読む(かっこよさ:3)",
401
+ "アドバイスをする(かっこよさ:3)",
402
+ "眼鏡を持ち上げる(かっこよさ:5)",
403
+ "状況を解説する(かっこよさ:5)",
404
+ "計算できなくなる(かっこよさ:7)",
405
+ "大丈夫だと言う(かっこよさ:7)"
406
+ ]
407
+ ),
408
+ "IAJ" => DiceTable::Table.new(
409
+ "イケメンアクション(超自然)表",
410
+ "1D6",
411
+ [
412
+ "水に濡れる(かっこよさ:4)",
413
+ "風を纏う(かっこよさ:4)",
414
+ "地割れ(かっこよさ:5)",
415
+ "火を放つ(かっこよさ:5)",
416
+ "闇を生み出す(かっこよさ:6)",
417
+ "光る(かっこよさ:6)"
418
+ ]
419
+ ),
420
+ }.freeze
421
+
422
+ register_prefix(['RTT'] + TABLES.keys)
423
+ end
424
+ end
425
+ end