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,310 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class Dracurouge_Korean < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'Dracurouge:Korean'
8
+
9
+ # ゲームシステム名
10
+ NAME = '드라크루주'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = '国際化:Korean:드라크루주'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~MESSAGETEXT
17
+ ・행동판정(DRx+y)
18
+  x:굴리는 주사위의 수(생략시4), y:갈증수정(생략시0)
19
+  예) DR DR6 DR+1 DR5+2
20
+ ・저항판정(DRRx)
21
+  x:굴리는 주사위의
22
+  예) DRR3
23
+ ・타락표(CTx) x:갈증(예) CT3
24
+ ・타락의 전조표(CS)
25
+ ・인연 내용 결정표(BT)
26
+ ・반응표(RTxy)x:혈통, y:길 xy생략으로 일괄표시
27
+   혈통 D:드라크, R:로젠부르크, H:헬스가르드, M:더스트하임,
28
+      A:아발롬 N:노스페라스
29
+   길  F:영주, G:근위, R:방랑, W:현자, J:사냥꾼, N:야수
30
+  예)RT(일괄표시), RTDF(드라크 영주), RTAN(아발롬 야수)
31
+ ・D66 다이스 있음
32
+ MESSAGETEXT
33
+
34
+ def initialize(command)
35
+ super(command)
36
+ @enabled_d66 = true
37
+ @d66_sort_type = D66SortType::NO_SORT
38
+ end
39
+
40
+ def eval_game_system_specific_command(command)
41
+ debug('eval_game_system_specific_command')
42
+
43
+ result = getConductResult(command)
44
+ return result unless result.nil?
45
+
46
+ result = getResistResult(command)
47
+ return result unless result.nil?
48
+
49
+ result = getReactionResult(command)
50
+ return result unless result.nil?
51
+
52
+ result = getCorruptionResult(command)
53
+ return result unless result.nil?
54
+
55
+ result = getTableResult(command)
56
+ return result unless result.nil?
57
+
58
+ return nil
59
+ end
60
+
61
+ def getConductResult(command)
62
+ return nil unless command =~ /^DR(\d*)(\+(\d+))?$/
63
+
64
+ diceCount = Regexp.last_match(1).to_i
65
+ diceCount = 4 if diceCount == 0
66
+ thirstyPoint = Regexp.last_match(3).to_i
67
+
68
+ diceList = @randomizer.roll_barabara(diceCount, 6).sort
69
+
70
+ gloryDiceCount = getGloryDiceCount(diceList)
71
+ gloryDiceCount.times { diceList << 10 }
72
+
73
+ diceList, calculationProcess = getThirstyAddedResult(diceList, thirstyPoint)
74
+ thirstyPointMarker = (thirstyPoint == 0 ? "" : "+#{thirstyPoint}")
75
+
76
+ result = "(#{command}) > #{diceCount}D6#{thirstyPointMarker} > "
77
+ result += "[ #{calculationProcess} ] > " unless calculationProcess.empty?
78
+ result += "[ #{diceList.join(', ')} ]"
79
+ return result
80
+ end
81
+
82
+ def getGloryDiceCount(diceList)
83
+ oneCount = countTargetDice(diceList, 1)
84
+ sixCount = countTargetDice(diceList, 6)
85
+
86
+ gloryDiceCount = (oneCount / 2) + (sixCount / 2)
87
+ return gloryDiceCount
88
+ end
89
+
90
+ def countTargetDice(diceList, target)
91
+ diceList.select { |i| i == target }.count
92
+ end
93
+
94
+ def getThirstyAddedResult(diceList, thirstyPoint)
95
+ return diceList, '' if thirstyPoint == 0
96
+
97
+ targetIndex = diceList.rindex { |i| i <= 6 }
98
+ return diceList, '' if targetIndex.nil?
99
+
100
+ textList = []
101
+
102
+ diceList.each_with_index do |item, index|
103
+ if targetIndex == index
104
+ textList << "#{item}+#{thirstyPoint}"
105
+ else
106
+ textList << item.to_s
107
+ end
108
+ end
109
+
110
+ diceList[targetIndex] += thirstyPoint
111
+
112
+ return diceList, textList.join(', ')
113
+ end
114
+
115
+ def getResistResult(command)
116
+ return nil unless command =~ /^DRR(\d+)$/
117
+
118
+ diceCount = Regexp.last_match(1).to_i
119
+ diceCount = 4 if diceCount == 0
120
+
121
+ diceList = @randomizer.roll_barabara(diceCount, 6).sort
122
+
123
+ return "(#{command}) > #{diceCount}D6 > [ #{diceList.join(', ')} ]"
124
+ end
125
+
126
+ def getReactionResult(command)
127
+ return nil unless command.upcase =~ /^RT((\w)(\w))?/
128
+
129
+ typeText1 = Regexp.last_match(2)
130
+ typeText2 = Regexp.last_match(3)
131
+
132
+ name = "반응표"
133
+ table = getReactionTable
134
+ tableText, number = get_table_by_d66(table)
135
+
136
+ type1 = ['드라크', '로젠부르크', '헬스가르드', '더스트하임', '아발롬', '노스페라스']
137
+ type1_indexTexts = ['D', 'R', 'H', 'M', 'A', 'N']
138
+ type2 = ['영주', '근위', '방랑', '현자', '사냥꾼', '야수']
139
+ type2_indexTexts = ['F', 'G', 'R', 'W', 'J', 'N']
140
+
141
+ tensValue = number.to_i / 10
142
+ isBefore = (tensValue < 4)
143
+ type = (isBefore ? type1 : type2)
144
+ indexTexts = (isBefore ? type1_indexTexts : type2_indexTexts)
145
+ typeText = (isBefore ? typeText1 : typeText2)
146
+
147
+ resultText = ''
148
+ if typeText.nil?
149
+ resultText = getReactionTextFull(type, tableText)
150
+ else
151
+ index = indexTexts.index(typeText)
152
+ return nil if index.nil?
153
+
154
+ resultText = getReactionTex(index, type, tableText)
155
+ end
156
+
157
+ return "#{name}(#{number}) > #{resultText}"
158
+ end
159
+
160
+ def getReactionTextFull(type, tableText)
161
+ resultTexts = []
162
+
163
+ type.count.times do |index|
164
+ resultTexts << getReactionTex(index, type, tableText)
165
+ end
166
+
167
+ return resultTexts.join('/')
168
+ end
169
+
170
+ def getReactionTex(index, type, tableText)
171
+ typeName = type[index]
172
+ texts = tableText.split(/\t/)
173
+ string = texts[index]
174
+
175
+ return "#{typeName}:#{string}"
176
+ end
177
+
178
+ def getReactionTable
179
+ text = <<~TEXT_BLOCK
180
+ 하늘에 빛나는 붉은 달을 올려본다 콧방귀를 뀐다 헛기침을 한다 미간을 찌푸리고 생각에 잠긴다 하품을 참는다 명왕령의 방향을 노려본다
181
+ 작게 한숨을 쉰다 앞머리를 쓸어 올린다 눈썹을 찌푸린다 주변을 평가하는 눈으로 본다 머리를 긁적인다 혀를 찬다
182
+ 상대를 내려다보듯이 본다 자신의 머리를 만진다 투덜거린다 손에 책을 구현화시켜 적어넣는다 손에 생긴 과일을 먹는다 고개숙여 바닥이나 지면을 노려본다
183
+ 지그시 눈을 감고 말을 건다 혼자서 작게 웃는다 무표정하게 상대를 관찰한다 재미없다는 듯이 바라본다 붙임성 좋은 웃음을 짓는다 무의식적으로 눈물이 흐른다
184
+ 희미하게 미소짓는다 콧노래를 부른다 발밑에 지옥문이 생긴다 안정된 발걸음으로 다가간다 밤새가 어깨에 날아든다 입술을 깨문다
185
+ 품 속에서 박쥐가 날아오른다 한쪽 발을 중심으로 빙그르르 돈다 주변에 작게 원망하는 목소리가 울린다 눈을 감고 과거를 생각한다 검은 고양이가 발밑에 재롱부리며 달라붙는다 가슴을 누르고 지그시 생각한다
186
+ 머리 위를 박쥐가 소용돌이 치듯이 난다 꽃잎을 구현화해 흩날린다 비난하는 듯한 눈빛을 향한다 발자취에 옅은 안개가 낀다 주변에 요정의 빛이 춤춘다 고개를 크게 흔들어 사념을 쫓는다
187
+ 눈썹을 찌푸리는 동시에 눈이 붉게 빛난다 의상이나 갑옷의 색이나 장식을 바꾼다 직립부동의 자세로 서있는다 쓴웃음을 지으며 다가선다 순식간에 상대편에 나타난다 마음 속의 분노로 험악한 얼굴이 된다
188
+ 손에 있는 와인을 가볍게 마신다 자신에게 취해 눈을 감는다 질린듯한 모습으로 한숨을 쉰다 현상을 분석하는 혼잣말을 한다 순식간에 상대에게서 멀어진다 의연한 태도로 맞선다
189
+ 몸 전체에서 옅은 붉은 색의 오오라가 피어난다 구현화한 꽃을 손에서 가지고 논다 갑자기 돌아서며 노려본다 흥미깊은듯이 질문한다 벌레나 식물에게 정신이 팔린다 마른 웃음소리를 흘린다
190
+ 겁 없는 웃음을 짓는다 마음에 드는 상대를 꼬시려고 한다 주변의 공기가 얼어붙는다 눈 앞의 양식에 불평을 말한다 순수한 웃음을 보인다 자신의 혈족을 깎아내리는 말을 한다
191
+ 바람 없이 머리카락이 날린다 어깨를 움츠린다 가슴에 손을 얹고 자신을 안정시킨다 무감동하게 가볍게 인사한다 실수로 누군가를 말려들게해서 넘어진다 조용한 분노와 함께 눈이 창백하게 빛난다
192
+ 질린 눈으로 상대를 응시한다 자신의 무기에 입맞춤을 한다 손에 구현화한 사슬을 가지고 논다 손에 구현화한 펜을 가지고 논다 누군가에게 응석부리듯이 기댄다 들꽃을 만지고 그것을 시들게 한다
193
+ 발밑에 작은 회오리바람이 일어난다 권유하는 듯이 누군가의 손을 잡는다 주변을 엄격한 눈으로 바라본다 눈을 뜨고 감탄한다 웃음을 띠며 고개를 끄덕인다 지친 모습으로 희미하게 빛나는 숨을 내뱉는다
194
+ 격정이나 긴장감에 머리가 거꾸로 선다 악기를 구현화해 연주한다 동료에게 의심의 시선을 보낸다 책, 소매, 망토 등으로 입가를 가린다 작게 고개를 갸웃거린다 자신의 문장을 멍하게 바라본다
195
+ 붉은 달빛을 받으며 눈을 감는다 상대에게 윙크한다 감정에 맞춰 주변에 사슬이 구현화된다 공중에 떠서 미끄러지듯이 나아간다 수많은 검은 깃털이 하늘에 흩날린다 자조적으로 작게 웃는다
196
+ 무기를 들고 맹세를 선창한다 의상에 붙은 먼지를 털어낸다 타락에 대해 충고한다 무감정하게 상황을 분석한다 과일을 꺼내서 먹는다 지친 눈으로 멍하게 다른 사람을 본다
197
+ 자신의 문장을 쭉 바라본다 망토에서 무수한 나비가 날아오른다 차가운 시선으로 상대를 훑어본다 순간, 모습이 안개에 휩싸여 희미해진다 뭔가 있어 보이는 말이나 행동을 한다 뭔가 결심한듯한듯이 얼굴을 들어올린다
198
+ 상대의 눈을 들여다 봐 마음을 짐작한다 주군의 옆에 살짝 다가선다 일전의 싸움에 대해 얘기한다 상대를 헤아리듯이 바라본다 “적”을 생각해내 험악한 눈이 된다 짐승과 같이 거칠게 호흡한다
199
+ 자신의 영지를 생각한다 문장이 새겨진 방패를 들어 올린다 바람에 머리카락이 나부낀다 안경을 구현화해 쓴다 침을 뱉는다 그렁그렁한 눈으로 상대를 올려다본다
200
+ 종자를 시중들게 한다 무기를 차고 기품있게 인사한다 구현화한 탈것을 쓰다듬는다 조그마한 점을 주의깊게 본다 구현화한 무기를 쓰다듬는다 고개를 숙이고 심호흡한다
201
+ 종자의 시중을 받는다 자신의 방패의 문장을 손가락으로 따라그린다 동료의 어깨를 두드린다, 혹은 안는다 과장되게 한숨을 쉬어보인다 음울한 눈으로 허공을 노려본다 벽이나 바닥에 손톱을 세워 할퀸다
202
+ 마음에 드는 상대에게 손짓한다 다른 기사에게 바싹 다가간다 상쾌하게 웃는다 눈을 감고 사색에 잠긴다 옷자락에서 나타난 뱀이나 거미를 쓰다듬는다 자신에게 이르는 혼잣말을 한다
203
+ 근심에 가득차 생각에 잠긴다 주군의 등뒤에서 상대를 노려본다 소리 높여 이름을 댄다 다른 기사에게 조언한다 골똘히 생각하는 눈으로 밤하늘을 본다 타락의 전조를 지그시 본다
204
+ 무겁게 끄덕인다 주군의 앞, 또는 옆에서 무릎꿇는다 주변에 적극적으로 말을 건다 얼버무리듯이 헛기침을 한다 자신의 무기를 핥는다 다른 기사에게서 눈을 돌린다
205
+ 상냥한 미소를 짓는다 겸연쩍다는듯 얼굴을 붉힌다 자신의 이름에 맹세한다 작게 인사한다 어둡게 웃음짓는다 다른 기사의 눈치를 살핀다
206
+ 슬쩍 자신의 문장을 보여준다 누군가의 앞을 가로막고 선다 과장되게 누군가를 치켜세운다 다른 기사에게 눈으로 신호를 보낸다 그늘에 숨는다 상대를 노려보며 신음한다
207
+ 와인잔을 다른 기사에게 건넨다 정신사납게 돌아다닌다 다른 기사에게 시합을 신청한다 불가사의한 웃음을 짓는다 다른 기사의 문장을 관찰한다 자신의 손가락을 가볍게 핥는다
208
+ 가만히 풍경을 바라본다 수줍은 웃음을 짓는다 망토를 과장되게 펄럭인다 하늘에 뜬 별들을 바라본다 분위기를 못읽는 발언을 한다 다른 기사에게 거리를 두어진다
209
+ 손바닥에 체스말을 구현화한다 긴장한 시선으로 주변을 둘러본다 상대를 치켜 세우며 입맞춤을 요구한다 깊은 지식으로 자세한 설명을 한다 갑자기 뒤돌아보며 등뒤를 경계한다 영악한 웃음을 짓는다
210
+ 가슴을 펴고 자신있게 발언한다 마음 속에서 다른 기사와 시합을 한다 자신의 고향을 떠올린다 미래에 대해 점쳐본다 과거의 원통함에 피눈물을 흘린다 자신의 피부를 손톱등으로 상처입힌다
211
+ 빠르게 사죄한다 가만히 기다리고 있는다 자신의 문장에 대해 얘기한다 사소한 예언을 한다 상어와 같이 웃는다 몰래 입맛을 다신다
212
+ 다른 기사를 정면에서 칭찬한다 주군을 지그시 바라본다 다른 기사와 잡담을 한다 소문의 일종을 다른 기사에게 속삭인다 그 자리에 없는 기사를 비웃는다 요염하게 곁눈질을 보낸다
213
+ 다른 기사의 머리나 볼을 쓰다듬는다 주군을 치켜 세운다 곤란한듯이 작게 신음한다 사소한 물건을 흥미깊게 관찰한다 다른 기사와의 거리를 느낀다 애처로운 눈으로 자신의 문장을 바라본다
214
+ 우렁차게 이름을 댄다 주군의 소매를 꽉 쥔다 윗사람의 앞에서 무릎을 꿇고 예를 다한다 달을 올려다보고 드라쿨을 칭송한다 나직하게 이름을 댄다 사냥감을 노리는 눈으로 다른 기사를 본다
215
+ 입가를 가리며 기품있게 웃는다 주군에 대한 주변의 태도를 비난한다 아랫사람에게 미소짓는다 다른 기사의 감정에 충고한다 아랫사람을 내려다보는 눈으로 본다 자학적인 말을 한다
216
+ TEXT_BLOCK
217
+
218
+ return text.split(/\n/)
219
+ end
220
+
221
+ def getCorruptionResult(command)
222
+ return nil unless command.upcase =~ /^CT(\d+)$/
223
+
224
+ modify = Regexp.last_match(1).to_i
225
+
226
+ name = "타락표"
227
+ table =
228
+ [
229
+ [0, "당신은 완전히 타락했다. 이 시점에서 당신은 [월 플라워]가 되어 늑대인간, 검은 산양, 야수 중 하나가 된다. 그 [막]의 종료 후에 세션에서 퇴장한다. 247페이지의 「소멸・완전한 타락」을 참조한다."],
230
+ [1, "당신의 육체는 정신에 걸맞는 변화를 일으킨다……. 「타락의 전조표」를 2번 굴리고 특징을 얻는다. 이 세션 종료 후, 【길】을 「야수」로 변경한다.(이미「야수」라면 【길】은 변하지 않는다)"],
231
+ [3, "당신의 육체는 정신에 걸맞는 변화를 일으킨다……. 「타락의 전조표」를 1번 굴리고 특징을 얻는다. 이 세션 종료 후, 【길】을 「야수」로 변경한다.(이미「야수」라면 【길】은 변하지 않는다)"],
232
+ [5, "고귀한 마음도 언젠가는 타락한다. 당신이 지금 가장 많은 루주를 얻은 대상에 대한 루주를 전부 잃고, 같은 수 만큼의 누아르를 얻는다. 누아르를 얻은 결과, 【갈증】이 3점 이상이 된 경우 다시 타락표를 굴린다."],
233
+ [6, "내면에 잠든 짐승의 숨결……당신이 지금 【갈증】을 얻은 누아르의 대상에게 임의의 누아르 2점을 획득한다."],
234
+ [7, "내면에 잠든 짐승의 숨결……당신이 지금 【갈증】을 얻은 누아르의 대상에게 임의의 누아르 1점을 획득한다."],
235
+ [8, "날뛰는 마음을 가라앉힌다……다행히 아무 일도 없었다."],
236
+ [99, "당신은 미쳐 날뛰는 감정을 억누르고 이성을 되찾았다! 【갈증】이 1 감소한다!"],
237
+ ]
238
+
239
+ dice_list = @randomizer.roll_barabara(2, 6)
240
+ number = dice_list.sum()
241
+ number_text = dice_list.join(",")
242
+
243
+ index = (number - modify)
244
+ debug('index', index)
245
+ text = get_table_by_number(index, table)
246
+
247
+ return "2D6[#{number_text}]-#{modify} > #{name}(#{index}) > #{text}"
248
+ end
249
+
250
+ def getTableResult(command)
251
+ info = TABLES[command.upcase]
252
+ return nil if info.nil?
253
+
254
+ name = info[:name]
255
+ type = info[:type]
256
+ table = info[:table]
257
+
258
+ text, number =
259
+ case type
260
+ when '2D6'
261
+ get_table_by_2d6(table)
262
+ when '1D6'
263
+ get_table_by_1d6(table)
264
+ end
265
+
266
+ return nil if text.nil?
267
+
268
+ return "#{name}(#{number}) > #{text}"
269
+ end
270
+
271
+ def getCorruptionTable; end
272
+
273
+ TABLES =
274
+ {
275
+ 'CS' => {
276
+ name: "타락의 전조표",
277
+ type: '2D6',
278
+ table: [
279
+ "당신은 완전히 타락했다. 이 시점에서 당신은 [월 플라워]가 되어 늑대인간, 검은 산양, 야수 중 하나가 된다. 그 [막]의 종료 후에 세션에서 퇴장한다. 247페이지의 「소멸・완전한 타락」을 참조한다.",
280
+ "짐승 그 자체의 머리(늑대, 산양, 박쥐 중 하나)",
281
+ "밤새의 날개",
282
+ "박쥐의 날개",
283
+ "갈퀴발톱이 있는 이형의 팔",
284
+ "뒤틀린 두 개의 뿔",
285
+ "늑대의 귀와 꼬리",
286
+ "창백해진 피부",
287
+ "이상한 빛을 발하는 눈",
288
+ "튀어나온 송곳니",
289
+ "눈에 보이는 변화는 없다……",
290
+ ],
291
+ },
292
+
293
+ 'BT' => {
294
+ name: "인연 내용 결정표:루주/누아르",
295
+ type: '1D6',
296
+ table: [
297
+ "연민(Pity) 상대를 불쌍히 여기고 동정한다. /모멸(Contempt) 상대를 깔보고 경멸한다.",
298
+ "친구(Friend) 상대에게 우정을 갖는다. /질투(Jealousy) 상대를 부러워하고 질투한다. ",
299
+ "신뢰(Trust) 상대를 신뢰한다. /욕망(Desire) 상대를 원하고 나의 것으로 만들고 싶어한다.",
300
+ "사랑(Love) 상대를 좋아하고 사랑한다. /분노(Anger) 상대에게 분노를 느낀다. ",
301
+ "존경(Respect) 상대의 실력이나 정신을 존경한다. /살의(Kill) 상대에게 살의를 느끼고 없애고자 한다.",
302
+ "복종(Obey) 상대를 주군으로서 받들고 충의를 맹세한다. /복수(Vendetta) 상대를 원망하고 원수로 여긴다.",
303
+ ],
304
+ },
305
+ }.freeze
306
+
307
+ register_prefix(['DR.*', 'RT.*', 'CT\d+'] + TABLES.keys)
308
+ end
309
+ end
310
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class DungeonsAndDragons < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'DungeonsAndDragons'
8
+
9
+ # ゲームシステム名
10
+ NAME = 'ダンジョンズ&ドラゴンズ'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'たんしよんすあんととらこんす'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = "※このダイスボットは部屋のシステム名表示用となります。\n"
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,225 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class EarthDawn < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'EarthDawn'
8
+
9
+ # ゲームシステム名
10
+ NAME = 'アースドーン'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'ああすとおん'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
17
+ ステップダイス (xEn+k)
18
+ ステップx、目標値n(省略可能)、カルマダイスk(D2-D20)でステップダイスをロールします。
19
+ 振り足しも自動。
20
+ 例)9E 10E8 10E+D12
21
+ INFO_MESSAGE_TEXT
22
+
23
+ register_prefix(['\d+e.*'])
24
+
25
+ def initialize(command)
26
+ super(command)
27
+
28
+ @sort_add_dice = true
29
+ end
30
+
31
+ def eval_game_system_specific_command(command)
32
+ return ed_step(command)
33
+ end
34
+
35
+ # アースドーンステップ表
36
+ def ed_step(str)
37
+ output = getStepResult(str)
38
+
39
+ return output
40
+ end
41
+
42
+ def getStepResult(str)
43
+ return nil unless /(\d+)E(\d+)?(\+)?(\d+)?(d\d+)?/i =~ str
44
+
45
+ stepTotal = 0
46
+ @isFailed = true
47
+
48
+ step = Regexp.last_match(1).to_i # ステップ
49
+ targetNumber = 0 # 目標値
50
+ hasKarmaDice = false # カルマダイスの有無
51
+ karmaDiceCount = 0 # カルマダイスの個数又は修正
52
+ karmaDiceType = 0 # カルマダイスの種類
53
+
54
+ # 空値があった時の為のばんぺいくんRX
55
+ if step > 40
56
+ step = 40
57
+ end
58
+
59
+ if Regexp.last_match(2)
60
+ targetNumber = Regexp.last_match(2).to_i
61
+ targetNumber = 42 if targetNumber > 43
62
+ end
63
+
64
+ hasKarmaDice = Regexp.last_match(3).to_i if Regexp.last_match(3)
65
+ karmaDiceCount = Regexp.last_match(4).to_i if Regexp.last_match(4)
66
+ karmaDiceType = Regexp.last_match(5) if Regexp.last_match(5)
67
+
68
+ return nil if targetNumber < 0
69
+
70
+ stable = getStepTable()
71
+
72
+ nmod = stable[0][step - 1]
73
+ d20step = stable[1][step - 1]
74
+ d12step = stable[2][step - 1]
75
+ d10step = stable[3][step - 1]
76
+ d8step = stable[4][step - 1]
77
+ d6step = stable[5][step - 1]
78
+ d4step = stable[6][step - 1]
79
+
80
+ if hasKarmaDice
81
+ case karmaDiceType
82
+ when /d20/i
83
+ d20step += karmaDiceCount
84
+ when /d12/i
85
+ d12step += karmaDiceCount
86
+ when /d10/i
87
+ d10step += karmaDiceCount
88
+ when /d8/i
89
+ d8step += karmaDiceCount
90
+ when /d6/i
91
+ d6step += karmaDiceCount
92
+ when /d4/i
93
+ d4step += karmaDiceCount
94
+ else
95
+ nmod += karmaDiceCount
96
+ end
97
+ end
98
+
99
+ @string = ""
100
+
101
+ debug('d20step, d12step, d10step, d8step, d6step, d4step', d20step, d12step, d10step, d8step, d6step, d4step)
102
+
103
+ stepTotal += rollStep(20, d20step)
104
+ stepTotal += rollStep(12, d12step)
105
+ stepTotal += rollStep(10, d10step)
106
+ stepTotal += rollStep(8, d8step)
107
+ stepTotal += rollStep(6, d6step)
108
+ stepTotal += rollStep(4, d4step)
109
+
110
+ if nmod > 0 # 修正分の適用
111
+ @string += "+"
112
+ end
113
+
114
+ if nmod != 0
115
+ @string += nmod.to_s
116
+ stepTotal += nmod
117
+ end
118
+
119
+ # ステップ判定終了
120
+ @string += " > #{stepTotal}"
121
+
122
+ output = "ステップ#{step} > #{@string}"
123
+ return output if targetNumber == 0
124
+
125
+ # 結果判定
126
+ @string += ' > '
127
+
128
+ excelentSuccessNumber = stable[7][targetNumber - 1]
129
+ superSuccessNumber = stable[8][targetNumber - 1]
130
+ goodSuccessNumber = stable[9][targetNumber - 1]
131
+ failedNumber = stable[11][targetNumber - 1]
132
+
133
+ if @isFailed
134
+ @string += '自動失敗'
135
+ elsif stepTotal >= excelentSuccessNumber
136
+ @string += '最良成功'
137
+ elsif stepTotal >= superSuccessNumber
138
+ @string += '優成功'
139
+ elsif stepTotal >= goodSuccessNumber
140
+ @string += '良成功'
141
+ elsif stepTotal >= targetNumber
142
+ @string += '成功'
143
+ elsif stepTotal < failedNumber
144
+ @string += '大失敗'
145
+ else
146
+ @string += '失敗'
147
+ end
148
+
149
+ output = "ステップ#{step}>=#{targetNumber} > #{@string}"
150
+
151
+ return output
152
+ end
153
+
154
+ def getStepTable
155
+ # 表 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 34x 3x 4x 5x 6x 7x 8x 9x10x11x12x13x
156
+
157
+ mod = [-2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,]
158
+ d20 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,]
159
+ d12 = [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1,]
160
+ d10 = [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 3, 2, 1, 1, 1, 2, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 1,]
161
+ d8 = [0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0,]
162
+ d6 = [0, 0, 0, 1, 0, 0, 0, 2, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 1, 0, 0, 0,]
163
+ d4 = [1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,]
164
+ exsuc = [6, 8, 10, 12, 14, 17, 19, 20, 22, 24, 25, 27, 29, 32, 33, 35, 37, 38, 39, 41, 42, 44, 45, 47, 48, 49, 51, 52, 54, 55, 56, 58, 59, 60, 62, 64, 65, 67, 68, 70, 71, 72,]
165
+ ssuc = [4, 6, 8, 10, 11, 13, 15, 16, 18, 19, 21, 22, 24, 26, 27, 29, 30, 32, 33, 34, 35, 37, 38, 40, 41, 42, 43, 45, 46, 47, 48, 49, 51, 52, 53, 55, 56, 58, 59, 60, 61, 62,]
166
+ gsuc = [2, 4, 6, 7, 9, 10, 12, 13, 14, 15, 17, 18, 20, 21, 22, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, 50, 51, 52, 53, 54,]
167
+ nsuc = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,]
168
+ fsuc = [0, 1, 1, 1, 1, 2, 2, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 11, 12, 13, 13, 14, 15, 16, 17, 18, 18, 18, 20, 21, 22, 23, 23, 24, 25, 26, 26, 27, 28, 29, 30,]
169
+
170
+ stable = [mod, d20, d12, d10, d8, d6, d4, exsuc, ssuc, gsuc, nsuc, fsuc]
171
+
172
+ return stable
173
+ end
174
+
175
+ # 41以上のステップの為の配列です。
176
+ # 以下のようなルールでダイスを増やしています。より正しいステップ計算法をご存知の方は、
177
+ # どうぞそちらに合せて調整して下さい。
178
+ #  基本: 2d20+d10+d8
179
+ #  これを仮にステップ34xとしています。
180
+ #  一般式としては、ステップxxのダイスは、
181
+
182
+ #   ステップ34xのダイス
183
+ # + [(xx-45)/11]d20
184
+ # + ステップ[(xx-34)を11で割った余り+3]のダイス
185
+
186
+ def rollStep(diceType, diceCount)
187
+ debug('rollStep diceType, diceCount, @string', diceType, diceCount, @string)
188
+
189
+ stepTotal = 0
190
+ return stepTotal unless diceCount > 0
191
+
192
+ # diceぶんのステップ判定
193
+
194
+ @string += "+" unless @string.empty?
195
+ @string += "#{diceCount}d#{diceType}["
196
+ debug('rollStep @string', @string)
197
+
198
+ diceCount.times do |i|
199
+ dice_now = @randomizer.roll_once(diceType)
200
+
201
+ if dice_now != 1
202
+ @isFailed = false
203
+ end
204
+
205
+ dice_in = dice_now
206
+
207
+ while dice_now == diceType
208
+ dice_now = @randomizer.roll_once(diceType)
209
+
210
+ dice_in += dice_now
211
+ end
212
+
213
+ stepTotal += dice_in
214
+
215
+ @string += ',' if i != 0
216
+ @string += dice_in.to_s
217
+ end
218
+
219
+ @string += "]"
220
+
221
+ return stepTotal
222
+ end
223
+ end
224
+ end
225
+ end