bcdice 3.13.0 → 3.15.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 +104 -0
- data/i18n/Arianrhod/ko_kr.yml +3 -0
- data/i18n/Cthulhu/en_us.yml +11 -0
- data/i18n/Cthulhu/zh_hant.yml +1 -1
- data/i18n/CyberpunkRed/ja_jp.yml +389 -0
- data/i18n/CyberpunkRed/ko_kr.yml +389 -0
- data/i18n/DoubleCross/ja_jp.yml +53 -0
- data/i18n/DoubleCross/ko_kr.yml +52 -0
- data/i18n/FinalFantasyXIV/en_us.yml +4 -0
- data/i18n/FinalFantasyXIV/ja_jp.yml +4 -0
- data/i18n/FutariSousa/ja_jp.yml +284 -127
- data/i18n/KillDeathBusiness/ja_jp.yml +198 -0
- data/i18n/KizunaBullet/ja_jp.yml +653 -0
- data/i18n/MagicaLogia/ko_kr.yml +2 -2
- data/i18n/MonotoneMuseum/ja_jp.yml +246 -14
- data/i18n/MonotoneMuseum/ko_kr.yml +227 -0
- data/i18n/SkynautsBouken/ja_jp.yml +114 -0
- data/i18n/SkynautsBouken/ko_kr.yml +114 -0
- data/i18n/StratoShout/ko_kr.yml +102 -102
- data/i18n/TensaiGunshiNiNaro/ja_jp.yml +126 -0
- data/i18n/UnsungDuet/ja_jp.yml +62 -0
- data/i18n/UnsungDuet/ko_kr.yml +62 -0
- data/i18n/en_us.yml +5 -0
- data/i18n/zh_hant.yml +5 -0
- data/lib/bcdice/dice_table/range_table.rb +24 -0
- data/lib/bcdice/game_system/Agnostos.rb +248 -0
- data/lib/bcdice/game_system/Aionia.rb +131 -0
- data/lib/bcdice/game_system/AniMalus.rb +99 -59
- data/lib/bcdice/game_system/Arianrhod_Korean.rb +32 -0
- data/lib/bcdice/game_system/ArknightsFan.rb +245 -87
- data/lib/bcdice/game_system/BlackJacket.rb +244 -0
- data/lib/bcdice/game_system/BlackJacket_Korean.rb +244 -0
- data/lib/bcdice/game_system/CharonSanctions.rb +112 -0
- data/lib/bcdice/game_system/ConvictorDrive.rb +5 -4
- data/lib/bcdice/game_system/Cthulhu7th.rb +1 -1
- data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional/full_auto.rb +293 -0
- data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional/rollable.rb +43 -0
- data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +470 -306
- data/lib/bcdice/game_system/Cthulhu_English.rb +59 -0
- data/lib/bcdice/game_system/CyberpunkRed.rb +15 -6
- data/lib/bcdice/game_system/CyberpunkRed_Korean.rb +66 -0
- data/lib/bcdice/game_system/DivineCharger.rb +841 -0
- data/lib/bcdice/game_system/DoubleCross.rb +18 -1
- data/lib/bcdice/game_system/DoubleCross_Korean.rb +5 -1
- data/lib/bcdice/game_system/FinalFantasyXIV.rb +115 -0
- data/lib/bcdice/game_system/FinalFantasyXIV_English.rb +39 -0
- data/lib/bcdice/game_system/FullFace.rb +63 -12
- data/lib/bcdice/game_system/FutariSousa.rb +105 -13
- data/lib/bcdice/game_system/Garactier.rb +479 -0
- data/lib/bcdice/game_system/GardenOrder.rb +390 -9
- data/lib/bcdice/game_system/GundogRevised.rb +8 -8
- data/lib/bcdice/game_system/Insane_Korean.rb +1 -1
- data/lib/bcdice/game_system/InvisibleLiar.rb +79 -0
- data/lib/bcdice/game_system/KillDeathBusiness.rb +155 -3
- data/lib/bcdice/game_system/KimitoYell.rb +568 -0
- data/lib/bcdice/game_system/KizunaBullet.rb +240 -0
- data/lib/bcdice/game_system/KyokoShinshoku.rb +51 -8
- data/lib/bcdice/game_system/Magius.rb +125 -0
- data/lib/bcdice/game_system/Magius_3rdNewTokyoCity.rb +62 -0
- data/lib/bcdice/game_system/MonotoneMuseum.rb +14 -1
- data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +4 -4
- data/lib/bcdice/game_system/NRR.rb +2 -2
- data/lib/bcdice/game_system/NSSQ.rb +17 -9
- data/lib/bcdice/game_system/NervWhitePaper.rb +129 -0
- data/lib/bcdice/game_system/RogueLikeHalf.rb +198 -0
- data/lib/bcdice/game_system/RuneQuestRoleplayingInGlorantha.rb +16 -13
- data/lib/bcdice/game_system/ShinobiGami.rb +73 -43
- data/lib/bcdice/game_system/ShuumatsuBargainWars.rb +203 -0
- data/lib/bcdice/game_system/SkynautsBouken.rb +49 -134
- data/lib/bcdice/game_system/SkynautsBouken_Korean.rb +57 -0
- data/lib/bcdice/game_system/StratoShout_Korean.rb +1 -1
- data/lib/bcdice/game_system/SwordWorld.rb +5 -1
- data/lib/bcdice/game_system/SwordWorld2_5.rb +3 -2
- data/lib/bcdice/game_system/TensaiGunshiNiNaro.rb +262 -0
- data/lib/bcdice/game_system/TheIndieHack.rb +82 -0
- data/lib/bcdice/game_system/TheOneRing2nd.rb +406 -0
- data/lib/bcdice/game_system/TheUnofficialHollowKnightRPG.rb +185 -0
- data/lib/bcdice/game_system/TorgEternity.rb +35 -6
- data/lib/bcdice/game_system/TrailOfCthulhu.rb +139 -0
- data/lib/bcdice/game_system/UnsungDuet.rb +17 -75
- data/lib/bcdice/game_system/UnsungDuet_Korean.rb +41 -0
- data/lib/bcdice/game_system/Utakaze.rb +55 -2
- data/lib/bcdice/game_system/Warhammer4.rb +124 -3
- data/lib/bcdice/game_system/WoW.rb +161 -0
- data/lib/bcdice/game_system/YankeeMustDie.rb +192 -0
- data/lib/bcdice/game_system/YearZeroEngine.rb +225 -28
- data/lib/bcdice/game_system/Yotabana.rb +62 -0
- data/lib/bcdice/game_system/YuMyoKishi.rb +141 -0
- data/lib/bcdice/game_system/cyberpunk_red/tables.rb +111 -473
- data/lib/bcdice/game_system/kizuna_bullet/tables.rb +171 -0
- data/lib/bcdice/game_system/sword_world/rating_lexer.rb +1 -0
- data/lib/bcdice/game_system/sword_world/rating_options.rb +4 -1
- data/lib/bcdice/game_system/sword_world/rating_parsed.rb +5 -0
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +129 -115
- data/lib/bcdice/game_system.rb +31 -0
- data/lib/bcdice/version.rb +1 -1
- metadata +50 -6
@@ -27,6 +27,9 @@ module BCDice
|
|
27
27
|
ポジティブとネガティブの両方を振って、表になっている側に○を付けて表示します。
|
28
28
|
もちろん任意で選ぶ部分は変更して構いません。
|
29
29
|
|
30
|
+
・ハプニングチャート(HC)
|
31
|
+
・RWプロローグチャート ポジティブ (PCP)
|
32
|
+
・RWプロローグチャート ネガティブ (PCN)
|
30
33
|
・D66ダイスあり
|
31
34
|
INFO_MESSAGE_TEXT
|
32
35
|
|
@@ -213,6 +216,10 @@ module BCDice
|
|
213
216
|
return dx.execute(@randomizer)
|
214
217
|
end
|
215
218
|
|
219
|
+
if self.class::TABLES.key?(command)
|
220
|
+
return roll_tables(command, self.class::TABLES)
|
221
|
+
end
|
222
|
+
|
216
223
|
if command == 'ET'
|
217
224
|
return roll_emotion_table()
|
218
225
|
end
|
@@ -356,13 +363,23 @@ module BCDice
|
|
356
363
|
]
|
357
364
|
).freeze
|
358
365
|
end
|
359
|
-
end
|
360
366
|
|
367
|
+
def translate_tables(locale)
|
368
|
+
{
|
369
|
+
"HC" => DiceTable::RangeTable.from_i18n("DoubleCross.HC", locale),
|
370
|
+
"PCP" => DiceTable::Table.from_i18n("DoubleCross.PCP", locale),
|
371
|
+
"PCN" => DiceTable::Table.from_i18n("DoubleCross.PCN", locale),
|
372
|
+
}
|
373
|
+
end
|
374
|
+
end
|
361
375
|
# 感情表(ポジティブ)
|
362
376
|
POSITIVE_EMOTION_TABLE = positive_emotion_table(:ja_jp).freeze
|
363
377
|
|
364
378
|
# 感情表(ネガティブ)
|
365
379
|
NEGATIVE_EMOTION_TABLE = negative_emotion_table(:ja_jp).freeze
|
380
|
+
|
381
|
+
TABLES = translate_tables(:ja_jp).freeze
|
382
|
+
register_prefix('\d+DX', TABLES.keys)
|
366
383
|
end
|
367
384
|
end
|
368
385
|
end
|
@@ -24,6 +24,9 @@ module BCDice
|
|
24
24
|
・감정표(ET)
|
25
25
|
포지티브와 네거티브 양쪽을 굴려, 겉으로 나타는 쪽에 O를 붙여 표시합니다.
|
26
26
|
물론 임의로 정하는 부분을 변경해도 괜찮습니다.
|
27
|
+
・해프닝차트(HC)
|
28
|
+
・RW프롤로그차트 포지티브(PCP)
|
29
|
+
・RW프롤로그차트 네거티브(PCN)
|
27
30
|
・D66다이스 있음
|
28
31
|
INFO_MESSAGE_TEXT
|
29
32
|
|
@@ -46,9 +49,10 @@ module BCDice
|
|
46
49
|
|
47
50
|
# 感情表(ポジティブ)
|
48
51
|
POSITIVE_EMOTION_TABLE = positive_emotion_table(:ko_kr).freeze
|
49
|
-
|
50
52
|
# 感情表(ネガティブ)
|
51
53
|
NEGATIVE_EMOTION_TABLE = negative_emotion_table(:ko_kr).freeze
|
54
|
+
TABLES = translate_tables(:ko_kr).freeze
|
55
|
+
register_prefix('\d+DX', TABLES.keys)
|
52
56
|
end
|
53
57
|
end
|
54
58
|
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class FinalFantasyXIV < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = "FinalFantasyXIV"
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = "FINAL FANTSY XIV TTRPG"
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = "ふあいなるふあんたしい14TTRPG"
|
14
|
+
|
15
|
+
HELP_MESSAGE = <<~TEXT
|
16
|
+
・アビリティ判定 nAB+m>=x
|
17
|
+
d20のアビリティ判定を行う。ダイス数が指定された場合、大きい出目1個を採用する。
|
18
|
+
n: ダイス数(省略時 1)
|
19
|
+
m: 修正値(省略可)
|
20
|
+
x: 目標値(省略可)
|
21
|
+
基本効果のみ、ダイレクトヒット、クリティカルを自動判定。
|
22
|
+
例)AB, AB+5, AB+5>=14, 2AB+5>=14
|
23
|
+
・行為判定 nDC+m>=x
|
24
|
+
アビリティ判定と同様。
|
25
|
+
失敗、成功を自動判定。
|
26
|
+
TEXT
|
27
|
+
|
28
|
+
register_prefix('\d*AB', '\d*DC')
|
29
|
+
|
30
|
+
def eval_game_system_specific_command(command)
|
31
|
+
return abirity_roll(command) || action_roll(command)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def abirity_roll(command)
|
37
|
+
parser = Command::Parser.new("AB", round_type: round_type)
|
38
|
+
.enable_prefix_number()
|
39
|
+
.restrict_cmp_op_to(:>=, nil)
|
40
|
+
cmd = parser.parse(command)
|
41
|
+
return nil unless cmd
|
42
|
+
|
43
|
+
times = cmd.prefix_number || 1
|
44
|
+
|
45
|
+
dice_list_full = @randomizer.roll_barabara(times, 20).sort
|
46
|
+
dice_list_full_str = "[#{dice_list_full.join(',')}]" if times > 1
|
47
|
+
|
48
|
+
dice_list = dice_list_full[-1, 1]
|
49
|
+
dice_result = dice_list[0]
|
50
|
+
|
51
|
+
total = dice_result + cmd.modify_number
|
52
|
+
|
53
|
+
result =
|
54
|
+
if dice_result == 20
|
55
|
+
Result.critical(translate("critical"))
|
56
|
+
elsif cmd.cmp_op.nil?
|
57
|
+
Result.new
|
58
|
+
elsif total >= cmd.target_number
|
59
|
+
Result.success(translate("FinalFantasyXIV.directhit"))
|
60
|
+
else
|
61
|
+
Result.failure(translate("FinalFantasyXIV.normalhit"))
|
62
|
+
end
|
63
|
+
|
64
|
+
sequence = [
|
65
|
+
"(#{cmd.to_s(:after_modify_number)})",
|
66
|
+
dice_list_full_str,
|
67
|
+
"#{dice_result}[#{dice_list.join(',')}]#{Format.modifier(cmd.modify_number)}",
|
68
|
+
total,
|
69
|
+
result.text
|
70
|
+
].compact
|
71
|
+
|
72
|
+
result.text = sequence.join(" > ")
|
73
|
+
result
|
74
|
+
end
|
75
|
+
|
76
|
+
def action_roll(command)
|
77
|
+
parser = Command::Parser.new("DC", round_type: round_type)
|
78
|
+
.enable_prefix_number()
|
79
|
+
.restrict_cmp_op_to(:>=, nil)
|
80
|
+
cmd = parser.parse(command)
|
81
|
+
return nil unless cmd
|
82
|
+
|
83
|
+
times = cmd.prefix_number || 1
|
84
|
+
|
85
|
+
dice_list_full = @randomizer.roll_barabara(times, 20).sort
|
86
|
+
dice_list_full_str = "[#{dice_list_full.join(',')}]" if times > 1
|
87
|
+
|
88
|
+
dice_list = dice_list_full[-1, 1]
|
89
|
+
dice_result = dice_list[0]
|
90
|
+
|
91
|
+
total = dice_result + cmd.modify_number
|
92
|
+
|
93
|
+
result =
|
94
|
+
if cmd.cmp_op.nil?
|
95
|
+
Result.new
|
96
|
+
elsif total >= cmd.target_number
|
97
|
+
Result.success(translate("success"))
|
98
|
+
else
|
99
|
+
Result.failure(translate("failure"))
|
100
|
+
end
|
101
|
+
|
102
|
+
sequence = [
|
103
|
+
"(#{cmd.to_s(:after_modify_number)})",
|
104
|
+
dice_list_full_str,
|
105
|
+
"#{dice_result}[#{dice_list.join(',')}]#{Format.modifier(cmd.modify_number)}",
|
106
|
+
total,
|
107
|
+
result.text
|
108
|
+
].compact
|
109
|
+
|
110
|
+
result.text = sequence.join(" > ")
|
111
|
+
result
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bcdice/game_system/FinalFantasyXIV"
|
4
|
+
|
5
|
+
module BCDice
|
6
|
+
module GameSystem
|
7
|
+
class FinalFantasyXIV_English < FinalFantasyXIV
|
8
|
+
# ゲームシステムの識別子
|
9
|
+
ID = "FinalFantasyXIV:English"
|
10
|
+
|
11
|
+
# ゲームシステム名
|
12
|
+
NAME = "FINAL FANTSY XIV TTRPG(English)"
|
13
|
+
|
14
|
+
# ゲームシステム名の読みがな
|
15
|
+
SORT_KEY = "国際化:English:FINAL FANTASY XIV TTRPG"
|
16
|
+
|
17
|
+
HELP_MESSAGE = <<~TEXT
|
18
|
+
Ability Checks nAB+m>=CR
|
19
|
+
Perform a d20 ability check. If a die count is specified, the highest roll is adopted.
|
20
|
+
n: die count(optional)
|
21
|
+
m: modifiy number(optional)
|
22
|
+
CR: Challenge Ratting(optional)
|
23
|
+
Base Effect only, Direct hit and Critical are automatically evaluated.
|
24
|
+
Example: AB, AB+5, AB+5>=14, 2AB+5>=14
|
25
|
+
Making checks nDC+m>=CR
|
26
|
+
Same as ability check.
|
27
|
+
Success and Failure ar automatically evaluated.
|
28
|
+
TEXT
|
29
|
+
|
30
|
+
register_prefix_from_super_class()
|
31
|
+
|
32
|
+
def initialize(command)
|
33
|
+
super(command)
|
34
|
+
|
35
|
+
@locale = :en_us
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -14,43 +14,55 @@ module BCDice
|
|
14
14
|
|
15
15
|
# ダイスボットの使い方
|
16
16
|
HELP_MESSAGE = <<~INFO_MESSAGETEXT
|
17
|
-
■判定 x+bFF<=t x:ヒート(省略時は3) b:判定修正 t
|
17
|
+
■判定 x+bFF<=a[,t][&d] x:ヒート(省略時は3) b:判定修正 a:能力値 t:難易度(省略可) d:基本ダメージ(省略可)
|
18
|
+
|
19
|
+
例)FF<=2: 能力値2で判定し、その結果(成功数,1の目の数,6の目の数,バースト)を表示。
|
20
|
+
6FF<=3: ヒート6,能力値3で戦闘判定し、その結果( 〃 )を表示。
|
21
|
+
8+2FF<=3: ヒート8,判定修正+2,能力値3で戦闘判定し、その結果( 〃 )を表示。
|
22
|
+
FF<=2,1: 能力値2,難易度1で判定し、その結果(成功数,1の目の数,6の目の数,成功・失敗,バースト)を表示。
|
23
|
+
6FF<=3,2&1:ヒート6,能力値3,難易度2,基本ダメージ1で戦闘判定し、その結果(成功数,1の目の数,6の目の数,ダメージ,バースト)を表示。
|
24
|
+
|
25
|
+
■ジャンク表 JKT
|
18
26
|
|
19
|
-
例)FF<=2: 能力値2で判定し、その結果(成功数,1の目の数,バースト)を表示。
|
20
|
-
6FF<=3: ヒート6,能力値3で戦闘判定し、その結果( 〃 )を表示。
|
21
|
-
8+2FF<=3:ヒート8,判定修正+2,能力値3で戦闘判定し、その結果( 〃 )を表示。
|
22
27
|
INFO_MESSAGETEXT
|
23
28
|
|
24
|
-
|
29
|
+
def initialize(command)
|
30
|
+
super(command)
|
31
|
+
|
32
|
+
@sort_barabara_dice = true # バラバラロール(Bコマンド)でソート有
|
33
|
+
end
|
25
34
|
|
26
35
|
def eval_game_system_specific_command(command)
|
27
|
-
resolute_action(command)
|
36
|
+
resolute_action(command) ||
|
37
|
+
roll_tables(command, TABLES)
|
28
38
|
end
|
29
39
|
|
30
40
|
private
|
31
41
|
|
32
|
-
#
|
42
|
+
# 戦闘判定
|
33
43
|
# @param [String] command
|
34
44
|
# @return [Result]
|
35
45
|
def resolute_action(command)
|
36
|
-
m = /^(\d*)([+\d]+)*FF<=(\d)
|
46
|
+
m = /^(\d*)([+\d]+)*FF<=(\d)(,(\d))?(&(\d))?$/.match(command)
|
37
47
|
return nil unless m
|
38
48
|
|
39
49
|
heat_level = m[1].to_i
|
40
50
|
heat_level = 3 if heat_level == 0
|
41
51
|
modify = Arithmetic.eval("0#{m[2]}", @round_type)
|
42
52
|
status_no = m[3].to_i
|
53
|
+
target_no = m[5].to_i
|
54
|
+
damage_no = m[7].to_i
|
43
55
|
|
44
56
|
dice_array = []
|
45
57
|
|
46
|
-
dice = @randomizer.roll_barabara(heat_level, 6)
|
58
|
+
dice = @randomizer.roll_barabara(heat_level, 6).sort
|
47
59
|
ones = dice.count(1)
|
48
60
|
sixs = dice.count(6)
|
49
61
|
success_num = dice.count { |val| val <= status_no }
|
50
62
|
dice_array.push(dice.join(","))
|
51
63
|
|
52
64
|
if modify > 0
|
53
|
-
dice = @randomizer.roll_barabara(modify, 6)
|
65
|
+
dice = @randomizer.roll_barabara(modify, 6).sort
|
54
66
|
ones += dice.count(1)
|
55
67
|
success_num += dice.count { |val| val <= status_no }
|
56
68
|
dice_array.push(dice.join(","))
|
@@ -58,7 +70,7 @@ module BCDice
|
|
58
70
|
ones_total = ones
|
59
71
|
|
60
72
|
while ones > 0
|
61
|
-
dice = @randomizer.roll_barabara(ones, 6)
|
73
|
+
dice = @randomizer.roll_barabara(ones, 6).sort
|
62
74
|
ones = dice.count(1)
|
63
75
|
ones_total += ones
|
64
76
|
success_num += dice.count { |val| val <= status_no }
|
@@ -66,6 +78,7 @@ module BCDice
|
|
66
78
|
end
|
67
79
|
|
68
80
|
return Result.new.tap do |result|
|
81
|
+
command_out = "(#{heat_level}#{Format.modifier(modify)}FF<=#{status_no}"
|
69
82
|
if sixs >= 2
|
70
83
|
result.fumble = true
|
71
84
|
result.condition = false
|
@@ -76,10 +89,27 @@ module BCDice
|
|
76
89
|
result_txt = []
|
77
90
|
result_txt.push("成功度(#{success_num})")
|
78
91
|
result_txt.push("1の目(#{ones_total})") if ones_total > 0
|
92
|
+
result_txt.push("6の目(#{sixs})") if sixs > 0
|
93
|
+
if target_no > 0
|
94
|
+
command_out += ",#{target_no}"
|
95
|
+
if success_num >= target_no
|
96
|
+
result_txt.push("成功")
|
97
|
+
result.condition = true
|
98
|
+
else
|
99
|
+
result_txt.push("失敗")
|
100
|
+
result.condition = false
|
101
|
+
end
|
102
|
+
end
|
103
|
+
if damage_no > 0
|
104
|
+
command_out += "&#{damage_no}"
|
105
|
+
damage = damage_no + ones_total
|
106
|
+
result_txt.push("ダメージ(#{damage})")
|
107
|
+
end
|
79
108
|
result_txt.push("バースト") if result.fumble?
|
109
|
+
command_out += ")"
|
80
110
|
|
81
111
|
sequence = [
|
82
|
-
|
112
|
+
command_out,
|
83
113
|
dice_array.join('+').to_s,
|
84
114
|
result_txt.join(',').to_s,
|
85
115
|
].compact
|
@@ -87,6 +117,27 @@ module BCDice
|
|
87
117
|
result.text = sequence.join(" > ")
|
88
118
|
end
|
89
119
|
end
|
120
|
+
|
121
|
+
TABLES = {
|
122
|
+
"JKT" => DiceTable::Table.new(
|
123
|
+
"ジャンク表",
|
124
|
+
"2D6",
|
125
|
+
[
|
126
|
+
"命欲しさに重要な情報を吐いた。セッションのボスに関する情報を得る。",
|
127
|
+
"ユニットの機密文書だ。この戦闘で獲得したユニットがあるなら、そのうち好きなユニット1つを経験点を消費せずに常備化できる。",
|
128
|
+
"違法アップロードされた個人情報のデータだ。このセッション中、エネミーと出会ったとき、詳細なデータが即座に公開される(GMはできるだけ拒否しないこと)。",
|
129
|
+
"鍵を持っていた。近くに施錠された扉や箱などがあるなら、そのうちの1つを開けることができる。",
|
130
|
+
"何も見つけられなかったが、敵を倒したことによって自信を得た。このセッション中のみ、1回だけ自身の判定で出た6の目を1つ消すことができる。",
|
131
|
+
"自爆装置だ。何も残らなかった。",
|
132
|
+
"使い捨ての武器を手に入れた。このセッション中のみ、1回だけ「近接攻撃5『本能』」の攻撃アクションを行える。",
|
133
|
+
"敵が改心した。倒されたキャラクターがまだ生きているなら、そのうちの一人が君たちに協力を申し込んでくる(このセッション限定の恩恵「人脈:協力者」を得る)。",
|
134
|
+
"金を手に入れた。キャラクター全員、アフターフェイズに配布される経験点が1増加する。",
|
135
|
+
"強力なユニットを隠し持っていた。好きな組織専用ユニットを1つ獲得する。",
|
136
|
+
"大金を手に入れた。キャラクター全員、アフターフェイズに配布される経験点が3増加する。",
|
137
|
+
]
|
138
|
+
),
|
139
|
+
}.freeze
|
140
|
+
register_prefix('([+\d]+)*FF', TABLES.keys)
|
90
141
|
end
|
91
142
|
end
|
92
143
|
end
|
@@ -16,20 +16,24 @@ module BCDice
|
|
16
16
|
HELP_MESSAGE = <<~MESSAGETEXT
|
17
17
|
・判定用コマンド
|
18
18
|
探偵用:【DT】…10面ダイスを2つ振って判定します。『有利』なら【3DT】、『不利』なら【1DT】を使います。
|
19
|
+
【DT6】…6面ダイスを2つ振って判定します。『有利』なら【3DT6】、『不利』なら【1DT6】を使います。
|
19
20
|
助手用:【AS】…6面ダイスを2つ振って判定します。『有利』なら【3AS】、『不利』なら【1AS】を使います。
|
21
|
+
【AS10】…10面ダイスを2つ振って判定します。『有利』なら【3AS10】、『不利』なら【1AS10】を使います。
|
20
22
|
・各種表
|
21
23
|
【セッション時】
|
22
24
|
異常な癖決定表 SHRD/新・異常な癖決定表 SHND
|
23
25
|
普通の?・異常な癖決定表 SHAD/ケイジ異常な癖決定表 SHKD
|
26
|
+
超探偵向け異常な癖表 SHLD
|
24
27
|
口から出る表 SHFM/強引な捜査表 SHBT/すっとぼけ表 SHPI
|
25
|
-
事件に夢中表 SHEG/パートナーと……表
|
28
|
+
事件に夢中表 SHEG/パートナーと……表 SHWP/何かしている表 SHDS
|
26
29
|
奇想天外表 SHFT/急なひらめき表 SHIN/喜怒哀楽表 SHEM
|
27
30
|
人間エミュレート表 SHHE/人間エミュレート失敗表 SHHF/パートナーへのいたずら表 SHMP
|
28
31
|
思わせぶり表 SHSB/もどかしい表 SHFR/突然どうした表 SHIS
|
29
32
|
わがままを言う表 SHSE/普通に見える表 SHLM/嫉妬に狂う表 SHJS
|
30
33
|
傲慢な態度表 SHAR/比較的軽度なもの表 SHRM/ノータイム表 SHNT
|
31
34
|
捜査のやり方表 SHIM/貴族表 SHNO/説明しない表 SHNE
|
32
|
-
刑事としての癖表 SHHD
|
35
|
+
刑事としての癖表 SHHD/名誉ある探偵表 SHGD/超すごい表 SHSA
|
36
|
+
超事件に夢中表 SHEP/超パートナーと……表 SHXP
|
33
37
|
イベント表
|
34
38
|
現場にて EVS/なぜ? EVW/協力者と共に EVN
|
35
39
|
向こうから EVC/VS容疑者 EVV
|
@@ -38,7 +42,8 @@ module BCDice
|
|
38
42
|
思わぬヒント EVH/実験をしてみよう EVX/ゲスト捜査 EVG
|
39
43
|
ケイジ聞き込み捜査 EVQ/ケイジ大規模捜査 EVM/こっそり情報の受け渡し EVP
|
40
44
|
同僚たちと一緒に捜査する EVO/頻染みの店シチュエーション EVF/ハードBデカアクション EVB
|
41
|
-
探偵を大人しくさせる捜査 EVL/伝統的捜査
|
45
|
+
探偵を大人しくさせる捜査 EVL/伝統的捜査 EVZ/原始的捜査 EVR
|
46
|
+
超探偵調査 EV6S/神速捜査 EV6F
|
42
47
|
感情表
|
43
48
|
感情表A/B FLT66・FLT10
|
44
49
|
気に入っているところ FLTL66 /気に入らないところ FLTD66
|
@@ -64,13 +69,13 @@ module BCDice
|
|
64
69
|
@d66_sort_type = D66SortType::ASC
|
65
70
|
end
|
66
71
|
|
67
|
-
register_prefix('(\d+)?DT', '(\d+)?AS')
|
72
|
+
register_prefix('(\d+)?DT(?:6)?', '(\d+)?AS(?:10)?')
|
68
73
|
|
69
74
|
def eval_game_system_specific_command(command)
|
70
|
-
if (m = /^(\d+)?DT
|
75
|
+
if (m = /^(\d+)?DT(?:6)?$/i.match(command))
|
71
76
|
count = m[1]&.to_i || 2
|
72
77
|
return roll_dt(command, count)
|
73
|
-
elsif (m = /^(\d+)?AS
|
78
|
+
elsif (m = /^(\d+)?AS(?:10)?$/i.match(command))
|
74
79
|
count = m[1]&.to_i || 2
|
75
80
|
return roll_as(command, count)
|
76
81
|
end
|
@@ -88,7 +93,12 @@ module BCDice
|
|
88
93
|
|
89
94
|
# 探偵用判定コマンド DT
|
90
95
|
def roll_dt(command, count)
|
91
|
-
dice_list =
|
96
|
+
dice_list =
|
97
|
+
if command =~ /^(\d*)DT6$/i
|
98
|
+
@randomizer.roll_barabara(count, 6)
|
99
|
+
else
|
100
|
+
@randomizer.roll_barabara(count, 10)
|
101
|
+
end
|
92
102
|
max = dice_list.max
|
93
103
|
|
94
104
|
result =
|
@@ -108,7 +118,12 @@ module BCDice
|
|
108
118
|
|
109
119
|
# 助手用判定コマンド AS
|
110
120
|
def roll_as(command, count)
|
111
|
-
dice_list =
|
121
|
+
dice_list =
|
122
|
+
if command =~ /^(\d*)AS10$/i
|
123
|
+
@randomizer.roll_barabara(count, 10)
|
124
|
+
else
|
125
|
+
@randomizer.roll_barabara(count, 6)
|
126
|
+
end
|
112
127
|
max = dice_list.max
|
113
128
|
|
114
129
|
result =
|
@@ -131,10 +146,70 @@ module BCDice
|
|
131
146
|
|
132
147
|
def translate_tables(locale)
|
133
148
|
{
|
134
|
-
"SHRD" => DiceTable::
|
135
|
-
|
136
|
-
|
137
|
-
|
149
|
+
"SHRD" => DiceTable::ChainTable.new(
|
150
|
+
I18n.translate("FutariSousa.table.SHRD.name", locale: locale),
|
151
|
+
"1D10",
|
152
|
+
[
|
153
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHFM", locale),
|
154
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHBT", locale),
|
155
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHPI", locale),
|
156
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHEG", locale),
|
157
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHWP", locale),
|
158
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHDS", locale),
|
159
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHIN", locale),
|
160
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHEM", locale),
|
161
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHFT", locale),
|
162
|
+
I18n.translate("FutariSousa.table.SHRD.items", locale: locale)[9],
|
163
|
+
]
|
164
|
+
),
|
165
|
+
"SHND" => DiceTable::ChainTable.new(
|
166
|
+
I18n.translate("FutariSousa.table.SHND.name", locale: locale),
|
167
|
+
"1D6",
|
168
|
+
[
|
169
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHHE", locale),
|
170
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHHF", locale),
|
171
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHMP", locale),
|
172
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHSB", locale),
|
173
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHFR", locale),
|
174
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHIS", locale),
|
175
|
+
]
|
176
|
+
),
|
177
|
+
"SHAD" => DiceTable::ChainTable.new(
|
178
|
+
I18n.translate("FutariSousa.table.SHAD.name", locale: locale),
|
179
|
+
"1D6",
|
180
|
+
[
|
181
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHSE", locale),
|
182
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHLM", locale),
|
183
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHJS", locale),
|
184
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHAR", locale),
|
185
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHRM", locale),
|
186
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHNT", locale),
|
187
|
+
]
|
188
|
+
),
|
189
|
+
"SHKD" => DiceTable::ChainTable.new(
|
190
|
+
I18n.translate("FutariSousa.table.SHKD.name", locale: locale),
|
191
|
+
"1D6",
|
192
|
+
[
|
193
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHIM", locale),
|
194
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHNO", locale),
|
195
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHNE", locale),
|
196
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHHD", locale),
|
197
|
+
I18n.translate("FutariSousa.table.SHKD.items", locale: locale)[4],
|
198
|
+
I18n.translate("FutariSousa.table.SHKD.items", locale: locale)[5],
|
199
|
+
]
|
200
|
+
),
|
201
|
+
"SHLD" => DiceTable::ChainTable.new(
|
202
|
+
I18n.translate("FutariSousa.table.SHLD.name", locale: locale),
|
203
|
+
"1D6",
|
204
|
+
[
|
205
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHGD", locale),
|
206
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHSA", locale),
|
207
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHEP", locale),
|
208
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHXP", locale),
|
209
|
+
I18n.translate("FutariSousa.table.SHLD.items", locale: locale)[4],
|
210
|
+
I18n.translate("FutariSousa.table.SHLD.items", locale: locale)[5],
|
211
|
+
]
|
212
|
+
),
|
138
213
|
"SHFM" => DiceTable::Table.from_i18n("FutariSousa.table.SHFM", locale),
|
139
214
|
"SHBT" => DiceTable::Table.from_i18n("FutariSousa.table.SHBT", locale),
|
140
215
|
"SHPI" => DiceTable::Table.from_i18n("FutariSousa.table.SHPI", locale),
|
@@ -160,6 +235,10 @@ module BCDice
|
|
160
235
|
"SHNO" => DiceTable::Table.from_i18n("FutariSousa.table.SHNO", locale),
|
161
236
|
"SHNE" => DiceTable::Table.from_i18n("FutariSousa.table.SHNE", locale),
|
162
237
|
"SHHD" => DiceTable::Table.from_i18n("FutariSousa.table.SHHD", locale),
|
238
|
+
"SHGD" => DiceTable::Table.from_i18n("FutariSousa.table.SHGD", locale),
|
239
|
+
"SHSA" => DiceTable::Table.from_i18n("FutariSousa.table.SHSA", locale),
|
240
|
+
"SHEP" => DiceTable::Table.from_i18n("FutariSousa.table.SHEP", locale),
|
241
|
+
"SHXP" => DiceTable::Table.from_i18n("FutariSousa.table.SHXP", locale),
|
163
242
|
"EVS" => DiceTable::Table.from_i18n("FutariSousa.table.EVS", locale),
|
164
243
|
"EVW" => DiceTable::Table.from_i18n("FutariSousa.table.EVW", locale),
|
165
244
|
"EVN" => DiceTable::Table.from_i18n("FutariSousa.table.EVN", locale),
|
@@ -181,6 +260,8 @@ module BCDice
|
|
181
260
|
"EVL" => DiceTable::Table.from_i18n("FutariSousa.table.EVL", locale),
|
182
261
|
"EVZ" => DiceTable::Table.from_i18n("FutariSousa.table.EVZ", locale),
|
183
262
|
"EVR" => DiceTable::Table.from_i18n("FutariSousa.table.EVR", locale),
|
263
|
+
"EV6S" => DiceTable::Table.from_i18n("FutariSousa.table.EV6S", locale),
|
264
|
+
"EV6F" => DiceTable::Table.from_i18n("FutariSousa.table.EV6F", locale),
|
184
265
|
"OBT" => DiceTable::D66Table.from_i18n("FutariSousa.table.OBT", locale),
|
185
266
|
"ACT" => DiceTable::Table.from_i18n("FutariSousa.table.ACT", locale),
|
186
267
|
"EWT" => DiceTable::Table.from_i18n("FutariSousa.table.EWT", locale),
|
@@ -206,7 +287,18 @@ module BCDice
|
|
206
287
|
"FLT10" => DiceTable::Table.from_i18n("FutariSousa.table.FLT10", locale),
|
207
288
|
"FLTL66" => DiceTable::D66Table.from_i18n("FutariSousa.table.FLTL66", locale),
|
208
289
|
"FLTD66" => DiceTable::D66Table.from_i18n("FutariSousa.table.FLTD66", locale),
|
209
|
-
"FLTRA" => DiceTable::
|
290
|
+
"FLTRA" => DiceTable::ChainTable.new(
|
291
|
+
I18n.translate("FutariSousa.table.FLTRA.name", locale: locale),
|
292
|
+
"1D6",
|
293
|
+
[
|
294
|
+
DiceTable::D66Table.from_i18n("FutariSousa.table.FLTF66", locale),
|
295
|
+
DiceTable::D66Table.from_i18n("FutariSousa.table.FLTB66", locale),
|
296
|
+
DiceTable::D66Table.from_i18n("FutariSousa.table.FLTH66", locale),
|
297
|
+
DiceTable::D66Table.from_i18n("FutariSousa.table.FLTS66", locale),
|
298
|
+
DiceTable::D66Table.from_i18n("FutariSousa.table.FLTA66", locale),
|
299
|
+
DiceTable::D66Table.from_i18n("FutariSousa.table.FLTW66", locale),
|
300
|
+
]
|
301
|
+
),
|
210
302
|
"FLTF66" => DiceTable::D66Table.from_i18n("FutariSousa.table.FLTF66", locale),
|
211
303
|
"FLTB66" => DiceTable::D66Table.from_i18n("FutariSousa.table.FLTB66", locale),
|
212
304
|
"FLTH66" => DiceTable::D66Table.from_i18n("FutariSousa.table.FLTH66", locale),
|