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,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