bcdice 3.11.0 → 3.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +58 -0
- data/i18n/FutariSousa/ko_kr.yml +1625 -529
- data/i18n/Insane/ko_kr.yml +393 -258
- data/i18n/NinjaSlayer2/ja_jp.yml +34 -0
- data/lib/bcdice/arithmetic/parser.rb +4 -2
- data/lib/bcdice/base.rb +1 -1
- data/lib/bcdice/command/parser.rb +4 -2
- data/lib/bcdice/common_command/add_dice/parser.rb +4 -2
- data/lib/bcdice/common_command/barabara_dice/parser.rb +4 -2
- data/lib/bcdice/common_command/calc/parser.rb +4 -2
- data/lib/bcdice/common_command/reroll_dice/parser.rb +4 -2
- data/lib/bcdice/common_command/tally_dice/parser.rb +4 -2
- data/lib/bcdice/common_command/upper_dice/parser.rb +4 -2
- data/lib/bcdice/game_system/Airgetlamh.rb +1 -1
- data/lib/bcdice/game_system/Alsetto.rb +2 -2
- data/lib/bcdice/game_system/AniMalus.rb +221 -0
- data/lib/bcdice/game_system/ArknightsFan.rb +182 -0
- data/lib/bcdice/game_system/Avandner.rb +1 -1
- data/lib/bcdice/game_system/BBN.rb +1 -1
- data/lib/bcdice/game_system/BadLife.rb +3 -3
- data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
- data/lib/bcdice/game_system/Chill3.rb +6 -6
- data/lib/bcdice/game_system/DarkSouls.rb +1 -1
- data/lib/bcdice/game_system/Elric.rb +1 -1
- data/lib/bcdice/game_system/Emoklore.rb +4 -6
- data/lib/bcdice/game_system/FullFace.rb +92 -0
- data/lib/bcdice/game_system/FutariSousa_Korean.rb +44 -19
- data/lib/bcdice/game_system/HunterTheReckoning5th.rb +10 -3
- data/lib/bcdice/game_system/InfiniteFantasia.rb +4 -1
- data/lib/bcdice/game_system/Insane_Korean.rb +11 -11
- data/lib/bcdice/game_system/Irisbane.rb +1 -1
- data/lib/bcdice/game_system/KamitsubakiCityUnderConstructionNarrative.rb +251 -0
- data/lib/bcdice/game_system/KillDeathBusiness.rb +1 -1
- data/lib/bcdice/game_system/KyokoShinshoku.rb +158 -0
- data/lib/bcdice/game_system/Liminal.rb +136 -0
- data/lib/bcdice/game_system/MetalHead.rb +1 -1
- data/lib/bcdice/game_system/MetalHeadExtream.rb +1 -1
- data/lib/bcdice/game_system/NRR.rb +122 -0
- data/lib/bcdice/game_system/NSSQ.rb +1 -1
- data/lib/bcdice/game_system/NightWizard.rb +1 -1
- data/lib/bcdice/game_system/NightWizard3rd.rb +15 -2
- data/lib/bcdice/game_system/NinjaSlayer.rb +3 -1
- data/lib/bcdice/game_system/NinjaSlayer2.rb +299 -0
- data/lib/bcdice/game_system/OneWayHeroics.rb +1 -1
- data/lib/bcdice/game_system/PastFutureParadox.rb +1238 -0
- data/lib/bcdice/game_system/Postman.rb +3 -3
- data/lib/bcdice/game_system/RecordOfSteam.rb +1 -1
- data/lib/bcdice/game_system/RuneQuestRoleplayingInGlorantha.rb +10 -7
- data/lib/bcdice/game_system/Ryutama.rb +4 -4
- data/lib/bcdice/game_system/SajinsenkiAGuS.rb +5 -1
- data/lib/bcdice/game_system/SajinsenkiAGuS2E.rb +285 -0
- data/lib/bcdice/game_system/Siren.rb +97 -0
- data/lib/bcdice/game_system/Skynauts.rb +1 -1
- data/lib/bcdice/game_system/SkynautsBouken.rb +1 -1
- data/lib/bcdice/game_system/Strave.rb +1 -1
- data/lib/bcdice/game_system/SwordWorld.rb +16 -0
- data/lib/bcdice/game_system/SwordWorld2_5.rb +8 -1
- data/lib/bcdice/game_system/TherapieSein.rb +1 -1
- data/lib/bcdice/game_system/TrinitySeven.rb +1 -1
- data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +21 -9
- data/lib/bcdice/game_system/WerewolfTheApocalypse5th.rb +179 -0
- data/lib/bcdice/game_system/cthulhu7th/full_auto.rb +1 -1
- data/lib/bcdice/game_system/sword_world/rating_options.rb +3 -0
- data/lib/bcdice/game_system/sword_world/rating_parsed.rb +9 -0
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +177 -130
- data/lib/bcdice/game_system/sword_world/transcendent_test.rb +1 -1
- data/lib/bcdice/game_system.rb +12 -0
- data/lib/bcdice/loader.rb +1 -1
- data/lib/bcdice/version.rb +1 -1
- metadata +32 -5
@@ -22,14 +22,14 @@ module BCDice
|
|
22
22
|
2VMF6+3
|
23
23
|
2VMI9H3
|
24
24
|
|
25
|
-
難易度指定:成功数のカウント、判定成功と失敗、Critical処理、Critical Winのチェックを行う
|
25
|
+
難易度指定:成功数のカウント、判定成功と失敗、Critical処理、Critical Win、Total Failureのチェックを行う
|
26
26
|
(Hungerダイスがある場合)Messy CriticalとBestial Failureチェックを行う
|
27
27
|
例) (難易度)VMF(通常ダイス)+(Hungerダイス)
|
28
28
|
(難易度)VMF(通常ダイス)
|
29
29
|
(難易度)VMI(通常ダイス)H(Hungerダイス)
|
30
30
|
(難易度)VMI(通常ダイス)
|
31
31
|
|
32
|
-
難易度省略:成功数のカウント、判定失敗、Critical
|
32
|
+
難易度省略:成功数のカウント、判定失敗、Critical処理、Total Failure、(Hungerダイスがある場合)Bestial Failureチェックを行う
|
33
33
|
判定成功、Messy Criticalのチェックを行わない
|
34
34
|
Critical Win、(Hungerダイスがある場合)Bestial Failure、Messy Criticalのヒントを出力
|
35
35
|
例) VMF(通常ダイス)+(Hungerダイス)
|
@@ -58,20 +58,23 @@ module BCDice
|
|
58
58
|
register_prefix('\d*(VMF|(VMI\d*(H\d?)?))')
|
59
59
|
|
60
60
|
def eval_game_system_specific_command(command)
|
61
|
-
m = /\A(\d+)?(((VMF)(\d)(\+(\d+))?)|((VMI)(\d)(H(\d+))?))$/.match(command)
|
61
|
+
m = /\A(\d+)?(((VMF)(\d+)(\+(\d+))?)|((VMI)(\d+)(H(\d+))?))$/.match(command)
|
62
62
|
unless m
|
63
63
|
return ''
|
64
64
|
end
|
65
65
|
|
66
66
|
dice_pool, hunger_dice_pool = get_dice_pools(m)
|
67
67
|
if dice_pool < 0
|
68
|
-
return "
|
68
|
+
return "ダイスプール0のときにHungerダイスは指定できません。"
|
69
|
+
end
|
70
|
+
if hunger_dice_pool > 5
|
71
|
+
return "Hungerダイス指定は5ダイスが最大です。"
|
69
72
|
end
|
70
73
|
|
71
74
|
dice_text, success_dice, ten_dice, = make_dice_roll(dice_pool)
|
72
75
|
result_text = "(#{dice_pool}D10"
|
73
76
|
|
74
|
-
if hunger_dice_pool
|
77
|
+
if hunger_dice_pool >= 0
|
75
78
|
hunger_dice_text, hunger_success_dice, hunger_ten_dice, hunger_botch_dice = make_dice_roll(hunger_dice_pool)
|
76
79
|
|
77
80
|
ten_dice += hunger_ten_dice
|
@@ -97,11 +100,17 @@ module BCDice
|
|
97
100
|
hunger_dice_included_command = m[COMMAND_HUNGER_DICE_INCLUDED_INDEX]
|
98
101
|
if hunger_dice_included_command && hunger_dice_included_command == "VMI"
|
99
102
|
# Hunger Diceを内数処理するの場合
|
100
|
-
hunger_dice_pool = m[HUNGER_DICE_INCLUDED_INDEX]
|
101
|
-
|
103
|
+
hunger_dice_pool = m[HUNGER_DICE_INCLUDED_INDEX].nil? ? -1 : m[HUNGER_DICE_INCLUDED_INDEX].to_i
|
104
|
+
dice_pool_value = m[DICE_POOL_HUNGER_DICE_INCLUDED_INDEX].to_i
|
105
|
+
dice_pool = dice_pool_value - (hunger_dice_pool < 0 ? 0 : hunger_dice_pool)
|
106
|
+
if dice_pool_value > 0 && hunger_dice_pool >= dice_pool_value
|
107
|
+
# 1 以上のダイスプール、かつ、Hungerダイスがダイスプール以上のとき、ダイスプールが全てHungerダイスになる。
|
108
|
+
dice_pool = 0
|
109
|
+
hunger_dice_pool = dice_pool_value
|
110
|
+
end
|
102
111
|
else
|
103
112
|
# Hunger DiceがPLによる内数指定の場合
|
104
|
-
hunger_dice_pool = m[HUNGER_DICE_NO_INCLUDED_INDEX]
|
113
|
+
hunger_dice_pool = m[HUNGER_DICE_NO_INCLUDED_INDEX].nil? ? -1 : m[HUNGER_DICE_NO_INCLUDED_INDEX].to_i
|
105
114
|
dice_pool = m[DICE_POOL_HUNGER_DICE_NO_INCLUDED_INDEX].to_i
|
106
115
|
end
|
107
116
|
return dice_pool, hunger_dice_pool
|
@@ -128,6 +137,9 @@ module BCDice
|
|
128
137
|
if hunger_botch_dice > 0
|
129
138
|
return Result.fumble("#{result_text}:判定失敗! [Bestial Failure]")
|
130
139
|
end
|
140
|
+
if success_dice == 0
|
141
|
+
return Result.fumble("#{result_text}:判定失敗! [Total Failure]")
|
142
|
+
end
|
131
143
|
|
132
144
|
return Result.failure("#{result_text}:判定失敗!")
|
133
145
|
end
|
@@ -137,7 +149,7 @@ module BCDice
|
|
137
149
|
return Result.fumble("#{result_text}:判定失敗! [Bestial Failure]")
|
138
150
|
end
|
139
151
|
|
140
|
-
return Result.
|
152
|
+
return Result.fumble("#{result_text}:判定失敗! [Total Failure]")
|
141
153
|
else
|
142
154
|
if hunger_botch_dice > 0
|
143
155
|
result_text = "#{result_text}\n 判定失敗なら [Bestial Failure]"
|
@@ -0,0 +1,179 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class WerewolfTheApocalypse5th < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'WerewolfTheApocalypse5th'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = 'Werewolf: The Apocalypse 5th Edition'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'わあうふるしあほかりふす5'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<~MESSAGETEXT
|
17
|
+
・判定コマンド(nWAFx+x または nWAIxRx)
|
18
|
+
WAFコマンドはRageダイスとダイスプールを個別に指定する。
|
19
|
+
WAIコマンドはRageダイスをダイスプールの内数として指定する。
|
20
|
+
|
21
|
+
例:難易度2、9ダイスプールでRageダイス3個の場合、それぞれ以下のようなコマンドとなる。
|
22
|
+
2WAF6+3
|
23
|
+
2WAI9R3
|
24
|
+
|
25
|
+
難易度指定:成功数のカウント、判定成功と失敗、(Rageダイスがある場合)Brutal outcome、Critical処理、Total Failure、Critical Winのチェックを行う
|
26
|
+
例) (難易度)WAF(通常ダイス)+(Rageダイス)
|
27
|
+
(難易度)WAF(通常ダイス)
|
28
|
+
(難易度)WAI(通常ダイス)R(Rageダイス)
|
29
|
+
(難易度)WAI(通常ダイス)
|
30
|
+
|
31
|
+
難易度省略:成功数のカウント、判定失敗、(Rageダイスがある場合)Brutal outcome、Critical処理、Total Failureのチェックを行う
|
32
|
+
判定成功チェックを行わない
|
33
|
+
Critical Winのヒントを出力
|
34
|
+
例) WAF(通常ダイス)+(Rageダイス)
|
35
|
+
WAF(通常ダイス)
|
36
|
+
WAI(通常ダイス)R(Rageダイス)
|
37
|
+
WAI(通常ダイス)
|
38
|
+
|
39
|
+
難易度0指定:Critical処理と成功数のカウントを行い、全てのチェックを行わない
|
40
|
+
例) 0WAF(通常ダイス)+(Rageダイス)
|
41
|
+
0WAF(通常ダイス)
|
42
|
+
0WAI(通常ダイス)+(Rageダイス)
|
43
|
+
0WAI(通常ダイス)
|
44
|
+
|
45
|
+
MESSAGETEXT
|
46
|
+
|
47
|
+
DIFFICULTY_INDEX = 1
|
48
|
+
DICE_POOL_RAGE_DICE_NO_INCLUDED_INDEX = 5
|
49
|
+
RAGE_DICE_NO_INCLUDED_INDEX = 7
|
50
|
+
COMMAND_RAGE_DICE_INCLUDED_INDEX = 9
|
51
|
+
DICE_POOL_RAGE_DICE_INCLUDED_INDEX = 10
|
52
|
+
RAGE_DICE_INCLUDED_INDEX = 12
|
53
|
+
|
54
|
+
# 難易度に指定可能な特殊値
|
55
|
+
NOT_CHECK_SUCCESS = -1 # 判定成功にかかわるチェックを行わない(判定失敗に関わるチェックは行う)
|
56
|
+
|
57
|
+
register_prefix('\d*(WAF|(WAI\d*(R\d?)?))')
|
58
|
+
|
59
|
+
def eval_game_system_specific_command(command)
|
60
|
+
m = /\A(\d+)?(((WAF)(\d+)(\+(\d+))?)|((WAI)(\d+)(R(\d+))?))$/.match(command)
|
61
|
+
unless m
|
62
|
+
return ''
|
63
|
+
end
|
64
|
+
|
65
|
+
dice_pool, rage_dice_pool = get_dice_pools(m)
|
66
|
+
if dice_pool < 0
|
67
|
+
return "ダイスプール0のときにRageダイスは指定できません。"
|
68
|
+
end
|
69
|
+
if rage_dice_pool > 5
|
70
|
+
return "5を超えるRageダイス指定はできません。"
|
71
|
+
end
|
72
|
+
|
73
|
+
dice_text, success_dice, ten_dice, = make_dice_roll(dice_pool)
|
74
|
+
result_text = "(#{dice_pool}D10"
|
75
|
+
|
76
|
+
if rage_dice_pool >= 0
|
77
|
+
rage_dice_text, rage_success_dice, rage_ten_dice, brutal_result_dice = make_dice_roll(rage_dice_pool)
|
78
|
+
|
79
|
+
brutal_outcome = brutal_result_dice / 2
|
80
|
+
ten_dice += rage_ten_dice
|
81
|
+
success_dice += rage_success_dice
|
82
|
+
|
83
|
+
result_text = "#{result_text}+#{rage_dice_pool}D10) > [#{dice_text}]+[#{rage_dice_text}] "
|
84
|
+
else
|
85
|
+
rage_ten_dice = 0
|
86
|
+
brutal_outcome = 0
|
87
|
+
result_text = "#{result_text}) > [#{dice_text}] "
|
88
|
+
end
|
89
|
+
|
90
|
+
success_dice += get_critical_success(ten_dice)
|
91
|
+
|
92
|
+
difficulty = m[DIFFICULTY_INDEX] ? m[DIFFICULTY_INDEX].to_i : NOT_CHECK_SUCCESS
|
93
|
+
|
94
|
+
return get_roll_result(result_text, success_dice, ten_dice, rage_ten_dice, brutal_outcome, difficulty)
|
95
|
+
end
|
96
|
+
|
97
|
+
private
|
98
|
+
|
99
|
+
def get_dice_pools(m)
|
100
|
+
rage_dice_included_command = m[COMMAND_RAGE_DICE_INCLUDED_INDEX]
|
101
|
+
if rage_dice_included_command && rage_dice_included_command == "WAI"
|
102
|
+
# Rage Diceを内数処理するの場合
|
103
|
+
rage_dice_pool = m[RAGE_DICE_INCLUDED_INDEX].nil? ? -1 : m[RAGE_DICE_INCLUDED_INDEX].to_i
|
104
|
+
dice_pool_value = m[DICE_POOL_RAGE_DICE_INCLUDED_INDEX].to_i
|
105
|
+
dice_pool = dice_pool_value - (rage_dice_pool < 0 ? 0 : rage_dice_pool)
|
106
|
+
if dice_pool_value > 0 && rage_dice_pool >= dice_pool_value
|
107
|
+
# 1 以上のダイスプール、かつ、Rageダイスがダイスプール以上のとき、ダイスプールが全てRageダイスになる。
|
108
|
+
dice_pool = 0
|
109
|
+
rage_dice_pool = dice_pool_value
|
110
|
+
end
|
111
|
+
else
|
112
|
+
# Rage DiceがPLによる内数指定の場合
|
113
|
+
rage_dice_pool = m[RAGE_DICE_NO_INCLUDED_INDEX].nil? ? -1 : m[RAGE_DICE_NO_INCLUDED_INDEX].to_i
|
114
|
+
dice_pool = m[DICE_POOL_RAGE_DICE_NO_INCLUDED_INDEX].to_i
|
115
|
+
end
|
116
|
+
return dice_pool, rage_dice_pool
|
117
|
+
end
|
118
|
+
|
119
|
+
def get_roll_result(result_text, success_dice, ten_dice, _rage_ten_dice, brutal_outcome, difficulty)
|
120
|
+
is_critical = ten_dice >= 2
|
121
|
+
|
122
|
+
if brutal_outcome > 0 && difficulty != 0
|
123
|
+
success_dice += 4
|
124
|
+
result_text = "#{result_text} [Brutal outcome] 自動失敗、または 成功数=#{success_dice}"
|
125
|
+
else
|
126
|
+
result_text = "#{result_text} 成功数=#{success_dice}"
|
127
|
+
end
|
128
|
+
|
129
|
+
if difficulty > 0
|
130
|
+
result_text = "#{result_text} 難易度=#{difficulty}"
|
131
|
+
if success_dice >= difficulty
|
132
|
+
result_text = "#{result_text} 差分=#{success_dice - difficulty}"
|
133
|
+
|
134
|
+
if is_critical
|
135
|
+
result_data = Result.critical("#{result_text}:判定成功! [Critical Win]")
|
136
|
+
return brutal_outcome > 0 ? result_data.text : result_data
|
137
|
+
end
|
138
|
+
result_data = Result.success("#{result_text}:判定成功!")
|
139
|
+
return brutal_outcome > 0 ? result_data.text : result_data
|
140
|
+
else
|
141
|
+
if success_dice == 0
|
142
|
+
return Result.fumble("#{result_text}:判定失敗! [Total Failure]")
|
143
|
+
else
|
144
|
+
return Result.failure("#{result_text}:判定失敗!")
|
145
|
+
end
|
146
|
+
end
|
147
|
+
elsif difficulty < 0
|
148
|
+
if success_dice == 0
|
149
|
+
return Result.fumble("#{result_text}:判定失敗! [Total Failure]")
|
150
|
+
else
|
151
|
+
if is_critical
|
152
|
+
result_text = "#{result_text}\n 判定成功なら [Critical Win]"
|
153
|
+
end
|
154
|
+
return result_text.to_s
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
# 難易度0指定(=全ての判定チェックを行わない)
|
159
|
+
return result_text.to_s
|
160
|
+
end
|
161
|
+
|
162
|
+
def get_critical_success(ten_dice)
|
163
|
+
# 10の目が2個毎に追加2成功
|
164
|
+
return ((ten_dice / 2) * 2)
|
165
|
+
end
|
166
|
+
|
167
|
+
def make_dice_roll(dice_pool)
|
168
|
+
dice_list = @randomizer.roll_barabara(dice_pool, 10)
|
169
|
+
|
170
|
+
dice_text = dice_list.join(',')
|
171
|
+
success_dice = dice_list.count { |x| x >= 6 }
|
172
|
+
ten_dice = dice_list.count(10)
|
173
|
+
brutal_result_dice = dice_list.count(1) + dice_list.count(2)
|
174
|
+
|
175
|
+
return dice_text, success_dice, ten_dice, brutal_result_dice
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
@@ -37,6 +37,9 @@ module BCDice
|
|
37
37
|
# @return [Integer, nil]
|
38
38
|
attr_accessor :modifier_after_half
|
39
39
|
|
40
|
+
# @return [Integer, nil]
|
41
|
+
attr_accessor :modifier_after_one_and_a_half
|
42
|
+
|
40
43
|
def initialize(rate, modifier)
|
41
44
|
@rate = rate
|
42
45
|
@modifier = modifier
|
@@ -49,6 +52,7 @@ module BCDice
|
|
49
52
|
@semi_fixed_val = 0
|
50
53
|
@tmp_fixed_val = 0
|
51
54
|
@modifier_after_half = nil
|
55
|
+
@modifier_after_one_and_a_half = nil
|
52
56
|
end
|
53
57
|
|
54
58
|
# @return [Boolean]
|
@@ -56,6 +60,11 @@ module BCDice
|
|
56
60
|
return !@modifier_after_half.nil?
|
57
61
|
end
|
58
62
|
|
63
|
+
# @return [Boolean]
|
64
|
+
def one_and_a_half
|
65
|
+
return !@modifier_after_one_and_a_half.nil?
|
66
|
+
end
|
67
|
+
|
59
68
|
# @return [Integer]
|
60
69
|
def min_critical
|
61
70
|
if @semi_fixed_val <= 1
|