bcdice 3.4.0 → 3.5.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +36 -0
- data/i18n/BeginningIdol/ja_jp.yml +2806 -0
- data/i18n/BeginningIdol/ko_kr.yml +1400 -0
- data/i18n/KillDeathBusiness/ja_jp.yml +1 -1
- data/i18n/MagicaLogia/ja_jp.yml +1 -1
- data/i18n/MonotoneMuseum/ko_kr.yml +526 -53
- data/lib/bcdice/common_command/choice.rb +5 -1
- data/lib/bcdice/common_command/tally_dice/node.rb +135 -0
- data/lib/bcdice/common_command/tally_dice/parser.rb +302 -0
- data/lib/bcdice/common_command/tally_dice.rb +19 -0
- data/lib/bcdice/common_command.rb +2 -0
- data/lib/bcdice/dice_table/d66_table.rb +5 -1
- data/lib/bcdice/game_system/Aoharubaan.rb +91 -0
- data/lib/bcdice/game_system/AssaultEngine.rb +91 -0
- data/lib/bcdice/game_system/BadLife.rb +264 -289
- data/lib/bcdice/game_system/Bakenokawa.rb +244 -0
- data/lib/bcdice/game_system/BeginningIdol.rb +116 -2390
- data/lib/bcdice/game_system/BeginningIdol_Korean.rb +10 -2312
- data/lib/bcdice/game_system/CastleInGray.rb +133 -0
- data/lib/bcdice/game_system/Cthulhu.rb +2 -2
- data/lib/bcdice/game_system/Cthulhu7th.rb +6 -6
- data/lib/bcdice/game_system/DoubleCross.rb +5 -0
- data/lib/bcdice/game_system/Emoklore.rb +1 -1
- data/lib/bcdice/game_system/FateCoreSystem.rb +117 -0
- data/lib/bcdice/game_system/Karukami.rb +84 -0
- data/lib/bcdice/game_system/KurayamiCrying.rb +1 -1
- data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +4 -4
- data/lib/bcdice/game_system/{SterileLife.rb → StellarLife.rb} +162 -226
- data/lib/bcdice/game_system/SwordWorld.rb +6 -2
- data/lib/bcdice/game_system/SwordWorld2_0.rb +20 -5
- data/lib/bcdice/game_system/SwordWorld2_5.rb +6 -0
- data/lib/bcdice/game_system/TalesFromTheLoop.rb +83 -0
- data/lib/bcdice/game_system/YearZeroEngine.rb +40 -19
- data/lib/bcdice/game_system/beginning_idol/accessories_table.rb +31 -0
- data/lib/bcdice/game_system/beginning_idol/bad_status_table.rb +43 -0
- data/lib/bcdice/game_system/beginning_idol/chain_d66_table.rb +29 -0
- data/lib/bcdice/game_system/beginning_idol/chain_table.rb +37 -0
- data/lib/bcdice/game_system/beginning_idol/costume_table.rb +37 -0
- data/lib/bcdice/game_system/beginning_idol/d6_twice_table.rb +36 -0
- data/lib/bcdice/game_system/beginning_idol/item_table.rb +51 -0
- data/lib/bcdice/game_system/beginning_idol/my_skill_name_table.rb +44 -0
- data/lib/bcdice/game_system/beginning_idol/random_event_table.rb +31 -0
- data/lib/bcdice/game_system/beginning_idol/skill_table.rb +63 -0
- data/lib/bcdice/game_system/beginning_idol/table.rb +193 -0
- data/lib/bcdice/game_system/beginning_idol/with_abnormality.rb +74 -0
- data/lib/bcdice/game_system/beginning_idol/work_table.rb +57 -0
- data/lib/bcdice/game_system/one_way_heroics/random_event_table.rb +4 -4
- data/lib/bcdice/game_system/sword_world/rating_parsed.rb +46 -3
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +147 -106
- data/lib/bcdice/game_system.rb +8 -1
- data/lib/bcdice/version.rb +1 -1
- metadata +28 -3
@@ -0,0 +1,133 @@
|
|
1
|
+
module BCDice
|
2
|
+
module GameSystem
|
3
|
+
class CastleInGray < Base
|
4
|
+
# ゲームシステムの識別子
|
5
|
+
ID = "CastleInGray".freeze
|
6
|
+
|
7
|
+
# ゲームシステム名
|
8
|
+
NAME = "灰色城綺譚".freeze
|
9
|
+
|
10
|
+
# ゲームシステム名の読みがな
|
11
|
+
SORT_KEY = "はいいろしようきたん".freeze
|
12
|
+
|
13
|
+
HELP_MESSAGE = <<~TEXT.freeze
|
14
|
+
■ 色占い (BnWm)
|
15
|
+
n: 黒
|
16
|
+
m: 白
|
17
|
+
n, m は1~12の異なる整数
|
18
|
+
|
19
|
+
例) B12W7
|
20
|
+
例) B5W12
|
21
|
+
|
22
|
+
■ 悪意の渦による占い (MALn)
|
23
|
+
n: 悪意の渦
|
24
|
+
n は1~12の整数
|
25
|
+
|
26
|
+
■ その他
|
27
|
+
・感情表 ET
|
28
|
+
・暗示表(黒) BIT
|
29
|
+
・暗示表(白) WIT
|
30
|
+
TEXT
|
31
|
+
|
32
|
+
TABLES = {
|
33
|
+
"ET" => DiceTable::Table.new(
|
34
|
+
"感情表",
|
35
|
+
"1D12",
|
36
|
+
[
|
37
|
+
"友情(白)/敵視(黒)",
|
38
|
+
"恋慕(白)/嫌悪(黒)",
|
39
|
+
"信頼(白)/不信(黒)",
|
40
|
+
"同情(白)/憐憫(黒)",
|
41
|
+
"憧憬(白)/劣等感(黒)",
|
42
|
+
"尊敬(白)/蔑視(黒)",
|
43
|
+
"忠誠(白)/執着(黒)",
|
44
|
+
"有用(白)/邪魔(黒)",
|
45
|
+
"許容(白)/罪悪感(黒)",
|
46
|
+
"羨望(白)/嫉妬(黒)",
|
47
|
+
"共感(白)/拒絶(黒)",
|
48
|
+
"愛情(白)/狂信(黒)"
|
49
|
+
]
|
50
|
+
),
|
51
|
+
"BIT" => DiceTable::Table.new(
|
52
|
+
"暗示表(黒)",
|
53
|
+
"1D12",
|
54
|
+
[
|
55
|
+
"終わりなき夜に生まれつく者もあり",
|
56
|
+
"悪意もて真実を語らば",
|
57
|
+
"笑えども笑みはなし",
|
58
|
+
"影より抜け出ることあたわじ",
|
59
|
+
"心の赴くままに手をとれ",
|
60
|
+
"時ならぬ嵐の過ぎ去るを待つ",
|
61
|
+
"赦されぬと知るがゆえに",
|
62
|
+
"見張りは持ち場を離れる",
|
63
|
+
"誰もが盲いたる彷徨い人なり",
|
64
|
+
"落ちる日を眺めるがごとく",
|
65
|
+
"冷たく雨ぞ降りしきる",
|
66
|
+
"今日は笑む花も明日には枯れゆく"
|
67
|
+
]
|
68
|
+
),
|
69
|
+
"WIT" => DiceTable::Table.new(
|
70
|
+
"暗示表(白)",
|
71
|
+
"1D12",
|
72
|
+
[
|
73
|
+
"無垢なる者のみが真実を得る",
|
74
|
+
"げに慈悲深きは沈黙なり",
|
75
|
+
"懐かしき日々は去りぬ",
|
76
|
+
"束の間に光さす",
|
77
|
+
"迷える者に手を差し伸べよ",
|
78
|
+
"嵐の前には静けさがある",
|
79
|
+
"どうか責めないで",
|
80
|
+
"灯した明かりを絶やさぬように",
|
81
|
+
"目を開けて見よ",
|
82
|
+
"淑やかに訪れる",
|
83
|
+
"今こそ泣け、さもなくば二度と泣くな",
|
84
|
+
"時が許す間に薔薇を摘め"
|
85
|
+
]
|
86
|
+
),
|
87
|
+
}.freeze
|
88
|
+
|
89
|
+
register_prefix('B', 'MAL', TABLES.keys)
|
90
|
+
|
91
|
+
def eval_game_system_specific_command(command)
|
92
|
+
return roll_color(command) || roll_mal(command) || roll_tables(command, TABLES)
|
93
|
+
end
|
94
|
+
|
95
|
+
def roll_color(command)
|
96
|
+
m = /^B(\d{1,2})W(\d{1,2})$/.match(command)
|
97
|
+
return nil unless m
|
98
|
+
|
99
|
+
black = m[1].to_i
|
100
|
+
white = m[2].to_i
|
101
|
+
return nil unless black.between?(1, 12) && white.between?(1, 12)
|
102
|
+
|
103
|
+
value = @randomizer.roll_once(12)
|
104
|
+
|
105
|
+
if black == white
|
106
|
+
return color_text(black, white, value, '白と黒は重ねられません')
|
107
|
+
end
|
108
|
+
|
109
|
+
if white > black
|
110
|
+
return color_text(black, white, value, black <= value && value < white ? '黒' : '白')
|
111
|
+
else
|
112
|
+
return color_text(black, white, value, white <= value && value < black ? '白' : '黒')
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def color_text(black, white, value, result)
|
117
|
+
return "色占い(黒#{black}白#{white}) > [#{value}] > #{result}"
|
118
|
+
end
|
119
|
+
|
120
|
+
def roll_mal(command)
|
121
|
+
m = /^MAL(\d{1,2})$/i.match(command)
|
122
|
+
return nil unless m
|
123
|
+
|
124
|
+
mal = m[1].to_i
|
125
|
+
return nil unless mal.between?(1, 12)
|
126
|
+
|
127
|
+
value = @randomizer.roll_once(12)
|
128
|
+
result = value <= mal ? '黒' : '白'
|
129
|
+
return "悪意の渦(#{mal}) > [#{value}] > #{result}"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
@@ -193,12 +193,12 @@ module BCDice
|
|
193
193
|
end
|
194
194
|
|
195
195
|
def getRegistResult(command)
|
196
|
-
m = /^
|
196
|
+
m = /^RESB?(-?\d+)$/i.match(command)
|
197
197
|
unless m
|
198
198
|
return nil
|
199
199
|
end
|
200
200
|
|
201
|
-
value = m[
|
201
|
+
value = m[1].to_i
|
202
202
|
target = value * 5 + 50
|
203
203
|
|
204
204
|
if target < 5
|
@@ -64,17 +64,17 @@ module BCDice
|
|
64
64
|
combine_roll(command)
|
65
65
|
when /^FAR/i
|
66
66
|
getFullAutoResult(command)
|
67
|
-
when
|
67
|
+
when "BMR" # 狂気の発作(リアルタイム)
|
68
68
|
roll_bmr_table()
|
69
|
-
when
|
69
|
+
when "BMS" # 狂気の発作(サマリー)
|
70
70
|
roll_bms_table()
|
71
|
-
when
|
71
|
+
when "FCL" # キャスティング・ロールのプッシュに失敗した場合(小)
|
72
72
|
roll_1d8_table("キャスティング・ロール失敗(小)表", FAILED_CASTING_L_TABLE)
|
73
|
-
when
|
73
|
+
when "FCM" # キャスティング・ロールのプッシュに失敗した場合(大)
|
74
74
|
roll_1d8_table("キャスティング・ロール失敗(大)表", FAILED_CASTING_M_TABLE)
|
75
|
-
when
|
75
|
+
when "PH" # 恐怖症表
|
76
76
|
roll_1d100_table("恐怖症表", PHOBIAS_TABLE)
|
77
|
-
when
|
77
|
+
when "MA" # マニア表
|
78
78
|
roll_1d100_table("マニア表", MANIAS_TABLE)
|
79
79
|
end
|
80
80
|
end
|
@@ -67,7 +67,7 @@ module BCDice
|
|
67
67
|
success_value = 2 * critical + success - fumble
|
68
68
|
result = compare_result(success_value)
|
69
69
|
|
70
|
-
result.text = "#{values} > #{success_value} > #{result.text}"
|
70
|
+
result.text = "#{values} > #{success_value} > 成功数#{success_value} #{result.text}"
|
71
71
|
return result
|
72
72
|
end
|
73
73
|
|
@@ -0,0 +1,117 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class FateCoreSystem < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'FateCoreSystem'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = 'Fate Core System'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'ふえいとこあしすてむ'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<~MESSAGETEXT
|
17
|
+
■ ファッジダイスによる判定 (xDF+y>=t)
|
18
|
+
ファッジダイスをx個ダイスロールし、結果を判定します。
|
19
|
+
x: ダイス数
|
20
|
+
y: 修正値(省略可)
|
21
|
+
t: 目標値値(省略可)
|
22
|
+
例)4DF, 4DF>=3, 4DF+1>=3
|
23
|
+
MESSAGETEXT
|
24
|
+
|
25
|
+
register_prefix('\d+DF')
|
26
|
+
|
27
|
+
def eval_game_system_specific_command(command)
|
28
|
+
roll_df(command)
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def roll_df(command)
|
34
|
+
parser = Command::Parser.new("DF", round_type: @round_type)
|
35
|
+
.enable_prefix_number()
|
36
|
+
.restrict_cmp_op_to(:>=, nil)
|
37
|
+
|
38
|
+
parsed = parser.parse(command)
|
39
|
+
unless parsed
|
40
|
+
return nil
|
41
|
+
end
|
42
|
+
|
43
|
+
dice_list = roll_fate_dice(parsed.prefix_number)
|
44
|
+
total = dice_list.sum() + parsed.modify_number
|
45
|
+
|
46
|
+
fate_dice_list = dice_list.map do |i|
|
47
|
+
if i.zero?
|
48
|
+
"[ ]"
|
49
|
+
elsif i.positive?
|
50
|
+
"[+]"
|
51
|
+
else
|
52
|
+
"[-]"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
result = outcome(total, parsed.target_number)
|
57
|
+
sequence = [
|
58
|
+
"(#{parsed})",
|
59
|
+
"#{fate_dice_list.join()}#{Format.modifier(parsed.modify_number)}",
|
60
|
+
result_ladder(total),
|
61
|
+
result.text,
|
62
|
+
]
|
63
|
+
|
64
|
+
result.text = sequence.compact.join(" > ")
|
65
|
+
return result
|
66
|
+
end
|
67
|
+
|
68
|
+
def roll_fate_dice(times)
|
69
|
+
@randomizer.roll_barabara(times, 3).map { |i| i - 2 }
|
70
|
+
end
|
71
|
+
|
72
|
+
def result_ladder(total)
|
73
|
+
ladder =
|
74
|
+
case total.clamp(-2, 8)
|
75
|
+
when 8
|
76
|
+
"Legendary"
|
77
|
+
when 7
|
78
|
+
"Epic"
|
79
|
+
when 6
|
80
|
+
"Fantastic"
|
81
|
+
when 5
|
82
|
+
"Superb"
|
83
|
+
when 4
|
84
|
+
"Great"
|
85
|
+
when 3
|
86
|
+
"Good"
|
87
|
+
when 2
|
88
|
+
"Fair"
|
89
|
+
when 1
|
90
|
+
"Average"
|
91
|
+
when 0
|
92
|
+
"Mediocre"
|
93
|
+
when -1
|
94
|
+
"Poor"
|
95
|
+
else
|
96
|
+
"Terrible"
|
97
|
+
end
|
98
|
+
|
99
|
+
return "#{ladder}(#{format('%+d', total)})"
|
100
|
+
end
|
101
|
+
|
102
|
+
def outcome(total, target)
|
103
|
+
if target.nil?
|
104
|
+
Result.new
|
105
|
+
elsif total == target
|
106
|
+
Result.success("Tie")
|
107
|
+
elsif total >= target + 3
|
108
|
+
Result.critical("Succeed with Style")
|
109
|
+
elsif total >= target
|
110
|
+
Result.success("Succeed")
|
111
|
+
else
|
112
|
+
Result.failure("Fail")
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class Karukami < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'Karukami'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = 'カルカミ'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'かるかみ'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<~HELP_MESSAGE
|
17
|
+
■ 行為判定、ダメージ算出 (xUB+y@c>=t)
|
18
|
+
6面ダイスをx個ダイスロールし、クリティカル値以上の出目が出たら振り足して合計値を算出します。
|
19
|
+
x: ダイス数
|
20
|
+
y: 修正値(省略可)
|
21
|
+
c: クリティカル値(省略可)
|
22
|
+
t: 目標値値(省略可)
|
23
|
+
例)2UB, 2UB>=7, 3UB+1@5, 3UB+1@5<10
|
24
|
+
HELP_MESSAGE
|
25
|
+
|
26
|
+
register_prefix('\d+UB')
|
27
|
+
|
28
|
+
def eval_game_system_specific_command(command)
|
29
|
+
roll_ub(command)
|
30
|
+
end
|
31
|
+
|
32
|
+
def roll_ub(command)
|
33
|
+
parser = Command::Parser.new("UB", round_type: @round_type)
|
34
|
+
.has_prefix_number
|
35
|
+
.enable_critical
|
36
|
+
parsed = parser.parse(command)
|
37
|
+
unless parsed
|
38
|
+
return nil
|
39
|
+
end
|
40
|
+
|
41
|
+
critical = parsed.critical || 6
|
42
|
+
if critical <= 1
|
43
|
+
return "(#{parsed}) > クリティカル値は2以上としてください"
|
44
|
+
end
|
45
|
+
|
46
|
+
list_list = []
|
47
|
+
criticals = 0
|
48
|
+
stack = parsed.prefix_number
|
49
|
+
while stack > 0
|
50
|
+
dice_list = @randomizer.roll_barabara(stack, 6)
|
51
|
+
list_list.push(dice_list)
|
52
|
+
stack = dice_list.count { |x| x >= critical }
|
53
|
+
criticals += stack
|
54
|
+
end
|
55
|
+
|
56
|
+
total = list_list.flatten.sum() + parsed.modify_number
|
57
|
+
|
58
|
+
result =
|
59
|
+
if list_list.first.all?(1)
|
60
|
+
total = 0
|
61
|
+
Result.fumble("ファンブル")
|
62
|
+
elsif parsed.cmp_op.nil?
|
63
|
+
Result.new()
|
64
|
+
elsif total.send(parsed.cmp_op, parsed.target_number)
|
65
|
+
Result.success("成功")
|
66
|
+
else
|
67
|
+
Result.failure("失敗")
|
68
|
+
end
|
69
|
+
result.critical = criticals > 0
|
70
|
+
|
71
|
+
sequence = [
|
72
|
+
"(#{parsed})",
|
73
|
+
*list_list.map { |list| "[#{list.join(',')}]" },
|
74
|
+
total,
|
75
|
+
("#{criticals}クリティカル" if result.critical?),
|
76
|
+
result.text,
|
77
|
+
].compact
|
78
|
+
|
79
|
+
result.text = sequence.join(" > ")
|
80
|
+
return result
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -47,7 +47,7 @@ module BCDice
|
|
47
47
|
"さっきからずっと、不気味な視線を感じる……どうやら、良くない存在に目をつけられてしまったようだ。「怪異」があなたに一方的な「ツナガリ」を獲得する。すでに「怪異」から「ツナガリ」を獲得されている場合、ダイスを振り直し、再度「アクシデント表」に当てはめる。",
|
48
48
|
"ぶつんと頭の中で音がする。あれっ?誰かのことを考えていたような……なんだか記憶が霞んで、思い出せない。あなたが獲得している「ツナガリ」をランダムに1つ失う(「継続的なツナガリ」である場合、セッション終了後に再度獲得する)。「ツナガリ」が1つもない場合、ダイスを振り直し、再度「アクシデント表」に当てはめる。",
|
49
49
|
"ぞわりと背中に懇寒が走る。自分を取り巻く「流れ」──運命に似た何かが歪んでしまったような、おぞましい予感が胸を走る。「確保」しているダイスの目が「10」になる。ダイスを「確保」していない場合、新たに「10」を「確保」する。すでに「10」の目を「確保」している場合、ダイスを振り直し、再度「アクシデント表」に当てはめる。",
|
50
|
-
"違う……違う、違う。これは自分のせいじゃない。いや、きっと何かの間違いだ。そう、あいつのせいに決まってる!進行役があなた以外の主人公をランダムに1
|
50
|
+
"違う……違う、違う。これは自分のせいじゃない。いや、きっと何かの間違いだ。そう、あいつのせいに決まってる!進行役があなた以外の主人公をランダムに1人選ぶ(誰を選んだか参加者に教えてはならない) 。選ばれた主人公が次に判定を行った際、進行役は、最も低い数字を示しているダイスの目を「10」に変更する。",
|
51
51
|
"あぁ……見つからない。アレがないとダメなのに。一体どうしたら──!「アイテム」をランダムに1つ失う(「継続品」である場合、センョン終了後に再度獲得する)。「アイテム」を1つも所持していない場合、「アイテム」を所持する主人公をランダムに1人選び、2点のダメージを与え、「アイテム」を1つ奪い取る。主人公が誰も「アイテム」を所持していない場合、「理性」を2点失う。",
|
52
52
|
"まるで自分を支える何かが失われたように、あなたはその場に立ち尽くす。諦めと絶望が心を支配する。ああ、そうか。これが、「心が折れる」ということか……。あなたは「理性」を4点失う。"
|
53
53
|
]
|
@@ -23,10 +23,10 @@ module BCDice
|
|
23
23
|
자동성공, 자동실패, 성공, 실패를 자동표기합니다.
|
24
24
|
・각종표
|
25
25
|
・감정표 ET/감정표 2.0 ET2
|
26
|
-
・징조표 OT
|
27
|
-
・일그러짐표 DT/일그러짐표ver2.0 DT2
|
28
|
-
・세계왜곡표 WDT
|
29
|
-
|
26
|
+
・징조표 OT/징조표ver2.0 OT2/징조표ver3.0 OT3
|
27
|
+
・일그러짐표 DT/일그러짐표ver2.0 DT2/일그러짐표(야외) DTO/일그러짐표(바다) DTS/일그러짐표(저택・성) DTM
|
28
|
+
・세계왜곡표 WDT/세계왜곡표2.0 WDT2
|
29
|
+
・영구소실표 EDT
|
30
30
|
・D66다이스 있음
|
31
31
|
INFO_MESSAGE_TEXT
|
32
32
|
|