bcdice 3.0.0 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (183) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +79 -2
  3. data/README.md +32 -0
  4. data/i18n/MonotoneMuseum/ja_jp.yml +3 -3
  5. data/i18n/StellarKnights/ja_jp.yml +496 -0
  6. data/lib/bcdice/common_command/add_dice.rb +1 -1
  7. data/lib/bcdice/common_command/calc.rb +1 -1
  8. data/lib/bcdice/dice_table.rb +2 -0
  9. data/lib/bcdice/dice_table/d66_half_grid_table.rb +33 -0
  10. data/lib/bcdice/dice_table/d66_one_third_table.rb +34 -0
  11. data/lib/bcdice/dice_table/sai_fic_skill_table.rb +1 -1
  12. data/lib/bcdice/game_system.rb +4 -0
  13. data/lib/bcdice/game_system/AceKillerGene.rb +1 -1
  14. data/lib/bcdice/game_system/Ainecadette.rb +68 -0
  15. data/lib/bcdice/game_system/Airgetlamh.rb +1 -1
  16. data/lib/bcdice/game_system/AlchemiaStruggle.rb +1 -1
  17. data/lib/bcdice/game_system/Alsetto.rb +1 -1
  18. data/lib/bcdice/game_system/Alshard.rb +1 -1
  19. data/lib/bcdice/game_system/AlterRaise.rb +2 -2
  20. data/lib/bcdice/game_system/AngelGear.rb +123 -0
  21. data/lib/bcdice/game_system/AnimaAnimus.rb +1 -1
  22. data/lib/bcdice/game_system/Arianrhod.rb +6 -8
  23. data/lib/bcdice/game_system/ArsMagica.rb +1 -1
  24. data/lib/bcdice/game_system/Avandner.rb +1 -1
  25. data/lib/bcdice/game_system/BBN.rb +1 -1
  26. data/lib/bcdice/game_system/BadLife.rb +1 -1
  27. data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
  28. data/lib/bcdice/game_system/BattleTech.rb +1 -1
  29. data/lib/bcdice/game_system/BeastBindTrinity.rb +2 -2
  30. data/lib/bcdice/game_system/BeginningIdol.rb +5 -5
  31. data/lib/bcdice/game_system/BeginningIdol_Korean.rb +5 -5
  32. data/lib/bcdice/game_system/BladeOfArcana.rb +1 -1
  33. data/lib/bcdice/game_system/BlindMythos.rb +1 -1
  34. data/lib/bcdice/game_system/BloodCrusade.rb +48 -49
  35. data/lib/bcdice/game_system/BloodMoon.rb +50 -8
  36. data/lib/bcdice/game_system/CardRanker.rb +10 -9
  37. data/lib/bcdice/game_system/ChaosFlare.rb +21 -15
  38. data/lib/bcdice/game_system/Chill.rb +10 -10
  39. data/lib/bcdice/game_system/Chill3.rb +9 -9
  40. data/lib/bcdice/game_system/CodeLayerd.rb +1 -1
  41. data/lib/bcdice/game_system/CrashWorld.rb +1 -1
  42. data/lib/bcdice/game_system/Cthulhu.rb +8 -4
  43. data/lib/bcdice/game_system/Cthulhu7th.rb +86 -342
  44. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +2 -2
  45. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +2 -2
  46. data/lib/bcdice/game_system/CthulhuTech.rb +1 -1
  47. data/lib/bcdice/game_system/Cthulhu_ChineseTraditional.rb +1 -1
  48. data/lib/bcdice/game_system/Cthulhu_Korean.rb +1 -1
  49. data/lib/bcdice/game_system/DarkBlaze.rb +1 -12
  50. data/lib/bcdice/game_system/DarkDaysDrive.rb +8 -7
  51. data/lib/bcdice/game_system/DeadlineHeroes.rb +2 -2
  52. data/lib/bcdice/game_system/DemonParasite.rb +5 -13
  53. data/lib/bcdice/game_system/DesperateRun.rb +1 -1
  54. data/lib/bcdice/game_system/DiceOfTheDead.rb +1 -1
  55. data/lib/bcdice/game_system/DoubleCross.rb +2 -2
  56. data/lib/bcdice/game_system/Dracurouge.rb +1 -1
  57. data/lib/bcdice/game_system/EarthDawn.rb +1 -1
  58. data/lib/bcdice/game_system/EarthDawn3.rb +1 -1
  59. data/lib/bcdice/game_system/EarthDawn4.rb +1 -1
  60. data/lib/bcdice/game_system/EclipsePhase.rb +14 -14
  61. data/lib/bcdice/game_system/Elric.rb +18 -14
  62. data/lib/bcdice/game_system/Elysion.rb +3 -3
  63. data/lib/bcdice/game_system/EmbryoMachine.rb +9 -8
  64. data/lib/bcdice/game_system/Emoklore.rb +3 -3
  65. data/lib/bcdice/game_system/EtrianOdysseySRS.rb +1 -1
  66. data/lib/bcdice/game_system/Fiasco.rb +1 -1
  67. data/lib/bcdice/game_system/FilledWith.rb +205 -1272
  68. data/lib/bcdice/game_system/FullMetalPanic.rb +1 -1
  69. data/lib/bcdice/game_system/GURPS.rb +17 -28
  70. data/lib/bcdice/game_system/Garako.rb +12 -4
  71. data/lib/bcdice/game_system/GardenOrder.rb +1 -1
  72. data/lib/bcdice/game_system/GehennaAn.rb +1 -1
  73. data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +1 -1
  74. data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
  75. data/lib/bcdice/game_system/Gorilla.rb +3 -9
  76. data/lib/bcdice/game_system/GranCrest.rb +18 -11
  77. data/lib/bcdice/game_system/Gundog.rb +9 -8
  78. data/lib/bcdice/game_system/GundogRevised.rb +10 -9
  79. data/lib/bcdice/game_system/GundogZero.rb +1 -1
  80. data/lib/bcdice/game_system/GurpsFW.rb +16 -16
  81. data/lib/bcdice/game_system/HarnMaster.rb +19 -26
  82. data/lib/bcdice/game_system/HatsuneMiku.rb +1 -1
  83. data/lib/bcdice/game_system/Hieizan.rb +12 -21
  84. data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
  85. data/lib/bcdice/game_system/HuntersMoon.rb +5 -10
  86. data/lib/bcdice/game_system/Illusio.rb +25 -34
  87. data/lib/bcdice/game_system/InfiniteFantasia.rb +19 -17
  88. data/lib/bcdice/game_system/Insane.rb +13 -20
  89. data/lib/bcdice/game_system/IthaWenUa.rb +8 -15
  90. data/lib/bcdice/game_system/JamesBond.rb +10 -10
  91. data/lib/bcdice/game_system/JekyllAndHyde.rb +1 -1
  92. data/lib/bcdice/game_system/Kamigakari.rb +1 -1
  93. data/lib/bcdice/game_system/KanColle.rb +4 -9
  94. data/lib/bcdice/game_system/KemonoNoMori.rb +1 -1
  95. data/lib/bcdice/game_system/KillDeathBusiness.rb +7 -15
  96. data/lib/bcdice/game_system/KurayamiCrying.rb +55 -2
  97. data/lib/bcdice/game_system/LogHorizon.rb +3 -3
  98. data/lib/bcdice/game_system/LostRoyal.rb +1 -1
  99. data/lib/bcdice/game_system/MeikyuDays.rb +11 -9
  100. data/lib/bcdice/game_system/MeikyuKingdom.rb +28 -28
  101. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +5 -5
  102. data/lib/bcdice/game_system/MetalHead.rb +12 -22
  103. data/lib/bcdice/game_system/MetalHeadExtream.rb +5 -5
  104. data/lib/bcdice/game_system/MetallicGuardian.rb +1 -1
  105. data/lib/bcdice/game_system/MonotoneMuseum.rb +9 -7
  106. data/lib/bcdice/game_system/Nechronica.rb +28 -21
  107. data/lib/bcdice/game_system/NeverCloud.rb +540 -5
  108. data/lib/bcdice/game_system/NightWizard.rb +1 -1
  109. data/lib/bcdice/game_system/NightWizard3rd.rb +1 -1
  110. data/lib/bcdice/game_system/NinjaSlayer.rb +4 -13
  111. data/lib/bcdice/game_system/NjslyrBattle.rb +8 -11
  112. data/lib/bcdice/game_system/OneWayHeroics.rb +1 -1
  113. data/lib/bcdice/game_system/OracleEngine.rb +1 -1
  114. data/lib/bcdice/game_system/OrgaRain.rb +17 -25
  115. data/lib/bcdice/game_system/Paradiso.rb +3 -3
  116. data/lib/bcdice/game_system/ParanoiaRebooted.rb +1 -1
  117. data/lib/bcdice/game_system/ParasiteBlood.rb +1 -1
  118. data/lib/bcdice/game_system/Peekaboo.rb +4 -9
  119. data/lib/bcdice/game_system/Pendragon.rb +7 -7
  120. data/lib/bcdice/game_system/PhantasmAdventure.rb +8 -8
  121. data/lib/bcdice/game_system/Postman.rb +2 -2
  122. data/lib/bcdice/game_system/PulpCthulhu.rb +1 -1
  123. data/lib/bcdice/game_system/Raisondetre.rb +2 -2
  124. data/lib/bcdice/game_system/RecordOfLodossWar.rb +1 -1
  125. data/lib/bcdice/game_system/RecordOfSteam.rb +1 -1
  126. data/lib/bcdice/game_system/Revulture.rb +123 -0
  127. data/lib/bcdice/game_system/RokumonSekai2.rb +1 -1
  128. data/lib/bcdice/game_system/RuneQuest.rb +8 -8
  129. data/lib/bcdice/game_system/Ryutama.rb +1 -1
  130. data/lib/bcdice/game_system/SRS.rb +1 -1
  131. data/lib/bcdice/game_system/SamsaraBallad.rb +1 -1
  132. data/lib/bcdice/game_system/Satasupe.rb +79 -860
  133. data/lib/bcdice/game_system/ScreamHighSchool.rb +2 -2
  134. data/lib/bcdice/game_system/SevenFortressMobius.rb +1 -1
  135. data/lib/bcdice/game_system/SharedFantasia.rb +20 -24
  136. data/lib/bcdice/game_system/ShinkuuGakuen.rb +2 -2
  137. data/lib/bcdice/game_system/ShinobiGami.rb +17 -9
  138. data/lib/bcdice/game_system/Skynauts.rb +4 -4
  139. data/lib/bcdice/game_system/SkynautsBouken.rb +228 -0
  140. data/lib/bcdice/game_system/SteamPunkers.rb +1 -1
  141. data/lib/bcdice/game_system/StellarKnights.rb +59 -696
  142. data/lib/bcdice/game_system/SterileLife.rb +2 -3
  143. data/lib/bcdice/game_system/StrangerOfSwordCity.rb +2 -2
  144. data/lib/bcdice/game_system/StratoShout.rb +8 -16
  145. data/lib/bcdice/game_system/Strave.rb +1 -1
  146. data/lib/bcdice/game_system/SwordWorld.rb +58 -185
  147. data/lib/bcdice/game_system/SwordWorld2_0.rb +22 -150
  148. data/lib/bcdice/game_system/SwordWorld2_5.rb +127 -41
  149. data/lib/bcdice/game_system/TherapieSein.rb +1 -1
  150. data/lib/bcdice/game_system/TokyoGhostResearch.rb +1 -1
  151. data/lib/bcdice/game_system/Torg.rb +1 -1
  152. data/lib/bcdice/game_system/TorgEternity.rb +2 -2
  153. data/lib/bcdice/game_system/TrinitySeven.rb +4 -4
  154. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +1 -1
  155. data/lib/bcdice/game_system/TwilightGunsmoke.rb +1 -1
  156. data/lib/bcdice/game_system/UnsungDuet.rb +1 -1
  157. data/lib/bcdice/game_system/Utakaze.rb +1 -1
  158. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +1 -1
  159. data/lib/bcdice/game_system/Villaciel.rb +1 -1
  160. data/lib/bcdice/game_system/WARPS.rb +11 -9
  161. data/lib/bcdice/game_system/WaresBlade.rb +4 -9
  162. data/lib/bcdice/game_system/Warhammer.rb +16 -7
  163. data/lib/bcdice/game_system/Warhammer4.rb +16 -12
  164. data/lib/bcdice/game_system/WitchQuest.rb +1 -1
  165. data/lib/bcdice/game_system/WorldOfDarkness.rb +1 -1
  166. data/lib/bcdice/game_system/YankeeYogSothoth.rb +4 -9
  167. data/lib/bcdice/game_system/YearZeroEngine.rb +1 -1
  168. data/lib/bcdice/game_system/ZettaiReido.rb +1 -1
  169. data/lib/bcdice/game_system/cthulhu7th/full_auto.rb +294 -0
  170. data/lib/bcdice/game_system/cthulhu7th/rollable.rb +41 -0
  171. data/lib/bcdice/game_system/filled_with/enemy_data_tables.rb +322 -0
  172. data/lib/bcdice/game_system/filled_with/event_tables.rb +392 -0
  173. data/lib/bcdice/game_system/filled_with/tresure_tables.rb +179 -0
  174. data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +1 -1
  175. data/lib/bcdice/game_system/satasupe/tables.rb +723 -0
  176. data/lib/bcdice/game_system/sword_world/rating_lexer.rb +47 -0
  177. data/lib/bcdice/game_system/sword_world/rating_parsed.rb +99 -0
  178. data/lib/bcdice/game_system/sword_world/rating_parser.rb +457 -0
  179. data/lib/bcdice/game_system/sword_world/transcendent_test.rb +122 -0
  180. data/lib/bcdice/repl.rb +1 -1
  181. data/lib/bcdice/result.rb +26 -0
  182. data/lib/bcdice/version.rb +1 -1
  183. metadata +20 -4
@@ -699,7 +699,7 @@ module BCDice
699
699
  ),
700
700
  }.freeze
701
701
 
702
- register_prefix('R([A-DS]|\d+).*', TABLES.keys)
702
+ register_prefix('R[A-DS]?', TABLES.keys)
703
703
  end
704
704
  end
705
705
  end
@@ -16,31 +16,22 @@ module BCDice
16
16
  HELP_MESSAGE = "大成功、自動成功、失敗、自動失敗、大失敗の自動判定を行います。\n"
17
17
 
18
18
  # ゲーム別成功度判定(1d100)
19
- def check_1D100(total, _dice_total, _cmp_op, target)
20
- return '' if target == '?'
19
+ def result_1d100(total, _dice_total, cmp_op, target)
20
+ return Result.nothing if target == '?'
21
+ return nil unless cmp_op == :<=
21
22
 
22
- if total <= 1
23
- # 1は自動成功
24
- if total <= (target / 5)
25
- " > 大成功"
26
- else
27
- " > 自動成功"
28
- end
29
- elsif total >= 100
30
- # 00は大失敗(大失敗は自動失敗でもある)
31
- " > 大失敗"
23
+ if total >= 100
24
+ Result.fumble("大失敗")
32
25
  elsif total >= 96
33
- # 96-00は自動失敗
34
- " 自動失敗"
26
+ Result.failure("自動失敗")
27
+ elsif total <= (target / 5)
28
+ Result.critical("大成功")
29
+ elsif total <= 1
30
+ Result.success("自動成功")
35
31
  elsif total <= target
36
- if total <= (target / 5)
37
- # 目標値の1/5以下は大成功
38
- " > 大成功"
39
- else
40
- " > 成功"
41
- end
32
+ Result.success("成功")
42
33
  else
43
- "失敗"
34
+ Result.failure("失敗")
44
35
  end
45
36
  end
46
37
  end
@@ -31,7 +31,7 @@ module BCDice
31
31
  例)Hourai : 仁義八徳は、【義】(奇数、奇数、偶数)
32
32
  INFO_MESSAGE_TEXT
33
33
 
34
- register_prefix('ROL.*', 'MED\(\d+,\d+\)', 'RES\(\d+,\d+\)', 'INY.*', 'HTK.*', 'GOG.*')
34
+ register_prefix('ROL', 'MED', 'RES', 'INY', 'HTK', 'GOG')
35
35
 
36
36
  # ゲームの名前
37
37
  # チャット欄表示名
@@ -47,18 +47,13 @@ module BCDice
47
47
  end
48
48
 
49
49
  # ゲーム別成功度判定(2D6)
50
- def check_2D6(total, dice_total, _dice_list, cmp_op, target)
51
- return '' if target == '?'
52
- return '' unless cmp_op == :>=
50
+ def result_2d6(_total, dice_total, _dice_list, cmp_op, _target)
51
+ return nil unless cmp_op == :>=
53
52
 
54
53
  if dice_total <= 2
55
- "ファンブル(モノビースト追加行動+1)"
54
+ Result.fumble("ファンブル(モノビースト追加行動+1)")
56
55
  elsif dice_total >= 12
57
- "スペシャル(変調1つ回復orダメージ+1D6)"
58
- elsif total >= target
59
- " > 成功"
60
- else
61
- " > 失敗"
56
+ Result.critical("スペシャル(変調1つ回復orダメージ+1D6)")
62
57
  end
63
58
  end
64
59
 
@@ -403,7 +398,7 @@ module BCDice
403
398
  ),
404
399
  }.freeze
405
400
 
406
- register_prefix(RTT.prefixes, 'SA2?T\d*', TABLES.keys)
401
+ register_prefix(RTT.prefixes, 'SA', TABLES.keys)
407
402
  end
408
403
  end
409
404
  end
@@ -33,56 +33,47 @@ module BCDice
33
33
  end
34
34
 
35
35
  register_prefix(
36
- '(\d+)?IL([1-6])?([1-6])?([1-6])?([1-6])?([1-6])?([1-6])?(P)?'
36
+ '(\d+)?IL([1-6]{0,6})(P)?'
37
37
  )
38
38
 
39
39
  def eval_game_system_specific_command(command)
40
- if command =~ /(\d+)?IL([1-6])?([1-6])?([1-6])?([1-6])?([1-6])?([1-6])?(P)?$/i
41
- diceCount = (Regexp.last_match(1) || 1).to_i
42
- blockNo = [(Regexp.last_match(2) || 0).to_i, (Regexp.last_match(3) || 0).to_i, (Regexp.last_match(4) || 0).to_i, (Regexp.last_match(5) || 0).to_i, (Regexp.last_match(6) || 0).to_i, (Regexp.last_match(7) || 0).to_i]
43
- blockNo.delete(0)
44
- blockNo = blockNo.sort
45
- blockNo = blockNo.uniq
46
- isParry = !Regexp.last_match(8).nil?
47
-
48
- return checkRoll(diceCount, blockNo, isParry)
49
- end
40
+ m = command.match(/(\d+)?IL([1-6]{0,6})(P)?$/i)
41
+ return nil unless m
42
+
43
+ dice_count = (m[1] || 1).to_i
44
+ block_no = (m[2] || "").each_char.map(&:to_i).uniq.sort
45
+ is_parry = !m[3].nil?
50
46
 
51
- return nil
47
+ return check_roll(dice_count, block_no, is_parry)
52
48
  end
53
49
 
54
- def checkRoll(diceCount, blockNo, isParry)
55
- diceArray = @randomizer.roll_barabara(diceCount, 6).sort
56
- diceText = diceArray.join(',')
50
+ def check_roll(dice_count, block_no, is_parry)
51
+ dice_array = @randomizer.roll_barabara(dice_count, 6).sort
52
+ dice_text = dice_array.join(',')
57
53
 
58
- resultArray = []
54
+ result_array = []
59
55
  success = 0
60
- diceArray.each do |i|
61
- if blockNo.count(i) > 0
62
- resultArray.push("×")
56
+ dice_array.each do |i|
57
+ if block_no.count(i) > 0
58
+ result_array.push("×")
63
59
  else
64
- resultArray.push(i)
60
+ result_array.push(i)
65
61
  success += 1
66
62
  end
67
63
  end
68
64
 
69
- blockText = blockNo.join(',')
70
- blockText2 = "Block"
71
- blockText2 = "Parry" if isParry
72
- resultText = resultArray.join(',')
65
+ block_text = block_no.join(',')
66
+ block_text2 = is_parry ? "Parry" : "Block"
67
+ result_text = result_array.join(',')
73
68
 
74
- result = "#{diceCount}D6(#{blockText2}:#{blockText}) > #{diceText} > #{resultText} > "
75
- if isParry
76
- if success < diceCount
77
- result += "パリィ成立! 次の非ダメージ2倍。"
78
- else
79
- result += "成功数:#{success} パリィ失敗"
80
- end
69
+ result = "#{dice_count}D6(#{block_text2}:#{block_text}) > #{dice_text} > #{result_text} > "
70
+ return "#{result}成功数:#{success}" unless is_parry
71
+
72
+ if success < dice_count
73
+ "#{result}パリィ成立! 次の非ダメージ2倍。"
81
74
  else
82
- result += "成功数:#{success}"
75
+ "#{result}成功数:#{success} パリィ失敗"
83
76
  end
84
-
85
- return result
86
77
  end
87
78
  end
88
79
  end
@@ -13,38 +13,40 @@ module BCDice
13
13
  SORT_KEY = 'むけんのふあんたしあ'
14
14
 
15
15
  # ダイスボットの使い方
16
- HELP_MESSAGE = "失敗、成功レベルの自動判定を行います。\n"
16
+ HELP_MESSAGE = "失敗、成功レベルの自動判定を行います。"
17
17
 
18
18
  # ゲーム別成功度判定(1d20)
19
- def check_1D20(total, _dice_total, cmp_op, target)
20
- return '' if target == '?'
19
+ def result_1d20(total, _dice_total, cmp_op, target)
20
+ return Result.nothing if target == '?'
21
+ return nil unless cmp_op == :<=
21
22
 
22
- if cmp_op != :<=
23
- return ''
24
- elsif total > target
25
- return " > 失敗"
23
+ if total > target
24
+ return Result.failure("失敗")
26
25
  end
27
26
 
28
27
  output =
29
28
  if total <= (target / 32)
30
- "32レベル成功(32Lv+)"
29
+ "32レベル成功(32Lv+)"
31
30
  elsif total <= (target / 16)
32
- "16レベル成功(16LV+)"
31
+ "16レベル成功(16Lv+)"
33
32
  elsif total <= (target / 8)
34
- "8レベル成功"
33
+ "8レベル成功"
35
34
  elsif total <= (target / 4)
36
- "4レベル成功"
35
+ "4レベル成功"
37
36
  elsif total <= (target / 2)
38
- "2レベル成功"
37
+ "2レベル成功"
39
38
  else
40
- "1レベル成功"
39
+ "1レベル成功"
41
40
  end
42
41
 
43
- if total <= 1
44
- output += "/クリティカル"
42
+ Result.new.tap do |r|
43
+ r.text = output
44
+ r.success = true
45
+ if total <= 1
46
+ r.critical = true
47
+ r.text += "/クリティカル"
48
+ end
45
49
  end
46
-
47
- output
48
50
  end
49
51
  end
50
52
  end
@@ -46,27 +46,20 @@ module BCDice
46
46
  end
47
47
 
48
48
  # ゲーム別成功度判定(2D6)
49
- def check_2D6(total, dice_total, _dice_list, cmp_op, target)
50
- return '' unless cmp_op == :>=
51
-
52
- result =
53
- if dice_total <= 2
54
- translate("Insane.fumble")
55
- elsif dice_total >= 12
56
- translate("Insane.special")
57
- elsif target == "?"
58
- ""
59
- elsif total >= target
60
- translate("success")
61
- else
62
- translate("failure")
63
- end
64
-
65
- if result.empty?
66
- return ""
49
+ def result_2d6(total, dice_total, _dice_list, cmp_op, target)
50
+ return nil unless cmp_op == :>=
51
+
52
+ if dice_total <= 2
53
+ Result.fumble(translate("Insane.fumble"))
54
+ elsif dice_total >= 12
55
+ Result.critical(translate("Insane.special"))
56
+ elsif target == "?"
57
+ Result.nothing
58
+ elsif total >= target
59
+ Result.success(translate("success"))
60
+ else
61
+ Result.failure(translate("failure"))
67
62
  end
68
-
69
- return " > #{result}"
70
63
  end
71
64
 
72
65
  def eval_game_system_specific_command(command)
@@ -15,22 +15,15 @@ module BCDice
15
15
  # ダイスボットの使い方
16
16
  HELP_MESSAGE = "1D100<=m 方式の判定で成否、クリティカル(01)・ファンブル(00)を自動判定します。\n"
17
17
 
18
- def check_1D100(total, _dice_total, cmp_op, target)
19
- return '' if target == '?'
20
- return '' unless cmp_op == :<=
18
+ def result_1d100(total, _dice_total, cmp_op, target)
19
+ return nil unless cmp_op == :<=
21
20
 
22
- diceValue = total % 100
23
- dice0 = diceValue / 10 # 10の位を代入
24
- dice1 = diceValue % 10 # 1の位を代入
25
-
26
- if (dice0 == 0) && (dice1 == 1)
27
- ' > 01 > クリティカル'
28
- elsif (dice0 == 0) && (dice1 == 0)
29
- ' > 00 > ファンブル'
30
- elsif total <= target
31
- ' > 成功'
32
- else
33
- ' > 失敗'
21
+ if total % 100 == 1
22
+ Result.critical("01 クリティカル")
23
+ elsif total % 100 == 0
24
+ Result.fumble("00 > ファンブル")
25
+ elsif target == "?"
26
+ Result.nothing
34
27
  end
35
28
  end
36
29
  end
@@ -16,28 +16,28 @@ module BCDice
16
16
  HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
17
17
  ・1D100の目標値判定で、効果レーティングを1~4で自動判定。
18
18
   例)1D100<=50
19
-    JamesBond : (1D100<=50) 20 効果3(良)
19
+    JamesBond : (1D100<=50) 20 効果3(良)
20
20
  INFO_MESSAGE_TEXT
21
21
 
22
- def check_1D100(total, _dice_total, cmp_op, target) # ゲーム別成功度判定(1d100)
23
- return '' if target == '?'
24
- return '' unless cmp_op == :<=
22
+ def result_1d100(total, _dice_total, cmp_op, target) # ゲーム別成功度判定(1d100)
23
+ return Result.nothing if target == '?'
24
+ return nil unless cmp_op == :<=
25
25
 
26
26
  base = ((target + 9) / 10).floor
27
27
 
28
28
  if total >= 100
29
29
  # 100は常に失敗
30
- "失敗"
30
+ Result.failure("失敗")
31
31
  elsif total <= base
32
- "効果1(完璧)"
32
+ Result.success("効果1(完璧)")
33
33
  elsif total <= base * 2
34
- "効果2(かなり良い)"
34
+ Result.success("効果2(かなり良い)")
35
35
  elsif total <= base * 5
36
- "効果3(良)"
36
+ Result.success("効果3(良)")
37
37
  elsif total <= target
38
- "効果4(まあまあ)"
38
+ Result.success("効果4(まあまあ)")
39
39
  else
40
- "失敗"
40
+ Result.failure("失敗")
41
41
  end
42
42
  end
43
43
  end
@@ -36,7 +36,7 @@ module BCDice
36
36
  )
37
37
  }.freeze
38
38
 
39
- register_prefix('RC\d+', 'DDC', TABLES.keys)
39
+ register_prefix('RC', 'DDC', TABLES.keys)
40
40
  end
41
41
  end
42
42
  end
@@ -193,7 +193,7 @@ module BCDice
193
193
 
194
194
  TABLES = translate_tables(:ja_jp)
195
195
 
196
- register_prefix('MT(\d*)', TABLES.keys)
196
+ register_prefix('MT', TABLES.keys)
197
197
  end
198
198
  end
199
199
  end
@@ -53,18 +53,13 @@ module BCDice
53
53
  @d66_sort_type = D66SortType::ASC
54
54
  end
55
55
 
56
- def check_2D6(total, dice_total, _dice_list, cmp_op, target)
57
- return '' if target == '?'
58
- return '' unless cmp_op == :>=
56
+ def result_2d6(_total, dice_total, _dice_list, cmp_op, _target)
57
+ return nil unless cmp_op == :>=
59
58
 
60
59
  if dice_total <= 2
61
- "ファンブル(判定失敗。アクシデント表を自分のPCに適用)"
60
+ Result.fumble("ファンブル(判定失敗。アクシデント表を自分のPCに適用)")
62
61
  elsif dice_total >= 12
63
- "スペシャル(判定成功。【行動力】が1D6点回復)"
64
- elsif total >= target
65
- " > 成功"
66
- else
67
- " > 失敗"
62
+ Result.critical("スペシャル(判定成功。【行動力】が1D6点回復)")
68
63
  end
69
64
  end
70
65
 
@@ -252,7 +252,7 @@ module BCDice
252
252
  ),
253
253
  }.freeze
254
254
 
255
- register_prefix('K[AC]\d[-+\d]*', 'CTR', TABLES.keys)
255
+ register_prefix('K[AC]', 'CTR', TABLES.keys)
256
256
  end
257
257
  end
258
258
  end
@@ -49,22 +49,14 @@ module BCDice
49
49
  end
50
50
 
51
51
  # ゲーム別成功度判定(2D6)
52
- def check_2D6(total, dice_total, _dice_list, cmp_op, target)
53
- return '' if target == '?'
54
- return '' unless cmp_op == :>=
55
-
56
- result =
57
- if dice_total <= 2
58
- translate("KillDeathBusiness.fumble")
59
- elsif dice_total >= 12
60
- translate("KillDeathBusiness.special")
61
- elsif total >= target
62
- translate("success")
63
- else
64
- translate("failure")
65
- end
52
+ def result_2d6(_total, dice_total, _dice_list, cmp_op, _target)
53
+ return nil unless cmp_op == :>=
66
54
 
67
- return " #{result}"
55
+ if dice_total <= 2
56
+ Result.fumble(translate("KillDeathBusiness.fumble"))
57
+ elsif dice_total >= 12
58
+ Result.critical(translate("KillDeathBusiness.special"))
59
+ end
68
60
  end
69
61
 
70
62
  def eval_game_system_specific_command(command)
@@ -13,7 +13,12 @@ module BCDice
13
13
  SORT_KEY = 'くらやみくらいん'
14
14
 
15
15
  # ダイスボットの使い方
16
- HELP_MESSAGE = "・アクシデント表(ACT)\n"
16
+ HELP_MESSAGE = <<~TEXT
17
+ ・アクシデント表(ACT)
18
+ ・感情表(EMO)
19
+ ・幕間シーン表(情景)(SST)
20
+ ・幕間シーン表(関係)(SRT)
21
+ TEXT
17
22
 
18
23
  def eval_game_system_specific_command(command)
19
24
  if (m = /^ACT(\d+)$/i.match(command))
@@ -41,9 +46,57 @@ module BCDice
41
46
  "まるで自分を支える何かが失われたように、あなたはその場に立ち尽くす。諦めと絶望が心を支配する。ああ、そうか。これが、「心が折れる」ということか……。あなたは「理性」を4点失う。"
42
47
  ]
43
48
  ),
49
+ "EMO" => DiceTable::Table.new(
50
+ "感情表",
51
+ "1D10",
52
+ [
53
+ "(正)信頼/(負)依存",
54
+ "(正)安心/(負)不安",
55
+ "(正)友情/(負)憤怒",
56
+ "(正)尊敬/(負)恐怖",
57
+ "(正)愛情/(負)嫉妬",
58
+ "(正)共感/(負)否定",
59
+ "(正)忠誠/(負)侮蔑",
60
+ "(正)憧憬/(負)劣等感",
61
+ "(正)性愛/(負)拒絶",
62
+ "(正)狂信/(負)殺意",
63
+ ]
64
+ ),
65
+ "SST" => DiceTable::Table.new(
66
+ "幕間シーン表(情景)",
67
+ "1D10",
68
+ [
69
+ "先が見えない闇の中を、あなたは手探りに進んでいる。暗がりに入り込んでしまったのか、それとも辺りの光が消えたのか———その時、あなたの眼前に、闇から溶け出すように何者かの姿が現れた。",
70
+ "夢を見ていた。かつてあった出来事が、目の前で繰り返される……ハッと気が付き、現実に戻る。心配そうにあなたを覗き込む顔を見て、再び夢の光景がフラッシュバックする。この人、あの時の……!",
71
+ "気が付くと見知らぬ場所を1人歩いている。迷ってしまったのだろうか。辺りを見回していた、その時———あなたは背後に気配を感じた。いつの間にか誰か立っている……!",
72
+ "「危ない!」突然上がった声と同時に、あなたは突き飛ばされ、床を転がった。次の瞬間、不気味で巨大な何かがあなたの頭をかすめてゆく……。あなたは身を起こし、あなたと一緒に倒れ込んだ人物に声をかけた。",
73
+ "不気味な声を上げながら、何かがゆっくりと近づいてくる。あなたが咄嗟に身を隠した場所には、すでに誰かいた。このまま息を殺し、一緒に危険が過ぎ去るのを待つしかない。",
74
+ "むせかえるような臭いが辺りに満ちている。これは血の臭いだろうか。いや、それにしては……。すると、あなたの近くで、誰かが小さく咳き込んだ……",
75
+ "一息つけそうな場所を見つけ、あなたは座りこんだ。不気味なことに巻き込まれているとは思えない、穏やかな時間が流れる。ふと、あなたは隣りに座っている人物に話しかけた。",
76
+ "静寂の中、あなたを呼ぶ声が響く。声の主に対し、あなたは思う。望むところだ。自分の方こそ、確認しなければならないことがある———!あなたは足早に、声のする方へと進んだ。",
77
+ "高い場所に立ち、あなたは異常な世界を見下ろしている。その時、後ろで誰かが地面を踏む音がした。来たか……予想通り、ここでなら会うことができた。あなたは振り返り、相手を見た。",
78
+ "周囲を確認し、あなたは相手に合図を送る。足音静かに、相手があなたの元へと駆け寄る。———他の気配はない。慎重に、密やかに、あなたは相手と話し始めた。",
79
+ ]
80
+ ),
81
+ "SRT" => DiceTable::Table.new(
82
+ "幕間シーン表(関係)",
83
+ "1D10",
84
+ [
85
+ "微かな香り。ちょっとした仕事。横顔。あの人のすべてが、あなたの胸を高鳴らせる———こんな気持ちは、初めてだ。",
86
+ "頭の中にノイズが走る。あなたは、たしかに、あの人とあったことがある。けれど、詳しく思い出そうとするたびに頭痛が走る……この記憶、確かめなければ。",
87
+ "異常な事態だというのに……いや、異常な事態だからこそ、あの人はあなたに安心感を与えてくれる、とにかく話がしたい。今はまず、あの人を探そう。",
88
+ "今あなたに必要なのは「捨て駒」だ。そう、ピッタリの奴がいるじゃないか!誰を犠牲にしても生き残ってやる。そのためには……。あなたは、あの人の方へと歩み寄った。",
89
+ "こんな時でも、どこか気の合う相手というのは見つかるものだ———安堵するような、弾むような気持ちで、あなたはその人に声をかけた。さぁ、共闘といこうじゃないか。",
90
+ "なんでよりによってこんなヤツと……!?図らずも二人きりになってしまった相手に、あなたは眉をひそめた。会話はない。そもそもこいつが安全かわからない……誰か助けて!",
91
+ "特に理由はない。けれど、一緒に行動すること自体は大事でしょう?仕方ないじゃないか、怖いんだから……!あなたは、いそいそと手近な人間へと寄って行った。",
92
+ "不意に昔のこと———二度と取り戻せない過ちが頭をよぎる。そんなことを思い出したのも、あの人の面影を、あの顔に感じてしまうせいだ。別人とはわかっている。けれど、今度こそ———。",
93
+ "あなたは影に隠れ、その人物を見張っている。怪しい……この人こそが、事件の元凶じゃないか?とはいえ、このままではじり貧だ。あなたは意を決し、影から飛び出して話をかけた。",
94
+ "間違いない……!あなたはその人物をにらみつけた。何という幸運だろう。追い求めた相手が、すぐそこにいるなんて!あなたは荒れ狂う胸の内を気取られぬよう、ゆっくりと近づいた。",
95
+ ]
96
+ ),
44
97
  }.freeze
45
98
 
46
- register_prefix("ACT.*", TABLES.keys)
99
+ register_prefix(TABLES.keys)
47
100
  end
48
101
  end
49
102
  end