bcdice 3.0.0.pre.alpha.1 → 3.0.0.pre.alpha.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (255) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +1 -1
  3. data/.rubocop.yml +12 -0
  4. data/.rubocop_todo.yml +1 -0
  5. data/CHANGELOG.md +34 -0
  6. data/Gemfile +6 -3
  7. data/Rakefile +52 -18
  8. data/bcdice.gemspec +2 -0
  9. data/i18n/Amadeus/ja_jp.yml +386 -0
  10. data/i18n/Amadeus/ko_kr.yml +148 -0
  11. data/i18n/Cthulhu/ja_jp.yml +11 -0
  12. data/i18n/Cthulhu/ko_kr.yml +11 -0
  13. data/i18n/Cthulhu/zh_hant.yml +11 -0
  14. data/i18n/DetatokoSaga/ja_jp.yml +74 -0
  15. data/i18n/DetatokoSaga/ko_kr.yml +74 -0
  16. data/i18n/DoubleCross/ja_jp.yml +53 -0
  17. data/i18n/DoubleCross/ko_kr.yml +53 -0
  18. data/i18n/Dracurouge/ja_jp.yml +1374 -0
  19. data/i18n/Dracurouge/ko_kr.yml +295 -0
  20. data/i18n/Fiasco/ja_jp.yml +10 -0
  21. data/i18n/Fiasco/ko_kr.yml +10 -0
  22. data/i18n/FutariSousa/ja_jp.yml +720 -0
  23. data/i18n/FutariSousa/ko_kr.yml +746 -0
  24. data/i18n/Insane/ja_jp.yml +454 -0
  25. data/i18n/Insane/ko_kr.yml +502 -0
  26. data/i18n/Kamigakari/ja_jp.yml +276 -0
  27. data/i18n/Kamigakari/ko_kr.yml +204 -0
  28. data/i18n/KillDeathBusiness/ja_jp.yml +1092 -0
  29. data/i18n/KillDeathBusiness/ko_kr.yml +1062 -0
  30. data/i18n/LogHorizon/ja_jp.yml +3082 -0
  31. data/i18n/LogHorizon/ko_kr.yml +923 -0
  32. data/i18n/MagicaLogia/ja_jp.yml +564 -0
  33. data/i18n/MonotoneMuseum/ja_jp.yml +525 -0
  34. data/i18n/MonotoneMuseum/ko_kr.yml +89 -0
  35. data/i18n/Nechronica/ja_jp.yml +57 -0
  36. data/i18n/Nechronica/ko_kr.yml +14 -0
  37. data/i18n/StratoShout/ja_jp.yml +160 -0
  38. data/i18n/StratoShout/ko_kr.yml +160 -0
  39. data/i18n/ja_jp.yml +5 -0
  40. data/i18n/ko_kr.yml +7 -0
  41. data/i18n/zh_hant.yml +3 -0
  42. data/lib/bcdice/arithmetic/node.rb +154 -0
  43. data/lib/bcdice/base.rb +87 -101
  44. data/lib/bcdice/common_command.rb +2 -0
  45. data/lib/bcdice/common_command/add_dice.rb +5 -41
  46. data/lib/bcdice/common_command/add_dice/node.rb +92 -16
  47. data/lib/bcdice/common_command/add_dice/parser.rb +374 -274
  48. data/lib/bcdice/common_command/add_dice/parser.y +153 -0
  49. data/lib/bcdice/common_command/add_dice/randomizer.rb +25 -33
  50. data/lib/bcdice/common_command/barabara_dice.rb +6 -47
  51. data/lib/bcdice/common_command/barabara_dice/node.rb +84 -0
  52. data/lib/bcdice/common_command/barabara_dice/parser.rb +336 -0
  53. data/lib/bcdice/common_command/barabara_dice/parser.y +107 -0
  54. data/lib/bcdice/common_command/calc.rb +7 -30
  55. data/lib/bcdice/common_command/calc/node.rb +30 -0
  56. data/lib/bcdice/common_command/calc/parser.rb +271 -0
  57. data/lib/bcdice/common_command/calc/parser.y +79 -0
  58. data/lib/bcdice/common_command/choice.rb +137 -19
  59. data/lib/bcdice/common_command/d66_dice.rb +48 -34
  60. data/lib/bcdice/common_command/lexer.rb +46 -0
  61. data/lib/bcdice/common_command/repeat.rb +102 -0
  62. data/lib/bcdice/common_command/reroll_dice.rb +8 -158
  63. data/lib/bcdice/common_command/reroll_dice/node.rb +198 -0
  64. data/lib/bcdice/common_command/reroll_dice/parser.rb +421 -0
  65. data/lib/bcdice/common_command/reroll_dice/parser.y +158 -0
  66. data/lib/bcdice/common_command/upper_dice.rb +10 -129
  67. data/lib/bcdice/common_command/upper_dice/node.rb +181 -0
  68. data/lib/bcdice/common_command/upper_dice/parser.rb +412 -0
  69. data/lib/bcdice/common_command/upper_dice/parser.y +143 -0
  70. data/lib/bcdice/common_command/version.rb +9 -17
  71. data/lib/bcdice/deprecated/checker.rb +78 -0
  72. data/lib/bcdice/dice_table/d66_grid_table.rb +8 -0
  73. data/lib/bcdice/dice_table/d66_table.rb +10 -0
  74. data/lib/bcdice/dice_table/sai_fic_skill_table.rb +75 -17
  75. data/lib/bcdice/dice_table/sai_fic_skill_table/category.rb +25 -0
  76. data/lib/bcdice/dice_table/sai_fic_skill_table/skill.rb +23 -0
  77. data/lib/bcdice/dice_table/table.rb +8 -0
  78. data/lib/bcdice/game_system.rb +7 -1
  79. data/lib/bcdice/game_system/AFF2e.rb +1 -1
  80. data/lib/bcdice/game_system/AceKillerGene.rb +2 -2
  81. data/lib/bcdice/game_system/Airgetlamh.rb +3 -3
  82. data/lib/bcdice/game_system/Alsetto.rb +1 -1
  83. data/lib/bcdice/game_system/Alshard.rb +1 -1
  84. data/lib/bcdice/game_system/AlterRaise.rb +2 -2
  85. data/lib/bcdice/game_system/Amadeus.rb +46 -507
  86. data/lib/bcdice/game_system/Amadeus_Korean.rb +12 -456
  87. data/lib/bcdice/game_system/AnimaAnimus.rb +1 -1
  88. data/lib/bcdice/game_system/Arianrhod.rb +0 -1
  89. data/lib/bcdice/game_system/ArsMagica.rb +1 -1
  90. data/lib/bcdice/game_system/Avandner.rb +1 -1
  91. data/lib/bcdice/game_system/BBN.rb +1 -1
  92. data/lib/bcdice/game_system/BadLife.rb +1 -1
  93. data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
  94. data/lib/bcdice/game_system/BeastBindTrinity.rb +1 -2
  95. data/lib/bcdice/game_system/BeginningIdol.rb +2 -3
  96. data/lib/bcdice/game_system/BeginningIdol_Korean.rb +2 -3
  97. data/lib/bcdice/game_system/BladeOfArcana.rb +2 -2
  98. data/lib/bcdice/game_system/BlindMythos.rb +1 -1
  99. data/lib/bcdice/game_system/BloodCrusade.rb +0 -1
  100. data/lib/bcdice/game_system/BloodMoon.rb +0 -1
  101. data/lib/bcdice/game_system/CardRanker.rb +1 -2
  102. data/lib/bcdice/game_system/ChaosFlare.rb +1 -1
  103. data/lib/bcdice/game_system/Chill.rb +1 -1
  104. data/lib/bcdice/game_system/CodeLayerd.rb +1 -1
  105. data/lib/bcdice/game_system/ColossalHunter.rb +1 -2
  106. data/lib/bcdice/game_system/Comes.rb +50 -0
  107. data/lib/bcdice/game_system/CrashWorld.rb +1 -1
  108. data/lib/bcdice/game_system/Cthulhu.rb +94 -97
  109. data/lib/bcdice/game_system/Cthulhu7th.rb +108 -67
  110. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
  111. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
  112. data/lib/bcdice/game_system/CthulhuTech.rb +8 -14
  113. data/lib/bcdice/game_system/Cthulhu_ChineseTraditional.rb +7 -190
  114. data/lib/bcdice/game_system/Cthulhu_Korean.rb +5 -186
  115. data/lib/bcdice/game_system/DarkBlaze.rb +9 -5
  116. data/lib/bcdice/game_system/DarkDaysDrive.rb +17 -15
  117. data/lib/bcdice/game_system/DarkSouls.rb +1 -1
  118. data/lib/bcdice/game_system/DeadlineHeroes.rb +2 -2
  119. data/lib/bcdice/game_system/DemonParasite.rb +1 -2
  120. data/lib/bcdice/game_system/DetatokoSaga.rb +48 -149
  121. data/lib/bcdice/game_system/DetatokoSaga_Korean.rb +6 -274
  122. data/lib/bcdice/game_system/DiceOfTheDead.rb +9 -6
  123. data/lib/bcdice/game_system/DoubleCross.rb +102 -81
  124. data/lib/bcdice/game_system/DoubleCross_Korean.rb +13 -330
  125. data/lib/bcdice/game_system/Dracurouge.rb +376 -1678
  126. data/lib/bcdice/game_system/Dracurouge_Korean.rb +16 -271
  127. data/lib/bcdice/game_system/EarthDawn.rb +1 -1
  128. data/lib/bcdice/game_system/EarthDawn3.rb +1 -1
  129. data/lib/bcdice/game_system/EarthDawn4.rb +1 -1
  130. data/lib/bcdice/game_system/Elysion.rb +3 -4
  131. data/lib/bcdice/game_system/EmbryoMachine.rb +1 -1
  132. data/lib/bcdice/game_system/Emoklore.rb +131 -0
  133. data/lib/bcdice/game_system/EndBreaker.rb +1 -2
  134. data/lib/bcdice/game_system/EtrianOdysseySRS.rb +1 -1
  135. data/lib/bcdice/game_system/Fiasco.rb +87 -70
  136. data/lib/bcdice/game_system/Fiasco_Korean.rb +7 -95
  137. data/lib/bcdice/game_system/FilledWith.rb +462 -566
  138. data/lib/bcdice/game_system/FullMetalPanic.rb +1 -1
  139. data/lib/bcdice/game_system/FutariSousa.rb +103 -938
  140. data/lib/bcdice/game_system/FutariSousa_Korean.rb +7 -948
  141. data/lib/bcdice/game_system/{Gurps.rb → GURPS.rb} +184 -217
  142. data/lib/bcdice/game_system/Garako.rb +131 -39
  143. data/lib/bcdice/game_system/GardenOrder.rb +2 -2
  144. data/lib/bcdice/game_system/GehennaAn.rb +1 -1
  145. data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +1 -1
  146. data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
  147. data/lib/bcdice/game_system/GoldenSkyStories.rb +1 -1
  148. data/lib/bcdice/game_system/Gorilla.rb +1 -1
  149. data/lib/bcdice/game_system/GranCrest.rb +2 -3
  150. data/lib/bcdice/game_system/GundogRevised.rb +1 -1
  151. data/lib/bcdice/game_system/GundogZero.rb +1 -1
  152. data/lib/bcdice/game_system/GurpsFW.rb +2 -3
  153. data/lib/bcdice/game_system/HarnMaster.rb +2 -2
  154. data/lib/bcdice/game_system/HatsuneMiku.rb +1 -2
  155. data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
  156. data/lib/bcdice/game_system/HuntersMoon.rb +1 -2
  157. data/lib/bcdice/game_system/Illusio.rb +2 -2
  158. data/lib/bcdice/game_system/Insane.rb +90 -717
  159. data/lib/bcdice/game_system/Insane_Korean.rb +7 -719
  160. data/lib/bcdice/game_system/Kamigakari.rb +47 -242
  161. data/lib/bcdice/game_system/Kamigakari_Korean.rb +6 -394
  162. data/lib/bcdice/game_system/KanColle.rb +3 -3
  163. data/lib/bcdice/game_system/KemonoNoMori.rb +1 -1
  164. data/lib/bcdice/game_system/KillDeathBusiness.rb +162 -1144
  165. data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +6 -1459
  166. data/lib/bcdice/game_system/KurayamiCrying.rb +1 -1
  167. data/lib/bcdice/game_system/LiveraDoll.rb +2 -2
  168. data/lib/bcdice/game_system/LogHorizon.rb +350 -3379
  169. data/lib/bcdice/game_system/LogHorizon_Korean.rb +55 -1357
  170. data/lib/bcdice/game_system/LostRecord.rb +0 -1
  171. data/lib/bcdice/game_system/LostRoyal.rb +1 -2
  172. data/lib/bcdice/game_system/MagicaLogia.rb +158 -1044
  173. data/lib/bcdice/game_system/MeikyuDays.rb +1 -2
  174. data/lib/bcdice/game_system/MeikyuKingdom.rb +4 -4
  175. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +4 -5
  176. data/lib/bcdice/game_system/MetalHead.rb +1 -1
  177. data/lib/bcdice/game_system/MetalHeadExtream.rb +2 -2
  178. data/lib/bcdice/game_system/MetallicGuardian.rb +1 -1
  179. data/lib/bcdice/game_system/MonotoneMuseum.rb +38 -239
  180. data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +10 -270
  181. data/lib/bcdice/game_system/NSSQ.rb +159 -0
  182. data/lib/bcdice/game_system/Nechronica.rb +34 -73
  183. data/lib/bcdice/game_system/Nechronica_Korean.rb +11 -128
  184. data/lib/bcdice/game_system/NeverCloud.rb +1 -1
  185. data/lib/bcdice/game_system/NightWizard.rb +1 -1
  186. data/lib/bcdice/game_system/NightWizard3rd.rb +1 -1
  187. data/lib/bcdice/game_system/NinjaSlayer.rb +12 -11
  188. data/lib/bcdice/game_system/NjslyrBattle.rb +1 -1
  189. data/lib/bcdice/game_system/OneWayHeroics.rb +1 -2
  190. data/lib/bcdice/game_system/OracleEngine.rb +1 -1
  191. data/lib/bcdice/game_system/OrgaRain.rb +2 -2
  192. data/lib/bcdice/game_system/Paradiso.rb +1 -1
  193. data/lib/bcdice/game_system/Paranoia.rb +1 -1
  194. data/lib/bcdice/game_system/ParanoiaRebooted.rb +1 -1
  195. data/lib/bcdice/game_system/ParasiteBlood.rb +1 -1
  196. data/lib/bcdice/game_system/Peekaboo.rb +22 -122
  197. data/lib/bcdice/game_system/Postman.rb +2 -2
  198. data/lib/bcdice/game_system/PulpCthulhu.rb +3 -3
  199. data/lib/bcdice/game_system/Raisondetre.rb +2 -2
  200. data/lib/bcdice/game_system/RecordOfLodossWar.rb +1 -1
  201. data/lib/bcdice/game_system/RecordOfSteam.rb +1 -1
  202. data/lib/bcdice/game_system/RokumonSekai2.rb +1 -1
  203. data/lib/bcdice/game_system/RuinBreakers.rb +296 -0
  204. data/lib/bcdice/game_system/Ryutama.rb +1 -1
  205. data/lib/bcdice/game_system/SRS.rb +1 -2
  206. data/lib/bcdice/game_system/SamsaraBallad.rb +1 -1
  207. data/lib/bcdice/game_system/Satasupe.rb +1 -2
  208. data/lib/bcdice/game_system/ScreamHighSchool.rb +2 -2
  209. data/lib/bcdice/game_system/SevenFortressMobius.rb +1 -1
  210. data/lib/bcdice/game_system/ShadowRun5.rb +2 -2
  211. data/lib/bcdice/game_system/SharedFantasia.rb +1 -1
  212. data/lib/bcdice/game_system/ShinMegamiTenseiKakuseihen.rb +1 -1
  213. data/lib/bcdice/game_system/ShinkuuGakuen.rb +2 -2
  214. data/lib/bcdice/game_system/ShinobiGami.rb +1 -2
  215. data/lib/bcdice/game_system/ShoujoTenrankai.rb +2 -2
  216. data/lib/bcdice/game_system/Skynauts.rb +1 -1
  217. data/lib/bcdice/game_system/SteamPunkers.rb +1 -1
  218. data/lib/bcdice/game_system/StellarKnights.rb +1 -2
  219. data/lib/bcdice/game_system/SterileLife.rb +1 -1
  220. data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -2
  221. data/lib/bcdice/game_system/StratoShout.rb +44 -247
  222. data/lib/bcdice/game_system/StratoShout_Korean.rb +6 -282
  223. data/lib/bcdice/game_system/Strave.rb +2 -2
  224. data/lib/bcdice/game_system/SwordWorld.rb +8 -9
  225. data/lib/bcdice/game_system/SwordWorld2_0.rb +2 -3
  226. data/lib/bcdice/game_system/SwordWorld2_5.rb +2 -3
  227. data/lib/bcdice/game_system/TherapieSein.rb +1 -1
  228. data/lib/bcdice/game_system/TokumeiTenkousei.rb +1 -1
  229. data/lib/bcdice/game_system/TokyoGhostResearch.rb +2 -2
  230. data/lib/bcdice/game_system/Torg.rb +2 -2
  231. data/lib/bcdice/game_system/Torg1_5.rb +1 -1
  232. data/lib/bcdice/game_system/TorgEternity.rb +1 -1
  233. data/lib/bcdice/game_system/TrinitySeven.rb +1 -1
  234. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +1 -1
  235. data/lib/bcdice/game_system/TwilightGunsmoke.rb +1 -2
  236. data/lib/bcdice/game_system/UnsungDuet.rb +139 -0
  237. data/lib/bcdice/game_system/Utakaze.rb +1 -1
  238. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +1 -1
  239. data/lib/bcdice/game_system/Villaciel.rb +1 -2
  240. data/lib/bcdice/game_system/Warhammer.rb +1 -1
  241. data/lib/bcdice/game_system/Warhammer4.rb +329 -0
  242. data/lib/bcdice/game_system/WitchQuest.rb +1 -1
  243. data/lib/bcdice/game_system/WorldOfDarkness.rb +1 -1
  244. data/lib/bcdice/game_system/YankeeYogSothoth.rb +15 -15
  245. data/lib/bcdice/game_system/YearZeroEngine.rb +1 -1
  246. data/lib/bcdice/game_system/ZettaiReido.rb +1 -1
  247. data/lib/bcdice/game_system/filled_with/cook_tables.rb +119 -0
  248. data/lib/bcdice/game_system/filled_with/lot_tables.rb +155 -0
  249. data/lib/bcdice/loader.rb +6 -8
  250. data/lib/bcdice/preprocessor.rb +15 -40
  251. data/lib/bcdice/repl.rb +1 -1
  252. data/lib/bcdice/result.rb +83 -0
  253. data/lib/bcdice/translate.rb +11 -0
  254. data/lib/bcdice/version.rb +1 -1
  255. metadata +80 -4
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "bcdice/game_system/Dracurouge"
4
+
3
5
  module BCDice
4
6
  module GameSystem
5
- class Dracurouge_Korean < Base
7
+ class Dracurouge_Korean < Dracurouge
6
8
  # ゲームシステムの識別子
7
9
  ID = 'Dracurouge:Korean'
8
10
 
@@ -20,291 +22,34 @@ module BCDice
20
22
  ・저항판정(DRRx)
21
23
   x:굴리는 주사위의
22
24
   예) DRR3
25
+ ・原風景表(ST), 叙勲表(CO), 叙勲後表(CA), 遥か過去表(EP)
26
+  原罪表(OS), 受難表(PN), 近況表(RS), 平和な過去表(PP)
23
27
  ・타락표(CTx) x:갈증(예) CT3
24
- ・타락의 전조표(CS)
28
+ ・타락의 전조표(CS), 拡張・堕落の兆し表(ECS
25
29
  ・인연 내용 결정표(BT)
26
30
  ・반응표(RTxy)x:혈통, y:길 xy생략으로 일괄표시
27
31
    혈통 D:드라크, R:로젠부르크, H:헬스가르드, M:더스트하임,
28
32
       A:아발롬 N:노스페라스
29
33
    길  F:영주, G:근위, R:방랑, W:현자, J:사냥꾼, N:야수
30
34
   예)RT(일괄표시), RTDF(드라크 영주), RTAN(아발롬 야수)
35
+ ・異端の反応表(HRTxy)x:血統, y:道 xy省略で一括表示
36
+  血統 L:異端卿, V:ヴルコラク, N:ナハツェーラ, K:カルンシュタイン
37
+     G:グリマルキン, S:ストリガ, M:メリュジーヌ, F:フォーン
38
+     H:ホムンクルス, E:エナメルム, S2:サングィナリエ, A:アールヴ
39
+     V2:ヴィーヴル, L2:ルーガルー, A2:アルラウネ, F2:フリッガ
40
+  道 W:野伏, N:流浪, S:密使, H:魔女, F:剣士, X:検体
31
41
  ・D66 다이스 있음
32
42
  MESSAGETEXT
33
43
 
44
+ register_prefix_from_super_class()
45
+
34
46
  def initialize(command)
35
47
  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
48
 
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/)
49
+ @locale = :ko_kr
219
50
  end
220
51
 
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)
52
+ TABLES = translate_tables(:ko_kr)
308
53
  end
309
54
  end
310
55
  end
@@ -20,7 +20,7 @@ module BCDice
20
20
  例)9E 10E8 10E+D12
21
21
  INFO_MESSAGE_TEXT
22
22
 
23
- register_prefix(['\d+e.*'])
23
+ register_prefix('\d+e.*')
24
24
 
25
25
  def initialize(command)
26
26
  super(command)
@@ -24,7 +24,7 @@ module BCDice
24
24
    ステップ12、目標値8、カルマダイスD12:10E8+1D6
25
25
  INFO_MESSAGE_TEXT
26
26
 
27
- register_prefix(['\d+e.*'])
27
+ register_prefix('\d+e.*')
28
28
 
29
29
  def initialize(command)
30
30
  super(command)
@@ -24,7 +24,7 @@ module BCDice
24
24
    ステップ10、目標値8、カルマダイス:10E8K
25
25
  INFO_MESSAGE_TEXT
26
26
 
27
- register_prefix(['\d+e.*'])
27
+ register_prefix('\d+e.*')
28
28
 
29
29
  def initialize(command)
30
30
  super(command)
@@ -50,7 +50,6 @@ module BCDice
50
50
 
51
51
  def initialize(command)
52
52
  super(command)
53
- @enabled_d66 = true
54
53
  @d66_sort_type = D66SortType::ASC
55
54
 
56
55
  @enabled_upcase_input = false
@@ -1200,14 +1199,14 @@ module BCDice
1200
1199
  ),
1201
1200
  }.freeze
1202
1201
 
1203
- register_prefix([
1202
+ register_prefix(
1204
1203
  'EL.*',
1205
1204
  'DATE.*', 'FDATE.*', 'ODATE.*', 'MDATE.*',
1206
1205
  'RBT', 'SBT', 'BBT', 'CBT', 'DBT', 'IBT', 'FBT', 'LBT', 'PBT', 'NBT', 'ABT', 'VBT', 'GBT', 'HBT',
1207
1206
  'BFT', 'FWT', 'FT',
1208
1207
  'SRT', 'ORT', 'DRT', 'URT',
1209
- 'NJ\d+', 'BS\d+'
1210
- ] + TABLES.keys)
1208
+ 'NJ\d+', 'BS\d+', TABLES.keys
1209
+ )
1211
1210
  end
1212
1211
  end
1213
1212
  end
@@ -24,7 +24,7 @@ module BCDice
24
24
   ・射撃攻撃ファンブル表 SFT
25
25
  INFO_MESSAGE_TEXT
26
26
 
27
- register_prefix(['EM\d+.*', 'HLT', 'MFT', 'SFT', '2R10.*'])
27
+ register_prefix('EM\d+.*', 'HLT', 'MFT', 'SFT', '2R10.*')
28
28
 
29
29
  def initialize(command)
30
30
  super(command)
@@ -0,0 +1,131 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class Emoklore < Base
6
+ # ゲームシステムの識別子
7
+ ID = "Emoklore"
8
+
9
+ # ゲームシステム名
10
+ NAME = "エモクロア"
11
+
12
+ # ゲームシステム名の読みがな
13
+ #
14
+ # 「ゲームシステム名の読みがなの設定方法」(docs/dicebot_sort_key.md)を参考にして
15
+ # 設定してください
16
+ SORT_KEY = "えもくろあ"
17
+
18
+ # ダイスボットの使い方
19
+ HELP_MESSAGE = <<~MESSAGETEXT
20
+ ・技能値判定(xDM<=y)
21
+ "(個数)DM<=(判定値)"で指定します。
22
+ ダイスの個数は省略可能で、省略した場合1個になります。
23
+ 例)2DM<=5 DM<=8
24
+ ・技能値判定(sDAa+z)
25
+ "(技能レベル)DA(能力値)+(ボーナスダイス)"で指定します。
26
+ ボーナスダイスの個数は省略可能で、省略した場合0になります。
27
+ 技能レベルは1~3の数値、またはベース技能の場合"b"が入ります。
28
+ ダイスの個数は技能レベルとボーナスダイスの個数により決定し、s+z個のダイスを振ります。(s="b"の場合はs=1)
29
+ 判定値はs+aとなります。(s="b"の場合はs=0)
30
+ MESSAGETEXT
31
+
32
+ # ダイスボットで使用するコマンドを配列で列挙する
33
+ register_prefix('\d*DM<=\d+', '(B|\d*)DA\d+')
34
+
35
+ CRITICAL_VALUE = 1
36
+ FUMBLE_VALUE = 10
37
+
38
+ # ダイスボット固有コマンドの処理を行う
39
+ # @param [String] command コマンド
40
+ # @return [String] ダイスボット固有コマンドの結果
41
+ # @return [nil] 無効なコマンドだった場合
42
+ def eval_game_system_specific_command(command)
43
+ case command
44
+ when /^\d*DM<=\d/
45
+ roll_dm(command)
46
+ when /^(B|\d*)DA\d+(\+)?\d*/
47
+ roll_da(command)
48
+ end
49
+ end
50
+
51
+ private
52
+
53
+ # ダイスロールの共通処理
54
+ # @param [Integer] num_dice
55
+ # @param [Integer] success_threshold
56
+ # @return [String]
57
+ def dice_roll(num_dice, success_threshold)
58
+ # ダイスを振った結果を配列として取得
59
+ values = @randomizer.roll_barabara(num_dice, 10)
60
+ values_without_critical = values.reject { |num| num <= CRITICAL_VALUE }
61
+
62
+ critical = values.size - values_without_critical.size
63
+ success = values_without_critical.count { |num| num <= success_threshold }
64
+ fumble = values_without_critical.count { |num| num >= FUMBLE_VALUE }
65
+
66
+ # 成功値
67
+ success_value = 2 * critical + success - fumble
68
+
69
+ "#{values} > #{success_value} > #{result_text(success_value)}"
70
+ end
71
+
72
+ # @param [Integer] success
73
+ # @return [String]
74
+ def result_text(success)
75
+ if success < 0
76
+ "ファンブル!"
77
+ elsif success == 0
78
+ "失敗!"
79
+ elsif success == 1
80
+ "成功!"
81
+ elsif success == 2
82
+ "ダブル!"
83
+ elsif success == 3
84
+ "トリプル!"
85
+ elsif success <= 9
86
+ "ミラクル!"
87
+ else
88
+ "カタストロフ!"
89
+ end
90
+ end
91
+
92
+ # 技能判定
93
+ # @param [String] command コマンド
94
+ # @return [String, nil] コマンドの結果
95
+ def roll_dm(command)
96
+ m = /^(\d+)?DM<=(\d+)$/.match(command)
97
+ unless m
98
+ return nil
99
+ end
100
+
101
+ num_dice = m[1]&.to_i || 1
102
+ success_threshold = m[2].to_i
103
+ if num_dice <= 0
104
+ return nil
105
+ end
106
+
107
+ # ダイスロール本体
108
+ ret_str = dice_roll(num_dice, success_threshold)
109
+
110
+ return "(#{num_dice}DM<=#{success_threshold}) > #{ret_str}"
111
+ end
112
+
113
+ # 取得技能判定
114
+ # @param [String] command コマンド
115
+ # @return [String, nil] コマンドの結果
116
+ def roll_da(command)
117
+ m = /^(B|\d+)?DA(\d+)(\+\d+)?$/.match(command)
118
+ unless m
119
+ return nil
120
+ end
121
+
122
+ bonus = m[3].to_i
123
+ num_dice = (m[1] == "B" ? 1 : (m[1]&.to_i || 1)) + bonus
124
+ success_threshold = m[1].to_i + m[2].to_i
125
+
126
+ ret_str = dice_roll(num_dice, success_threshold)
127
+ "(#{command}) > (#{num_dice}DM<=#{success_threshold}) > #{ret_str}"
128
+ end
129
+ end
130
+ end
131
+ end