bcdice 3.12.0 → 3.14.0

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 (95) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +72 -0
  3. data/i18n/Arianrhod/ko_kr.yml +3 -0
  4. data/i18n/Cthulhu/en_us.yml +11 -0
  5. data/i18n/CyberpunkRed/ja_jp.yml +389 -0
  6. data/i18n/FinalFantasyXIV/en_us.yml +4 -0
  7. data/i18n/FinalFantasyXIV/ja_jp.yml +4 -0
  8. data/i18n/FutariSousa/ja_jp.yml +158 -1
  9. data/i18n/KizunaBullet/ja_jp.yml +653 -0
  10. data/i18n/MonotoneMuseum/ja_jp.yml +246 -14
  11. data/i18n/SkynautsBouken/ja_jp.yml +114 -0
  12. data/i18n/TensaiGunshiNiNaro/ja_jp.yml +126 -0
  13. data/i18n/UnsungDuet/ja_jp.yml +62 -0
  14. data/i18n/UnsungDuet/ko_kr.yml +62 -0
  15. data/i18n/en_us.yml +5 -0
  16. data/lib/bcdice/arithmetic/parser.rb +4 -2
  17. data/lib/bcdice/base.rb +1 -1
  18. data/lib/bcdice/command/parser.rb +4 -2
  19. data/lib/bcdice/common_command/add_dice/parser.rb +4 -2
  20. data/lib/bcdice/common_command/barabara_dice/parser.rb +4 -2
  21. data/lib/bcdice/common_command/calc/parser.rb +4 -2
  22. data/lib/bcdice/common_command/reroll_dice/parser.rb +4 -2
  23. data/lib/bcdice/common_command/tally_dice/parser.rb +4 -2
  24. data/lib/bcdice/common_command/upper_dice/parser.rb +4 -2
  25. data/lib/bcdice/dice_table/range_table.rb +24 -0
  26. data/lib/bcdice/game_system/Agnostos.rb +248 -0
  27. data/lib/bcdice/game_system/Airgetlamh.rb +1 -1
  28. data/lib/bcdice/game_system/Alsetto.rb +2 -2
  29. data/lib/bcdice/game_system/AniMalus.rb +261 -0
  30. data/lib/bcdice/game_system/Arianrhod_Korean.rb +30 -0
  31. data/lib/bcdice/game_system/ArknightsFan.rb +182 -0
  32. data/lib/bcdice/game_system/Avandner.rb +1 -1
  33. data/lib/bcdice/game_system/BBN.rb +1 -1
  34. data/lib/bcdice/game_system/BadLife.rb +3 -3
  35. data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
  36. data/lib/bcdice/game_system/BlackJacket.rb +244 -0
  37. data/lib/bcdice/game_system/Chill3.rb +6 -6
  38. data/lib/bcdice/game_system/ConvictorDrive.rb +5 -4
  39. data/lib/bcdice/game_system/Cthulhu_English.rb +59 -0
  40. data/lib/bcdice/game_system/CyberpunkRed.rb +14 -4
  41. data/lib/bcdice/game_system/DarkSouls.rb +1 -1
  42. data/lib/bcdice/game_system/DivineCharger.rb +841 -0
  43. data/lib/bcdice/game_system/Elric.rb +1 -1
  44. data/lib/bcdice/game_system/FinalFantasyXIV.rb +115 -0
  45. data/lib/bcdice/game_system/FinalFantasyXIV_English.rb +39 -0
  46. data/lib/bcdice/game_system/FullFace.rb +121 -0
  47. data/lib/bcdice/game_system/FutariSousa.rb +88 -8
  48. data/lib/bcdice/game_system/InfiniteFantasia.rb +4 -1
  49. data/lib/bcdice/game_system/Insane_Korean.rb +1 -1
  50. data/lib/bcdice/game_system/InvisibleLiar.rb +79 -0
  51. data/lib/bcdice/game_system/Irisbane.rb +1 -1
  52. data/lib/bcdice/game_system/KillDeathBusiness.rb +1 -1
  53. data/lib/bcdice/game_system/KizunaBullet.rb +240 -0
  54. data/lib/bcdice/game_system/KyokoShinshoku.rb +201 -0
  55. data/lib/bcdice/game_system/Liminal.rb +136 -0
  56. data/lib/bcdice/game_system/MetalHead.rb +1 -1
  57. data/lib/bcdice/game_system/MetalHeadExtream.rb +1 -1
  58. data/lib/bcdice/game_system/MonotoneMuseum.rb +14 -1
  59. data/lib/bcdice/game_system/NRR.rb +122 -0
  60. data/lib/bcdice/game_system/NSSQ.rb +1 -1
  61. data/lib/bcdice/game_system/NightWizard.rb +1 -1
  62. data/lib/bcdice/game_system/NightWizard3rd.rb +15 -2
  63. data/lib/bcdice/game_system/OneWayHeroics.rb +1 -1
  64. data/lib/bcdice/game_system/PastFutureParadox.rb +1238 -0
  65. data/lib/bcdice/game_system/Postman.rb +3 -3
  66. data/lib/bcdice/game_system/RecordOfSteam.rb +1 -1
  67. data/lib/bcdice/game_system/RuneQuestRoleplayingInGlorantha.rb +1 -1
  68. data/lib/bcdice/game_system/Ryutama.rb +4 -4
  69. data/lib/bcdice/game_system/ShuumatsuBargainWars.rb +203 -0
  70. data/lib/bcdice/game_system/Siren.rb +97 -0
  71. data/lib/bcdice/game_system/Skynauts.rb +1 -1
  72. data/lib/bcdice/game_system/SkynautsBouken.rb +45 -130
  73. data/lib/bcdice/game_system/Strave.rb +1 -1
  74. data/lib/bcdice/game_system/SwordWorld.rb +1 -1
  75. data/lib/bcdice/game_system/TensaiGunshiNiNaro.rb +228 -0
  76. data/lib/bcdice/game_system/TheOneRing2nd.rb +406 -0
  77. data/lib/bcdice/game_system/TheUnofficialHollowKnightRPG.rb +185 -0
  78. data/lib/bcdice/game_system/TherapieSein.rb +1 -1
  79. data/lib/bcdice/game_system/TrailOfCthulhu.rb +139 -0
  80. data/lib/bcdice/game_system/TrinitySeven.rb +1 -1
  81. data/lib/bcdice/game_system/UnsungDuet.rb +17 -75
  82. data/lib/bcdice/game_system/UnsungDuet_Korean.rb +41 -0
  83. data/lib/bcdice/game_system/Utakaze.rb +55 -2
  84. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +12 -6
  85. data/lib/bcdice/game_system/Warhammer4.rb +124 -3
  86. data/lib/bcdice/game_system/WerewolfTheApocalypse5th.rb +12 -6
  87. data/lib/bcdice/game_system/Yotabana.rb +62 -0
  88. data/lib/bcdice/game_system/cthulhu7th/full_auto.rb +1 -1
  89. data/lib/bcdice/game_system/cyberpunk_red/tables.rb +111 -473
  90. data/lib/bcdice/game_system/kizuna_bullet/tables.rb +171 -0
  91. data/lib/bcdice/game_system/sword_world/rating_parser.rb +4 -2
  92. data/lib/bcdice/game_system.rb +24 -0
  93. data/lib/bcdice/loader.rb +1 -1
  94. data/lib/bcdice/version.rb +1 -1
  95. metadata +55 -5
@@ -0,0 +1,122 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class NRR < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'NRR'
8
+
9
+ # ゲームシステム名
10
+ NAME = 'nRR'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'えぬああるあある'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGETEXT
17
+ ▪️判定
18
+ ・ノーマルダイス NR8
19
+ ・有利ダイス NR10
20
+ ・不利ダイス NR6
21
+ ・Exダイス NR12
22
+
23
+ ダイスの個数を指定しての判定ができます。
24
+ 例:有利ダイス2個で判定 2NR10
25
+
26
+ ▪️判定結果とシンボル
27
+ ⭕:成功
28
+ ❌:失敗
29
+ ✨:クリティカル(大成功)
30
+ 💀:ファンブル(大失敗)
31
+ 🌈:ミラクル(奇跡)
32
+ INFO_MESSAGETEXT
33
+
34
+ register_prefix('\d*NR(6|8|10|12)')
35
+
36
+ def initialize(command)
37
+ super(command)
38
+
39
+ @sort_barabara_dice = true # バラバラロール(Bコマンド)でソート有
40
+ end
41
+
42
+ def eval_game_system_specific_command(command)
43
+ roll_nr(command)
44
+ end
45
+
46
+ private
47
+
48
+ def roll_nr(command)
49
+ m = /^(\d+)?NR(6|8|10|12)$/.match(command)
50
+ return nil unless m
51
+
52
+ times = m[1]&.to_i || 1
53
+ table = case m[2]
54
+ when "6"
55
+ DISADVANTAGE
56
+ when "8"
57
+ NORMAL
58
+ when "10"
59
+ ADVANTAGE
60
+ else
61
+ EXTRA
62
+ end
63
+
64
+ values = @randomizer.roll_barabara(times, table.size)
65
+ result = Result.new
66
+ text =
67
+ if times == 1
68
+ level = table[values[0] - 1]
69
+ result.condition = SUCCESSES.include?(level)
70
+ result.fumble = level == :fumble
71
+ result.critical = CRITICALS.include?(level)
72
+
73
+ "#{ICON[level]} #{RESULT_LABEL[level]}"
74
+ else
75
+ levels = values.map { |v| table[v - 1] }
76
+ values_count = levels
77
+ .group_by(&:itself)
78
+ .transform_values(&:length)
79
+
80
+ values_count_strs = LEVELS.map do |l|
81
+ count = values_count.fetch(l, 0)
82
+ next nil if count == 0
83
+
84
+ "#{ICON[l]} #{count}"
85
+ end
86
+
87
+ values_count_strs.compact.join(", ")
88
+ end
89
+
90
+ times_str = times == 1 ? nil : times
91
+ result.text = "(#{times_str}NR#{m[2]}) > #{values.join(',')} > #{text}"
92
+
93
+ result
94
+ end
95
+
96
+ LEVELS = [:fumble, :failure, :success, :critical, :miracle].freeze
97
+ SUCCESSES = [:success, :critical, :miracle].freeze
98
+ CRITICALS = [:critical, :miracle].freeze
99
+
100
+ DISADVANTAGE = [:fumble, :failure, :failure, :failure, :success, :success].freeze
101
+ NORMAL = [:fumble, :failure, :failure, :failure, :success, :success, :success, :critical].freeze
102
+ ADVANTAGE = [:fumble, :failure, :failure, :success, :success, :success, :success, :success, :critical, :critical].freeze
103
+ EXTRA = [:fumble, :fumble, :failure, :failure, :success, :success, :critical, :critical, :critical, :critical, :miracle, :miracle].freeze
104
+
105
+ ICON = {
106
+ fumble: "💀",
107
+ failure: "❌",
108
+ success: "⭕️",
109
+ critical: "✨",
110
+ miracle: "🌈",
111
+ }.freeze
112
+
113
+ RESULT_LABEL = {
114
+ fumble: "ファンブル(大失敗)",
115
+ failure: "失敗",
116
+ success: "成功",
117
+ critical: "クリティカル(大成功)",
118
+ miracle: "ミラクル(奇跡)",
119
+ }.freeze
120
+ end
121
+ end
122
+ end
@@ -47,7 +47,7 @@ module BCDice
47
47
 
48
48
  dice_count = m[1].to_i
49
49
  modifier = ArithmeticEvaluator.eval(m[2])
50
- target = m[5].nil? ? nil : m[5].to_i
50
+ target = m[5]&.to_i
51
51
 
52
52
  dice_list = @randomizer.roll_barabara(dice_count, 6)
53
53
  largest_two = dice_list.sort.reverse.take(2)
@@ -123,7 +123,7 @@ module BCDice
123
123
 
124
124
  # @return [ParsedNW, nil]
125
125
  def parse_nw(string)
126
- m = /^([-+]?\d+)?#{@nw_command}((?:[-+]\d+)+)?(?:@(\d+(?:,\d+)*))?(?:#(\d+(?:,\d+)*))?(?:\$(\d+(?:,\d+)*))?((?:[-+]\d+)+)?(?:([>=]+)(\d+))?$/.match(string)
126
+ m = /^([-+]?\d+)?#{@nw_command}((?:[-+]\d+)+)?(?:@(\d+(?:,\d+)*))?(?:#(\d+(?:,\d+)*))?(?:\$(\d+))?((?:[-+]\d+)+)?(?:([>=]+)(\d+))?$/.match(string)
127
127
  unless m
128
128
  return nil
129
129
  end
@@ -5,14 +5,27 @@ require 'bcdice/game_system/NightWizard'
5
5
  module BCDice
6
6
  module GameSystem
7
7
  class NightWizard3rd < NightWizard
8
+ # ゲームシステムの識別子
9
+ ID = 'NightWizard3rd'
10
+
8
11
  # ゲームシステム名
9
12
  NAME = 'ナイトウィザード The 3rd Edition'
10
13
 
11
14
  # ゲームシステム名の読みがな
12
15
  SORT_KEY = 'ないとういさあと3'
13
16
 
14
- # ゲームシステムの識別子
15
- ID = 'NightWizard3rd'
17
+ # ダイスボットの使い方
18
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
19
+ ・判定用コマンド (aNW+b@x#y$z+c)
20
+   a : 基本値
21
+   b : 常時に準じる特技による補正
22
+   c : 常時以外の特技、および支援効果による補正
23
+   x : クリティカル値のカンマ区切り(省略時 10)
24
+   y : ファンブル値のカンマ区切り(省略時 5)
25
+   z : プラーナによる達成値補正のプラーナ消費数(ファンブル時には適用されない)
26
+  クリティカル値、ファンブル値が無い場合は1や13などのあり得ない数値を入れてください。
27
+  例)12NW-5@7#2$3 1NW 50nw+5@7,10#2,5 50nw-5+10@7,10#2,5+15+25
28
+ INFO_MESSAGE_TEXT
16
29
 
17
30
  register_prefix('([-+]?\d+)?NW', '2R6')
18
31
 
@@ -81,7 +81,7 @@ module BCDice
81
81
  target = Regexp.last_match(6)
82
82
  target = target.to_i unless target.nil?
83
83
 
84
- modifyText = (Regexp.last_match(3) || "")
84
+ modifyText = Regexp.last_match(3) || ""
85
85
  modifyText = "+1" if modifyText == "+"
86
86
  modifyValue = modifyText.to_i
87
87