bcdice 3.14.0 → 3.16.1
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 +88 -0
- data/i18n/Cthulhu/zh_hant.yml +1 -1
- 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/Emoklore/ko_kr.yml +7 -0
- data/i18n/FutariSousa/ja_jp.yml +138 -138
- data/i18n/KillDeathBusiness/ja_jp.yml +198 -0
- data/i18n/MagicaLogia/ko_kr.yml +2 -2
- data/i18n/MonotoneMuseum/ko_kr.yml +227 -0
- data/i18n/SkynautsBouken/ja_jp.yml +28 -28
- data/i18n/SkynautsBouken/ko_kr.yml +114 -0
- data/i18n/StratoShout/ko_kr.yml +102 -102
- data/i18n/zh_hant.yml +5 -0
- data/lib/bcdice/game_system/Aionia.rb +131 -0
- data/lib/bcdice/game_system/Arianrhod_Korean.rb +2 -0
- data/lib/bcdice/game_system/ArknightsFan.rb +245 -87
- data/lib/bcdice/game_system/BlackJacket_Korean.rb +244 -0
- data/lib/bcdice/game_system/CharonSanctions.rb +112 -0
- 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/CyberpunkRed.rb +1 -2
- data/lib/bcdice/game_system/CyberpunkRed_Korean.rb +66 -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/EdgeFlippers.rb +315 -0
- data/lib/bcdice/game_system/Emoklore_Korean.rb +42 -0
- data/lib/bcdice/game_system/FullFace.rb +25 -3
- data/lib/bcdice/game_system/FutariSousa.rb +17 -5
- 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/JuinKansen_Korean.rb +251 -0
- data/lib/bcdice/game_system/KillDeathBusiness.rb +155 -3
- data/lib/bcdice/game_system/KimitoYell.rb +568 -0
- data/lib/bcdice/game_system/Magius.rb +125 -0
- data/lib/bcdice/game_system/Magius_3rdNewTokyoCity.rb +62 -0
- data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +122 -2
- data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +4 -4
- data/lib/bcdice/game_system/NSSQ.rb +17 -9
- data/lib/bcdice/game_system/NervWhitePaper.rb +129 -0
- data/lib/bcdice/game_system/Revulture_Korean.rb +125 -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/SkynautsBouken.rb +4 -4
- 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 +4 -0
- data/lib/bcdice/game_system/SwordWorld2_5.rb +3 -2
- data/lib/bcdice/game_system/TensaiGunshiNiNaro.rb +51 -17
- data/lib/bcdice/game_system/TheIndieHack.rb +82 -0
- data/lib/bcdice/game_system/TorgEternity.rb +35 -6
- data/lib/bcdice/game_system/Ventangle_Korean.rb +130 -0
- 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/YuMyoKishi.rb +141 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/atoz_table.rb +1184 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/randr236_table.rb +254 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/table.rb +54 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/tk_table.rb +755 -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 +20 -0
- data/lib/bcdice/version.rb +1 -1
- metadata +31 -6
@@ -68,8 +68,7 @@ module BCDice
|
|
68
68
|
|
69
69
|
def eval_game_system_specific_command(command)
|
70
70
|
debug("eval_game_system_specific_command begin string", command)
|
71
|
-
|
72
|
-
cp_roll_result(command) || roll_tables(command, TABLES)
|
71
|
+
cp_roll_result(command) || roll_tables(command, self.class::TABLES)
|
73
72
|
end
|
74
73
|
|
75
74
|
private_constant :CP_RE
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bcdice/game_system/CyberpunkRed"
|
4
|
+
|
5
|
+
module BCDice
|
6
|
+
module GameSystem
|
7
|
+
class CyberpunkRed_Korean < CyberpunkRed
|
8
|
+
# ゲームシステムの識別子
|
9
|
+
ID = 'CyberpunkRed:Korean'
|
10
|
+
|
11
|
+
# ゲームシステム名
|
12
|
+
NAME = '사이버펑크 RED'
|
13
|
+
|
14
|
+
# ゲームシステム名の読みがな
|
15
|
+
SORT_KEY = '国際化:Korean:사이버펑크'
|
16
|
+
|
17
|
+
# ダイスボットの使い方
|
18
|
+
HELP_MESSAGE = <<~HELP
|
19
|
+
・판정 CPx+y>z
|
20
|
+
(x=능력치와 기능치의 합(base)、y=수정치(mod)、z=난이도(DV) or 방어자의 값 x、y、z는 생략 가능)
|
21
|
+
예시)CP12, CP10+2>12, CP7-1, CP8+4, CP7>12, CP, CP>9
|
22
|
+
|
23
|
+
각종 표
|
24
|
+
・치명적인 손상표
|
25
|
+
FFD :신체에 치명적 손상
|
26
|
+
HFD :머리에 치명적 손상
|
27
|
+
・조우 표
|
28
|
+
NCDT :나이트시티(낮)
|
29
|
+
NCMT :나이트 시티(심야)
|
30
|
+
・스크림 시트(신문)
|
31
|
+
SCSR :스크림 시트(랜덤)
|
32
|
+
SCST :스크림 시트 카테고리
|
33
|
+
SCSA :헤드 라인A
|
34
|
+
SCSB :헤드 라인B
|
35
|
+
SCSC :헤드 라인C
|
36
|
+
・가장 가까운 자판기
|
37
|
+
VMCR :가장 가까운 자판기표
|
38
|
+
VMCT :자판기 유형 결정표
|
39
|
+
VMCE :식품
|
40
|
+
VMCF :패션
|
41
|
+
VMCS :이상한 물건
|
42
|
+
・보데가(상점) 손님
|
43
|
+
STORE :상점 손님과 점원
|
44
|
+
STOREA :점주 또는 계산원
|
45
|
+
STOREB :별난 손님 1
|
46
|
+
STOREC :별난 손님 2
|
47
|
+
・야시장
|
48
|
+
NMCT :상품의 분야
|
49
|
+
NMCFO :음식과 약물
|
50
|
+
NMCME :개인용 전자기기
|
51
|
+
NMCWE :무기와 갑옷
|
52
|
+
NMCCY :사이버웨어
|
53
|
+
NMCFA :의류 및 패션웨어
|
54
|
+
NMCSU :생존 장비(servival gear)
|
55
|
+
HELP
|
56
|
+
|
57
|
+
def initialize(command)
|
58
|
+
super(command)
|
59
|
+
@locale = :ko_kr
|
60
|
+
end
|
61
|
+
|
62
|
+
register_prefix_from_super_class()
|
63
|
+
TABLES = translate_tables(:ko_kr)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -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,315 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class EdgeFlippers < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'EdgeFlippers'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = 'EDGE FLIPPERS'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'えつしふりつはあす'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<~MESSAGETEXT
|
17
|
+
■ 汎用コマンド
|
18
|
+
xHD+ySD=t,t,t
|
19
|
+
人間ダイスと怪異ダイスをロールして、特定の出目があるか判定します。
|
20
|
+
x: 人間ダイスの数
|
21
|
+
y: 怪異ダイスの数
|
22
|
+
t: 必要な出目(省略化)
|
23
|
+
|
24
|
+
■ 拮抗判定
|
25
|
+
xHD+ySD=Xi
|
26
|
+
人間ダイスと怪異ダイスをロールして、ゾロ目が必要数あるか判定します。
|
27
|
+
i: 必要なゾロ目の個数
|
28
|
+
|
29
|
+
■ 全力判定
|
30
|
+
xHFD>=t
|
31
|
+
xSFD>=t
|
32
|
+
x: ダイスの数
|
33
|
+
t: 目標値(省略時20)
|
34
|
+
|
35
|
+
■ 存在判定
|
36
|
+
EXIST -> 2HD+2SD
|
37
|
+
|
38
|
+
■ 都市判定
|
39
|
+
xHCD -> xHD=1,2,3,4
|
40
|
+
|
41
|
+
■ 超常判定
|
42
|
+
nSPD -> nSD=7,8,9,10
|
43
|
+
|
44
|
+
■ 術式判定
|
45
|
+
TD
|
46
|
+
|
47
|
+
■ ランダム表
|
48
|
+
BAET:【人間】にも【怪異】にも影響のある後遺症
|
49
|
+
HAET:【人間寄り】の時に影響のある後遺症
|
50
|
+
SAET:【怪異寄り】の時に影響のある後遺症
|
51
|
+
MESSAGETEXT
|
52
|
+
|
53
|
+
def eval_game_system_specific_command(command)
|
54
|
+
roll_hs(command) || roll_alias(command) || roll_fullpower(command) || roll_technical(command) || roll_tables(command, TABLES)
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
class HSCommand
|
60
|
+
class << self
|
61
|
+
def parse(command)
|
62
|
+
m = /^(?:(\d+)HD(?:\+(\d+)SD)?|(\d+)SD(?:\+(\d+)HD)?)(?:=(?:([\d,]+)|X(\d+)))?$/.match(command)
|
63
|
+
return nil unless m
|
64
|
+
|
65
|
+
h = m[1]&.to_i || m[4]&.to_i || 0
|
66
|
+
s = m[2]&.to_i || m[3]&.to_i || 0
|
67
|
+
targets = parse_target(m[5])
|
68
|
+
same_value = m[6]&.to_i
|
69
|
+
|
70
|
+
if h == 0 && s == 0
|
71
|
+
return nil
|
72
|
+
end
|
73
|
+
|
74
|
+
return HSCommand.new(h, s, targets, same_value)
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
def parse_target(str)
|
80
|
+
return nil unless str
|
81
|
+
|
82
|
+
str.split(",").filter { |s| !s.empty? }.map(&:to_i).sort
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def initialize(h, s, targets, same_value)
|
87
|
+
@h = h
|
88
|
+
@s = s
|
89
|
+
@targets = targets
|
90
|
+
@same_value = same_value
|
91
|
+
end
|
92
|
+
|
93
|
+
def roll(randomizer)
|
94
|
+
@hv = randomizer.roll_barabara(@h, 6).sort
|
95
|
+
@sv = randomizer.roll_barabara(@s, 10).sort
|
96
|
+
values = (@hv + @sv).sort
|
97
|
+
|
98
|
+
@is_success = if @targets
|
99
|
+
subset?(values, @targets)
|
100
|
+
elsif @same_value
|
101
|
+
values.group_by(&:itself).any? { |_k, v| v.length >= @same_value }
|
102
|
+
end
|
103
|
+
|
104
|
+
Result.new.tap do |r|
|
105
|
+
r.text = [expr(), result_values(), result_label].compact.join(" > ")
|
106
|
+
unless @is_success.nil?
|
107
|
+
r.condition = @is_success
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
private
|
113
|
+
|
114
|
+
def subset?(superset, subset)
|
115
|
+
return true if subset.empty?
|
116
|
+
|
117
|
+
i = 0
|
118
|
+
superset.each do |a|
|
119
|
+
b = subset[i]
|
120
|
+
if b == a
|
121
|
+
i += 1
|
122
|
+
if i == subset.length
|
123
|
+
return true
|
124
|
+
end
|
125
|
+
elsif a > b
|
126
|
+
return false
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
return false
|
131
|
+
end
|
132
|
+
|
133
|
+
def expr
|
134
|
+
"(#{expr_body()}#{expr_cond()})"
|
135
|
+
end
|
136
|
+
|
137
|
+
def expr_body
|
138
|
+
if @h != 0 && @s != 0
|
139
|
+
"#{@h}HD+#{@s}SD"
|
140
|
+
elsif @h != 0
|
141
|
+
"#{@h}HD"
|
142
|
+
else
|
143
|
+
"#{@s}SD"
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
def expr_cond
|
148
|
+
if @targets
|
149
|
+
"=#{@targets.join(',')}"
|
150
|
+
elsif @same_value
|
151
|
+
"=X#{@same_value}"
|
152
|
+
else
|
153
|
+
""
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
def result_values
|
158
|
+
d6 = !@hv.empty? ? "D6[#{@hv.join(',')}]" : nil
|
159
|
+
d10 = !@sv.empty? ? "D10[#{@sv.join(',')}]" : nil
|
160
|
+
[d6, d10].compact.join(" ")
|
161
|
+
end
|
162
|
+
|
163
|
+
def result_label
|
164
|
+
case @is_success
|
165
|
+
when true
|
166
|
+
"成功"
|
167
|
+
when false
|
168
|
+
"失敗"
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
def roll_hs(command)
|
174
|
+
cmd = HSCommand.parse(command)
|
175
|
+
return nil unless cmd
|
176
|
+
|
177
|
+
cmd.roll(@randomizer)
|
178
|
+
end
|
179
|
+
|
180
|
+
def parse_target(str)
|
181
|
+
return nil unless str
|
182
|
+
|
183
|
+
str.split(",").filter { |s| !s.empty? }.map(&:to_i).sort
|
184
|
+
end
|
185
|
+
|
186
|
+
def subset?(superset, subset)
|
187
|
+
return true if subset.empty?
|
188
|
+
|
189
|
+
i = 0
|
190
|
+
superset.each do |a|
|
191
|
+
b = subset[i]
|
192
|
+
if b == a
|
193
|
+
i += 1
|
194
|
+
if i == subset.length
|
195
|
+
return true
|
196
|
+
end
|
197
|
+
elsif a > b
|
198
|
+
return false
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
return false
|
203
|
+
end
|
204
|
+
|
205
|
+
def roll_alias(command)
|
206
|
+
case command
|
207
|
+
when "EXIST"
|
208
|
+
return roll_hs("2HD+2SD")
|
209
|
+
end
|
210
|
+
|
211
|
+
m = /^(\d+)(HCD|SPD)$/.match(command)
|
212
|
+
return nil unless m
|
213
|
+
|
214
|
+
n = m[1].to_i
|
215
|
+
case m[2]
|
216
|
+
when "HCD"
|
217
|
+
roll_hs("#{n}HD=1,2,3,4")
|
218
|
+
when "SPD"
|
219
|
+
roll_hs("#{n}SD=7,8,9,10")
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
def roll_fullpower(command)
|
224
|
+
parser = Command::Parser.new(/[HS]FD/, round_type: @round_type)
|
225
|
+
.disable_modifier.enable_prefix_number.restrict_cmp_op_to(nil, :>=)
|
226
|
+
parsed = parser.parse(command)
|
227
|
+
return nil unless parsed
|
228
|
+
|
229
|
+
n = parsed.prefix_number
|
230
|
+
side = parsed.command == "HFD" ? 6 : 10
|
231
|
+
target = parsed.target_number || 20
|
232
|
+
return nil if n == 0
|
233
|
+
|
234
|
+
dice = @randomizer.roll_barabara(n, side).sort
|
235
|
+
sum = dice.sum()
|
236
|
+
tries = [dice]
|
237
|
+
while sum < target
|
238
|
+
dice = @randomizer.roll_barabara(n, side).sort
|
239
|
+
tries.push(dice)
|
240
|
+
sum += dice.sum()
|
241
|
+
end
|
242
|
+
|
243
|
+
Result.new.tap do |r|
|
244
|
+
r.text = "(#{n}#{parsed.command}>=#{target})"
|
245
|
+
tries.each do |ds|
|
246
|
+
r.text += " > #{ds.sum}[#{ds.join(',')}]"
|
247
|
+
end
|
248
|
+
|
249
|
+
is_success = tries.length < 5
|
250
|
+
r.text += " > #{sum}(#{tries.length}回)"
|
251
|
+
r.text += is_success ? " > 成功" : " > 失敗"
|
252
|
+
r.condition = is_success
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
def roll_technical(command)
|
257
|
+
return nil unless command == "TD"
|
258
|
+
|
259
|
+
value = @randomizer.roll_once(10)
|
260
|
+
is_success = value <= 2
|
261
|
+
Result.new.tap do |r|
|
262
|
+
r.text = "(TD) > #{value} > #{is_success ? '成功' : '失敗'}"
|
263
|
+
r.condition = is_success
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
TABLES = {
|
268
|
+
"BAET" => DiceTable::Table.new(
|
269
|
+
"【人間】にも【怪異】にも影響のある後遺症",
|
270
|
+
"1D12",
|
271
|
+
[
|
272
|
+
"鏡に映らない:鏡や水面に姿が映らなくなる。他者から見えなくなるわけではない",
|
273
|
+
"部分的に透明:身体のどこかが透明になる",
|
274
|
+
"部分的欠落:身体のどこかが消えて触ることもできなくなる。生命維持に影響はない",
|
275
|
+
"角が生える:角が生えてくる。元から角がある場合はさらに追加",
|
276
|
+
"しっぽ:動物のしっぽが生える",
|
277
|
+
"けもみみ:動物の耳が頭に生える",
|
278
|
+
"影がなくなる:自分の影がなくなってしまう",
|
279
|
+
"涙が止まらない:ずっと涙が流れ続けて止まらなくなる",
|
280
|
+
"視界の端に何かいる:常に視界の端に何かがいて、踊っている",
|
281
|
+
"耳鳴り:ずっと耳鳴りがやまない。たまに幻聴がする",
|
282
|
+
"美しい幻聴:時々他人の声が現実離れした美しい声に変わって聞こえる",
|
283
|
+
"皮膚の下のうごめき:皮膚の下でずっと何かが蠢いているように感じられる",
|
284
|
+
]
|
285
|
+
),
|
286
|
+
"HAET" => DiceTable::Table.new(
|
287
|
+
"【人間寄り】の時に影響のある後遺症",
|
288
|
+
"1D6",
|
289
|
+
[
|
290
|
+
"幻肢の感覚:存在しない追加の腕や翼の感覚がある",
|
291
|
+
"声変わり:普段とは違う声になってしまう",
|
292
|
+
"怪異の片鱗:【怪異寄り】のときの容姿の一部が【人間寄り】の時にも出てしまう",
|
293
|
+
"幻覚:時折やけに生々しい幻覚が見えるようになる",
|
294
|
+
"恐怖:あらゆるものが怖く見える",
|
295
|
+
"怪異言語:【人間】の領域には存在しない謎の言語が理解できる",
|
296
|
+
]
|
297
|
+
),
|
298
|
+
"SAET" => DiceTable::Table.new(
|
299
|
+
"【怪異寄り】の時に影響のある後遺症",
|
300
|
+
"1D6",
|
301
|
+
[
|
302
|
+
"吸精体質:他者に触れると生命力を吸収してしまう。特に仲の良い相手だとより強くなる",
|
303
|
+
"威圧する視線:あなたの視線は周囲に強烈な威圧感を与えてしまう",
|
304
|
+
"キメラ:あなたの容姿の一部が、他の【越境者】の【怪異寄り】のときの容姿のものと同じになる",
|
305
|
+
"異なる怪異:あなた本来の【怪異】の姿とは違う姿に変化してしまう",
|
306
|
+
"ポルターガイスト:周囲でラップ音や部品の浮遊といった怪現象が多発する",
|
307
|
+
"人間そのもの:【怪異寄り】のときでも人間そのものの容姿になってしまう",
|
308
|
+
]
|
309
|
+
),
|
310
|
+
}.freeze
|
311
|
+
|
312
|
+
register_prefix('\d+HD', '\d+SD', '\d+HCD', '\d+SPD', '\d+HFD', '\dSFD', 'EXIST', 'TD', TABLES.keys)
|
313
|
+
end
|
314
|
+
end
|
315
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class Emoklore_Korean < Emoklore
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = "Emoklore:Korean"
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = "에모크로아TRPG"
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
#
|
14
|
+
# 「ゲームシステム名の読みがなの設定方法」(docs/dicebot_sort_key.md)を参考にして
|
15
|
+
# 設定してください
|
16
|
+
SORT_KEY = "国際化:Korean:에모크로아TRPG"
|
17
|
+
|
18
|
+
# ダイスボットの使い方
|
19
|
+
HELP_MESSAGE = <<~MESSAGETEXT
|
20
|
+
・기능치 판정(xDM<=y)
|
21
|
+
"(개수)DM<=(판정치)"로 판정합니다.
|
22
|
+
주사위의 개수는 생략 가능하며, 생략 시 1개로 설정됩니다.
|
23
|
+
ex)2DM<=5 DM<=8
|
24
|
+
|
25
|
+
・기능치 판정(sDAa+z)
|
26
|
+
"(기능 레벨)DA(능력치)+(주사위 보너스)"로 판정합니다.
|
27
|
+
주사위 보너스의 개수는 생략 가능하며, 생략 시 0개로 설정됩니다.
|
28
|
+
기능 레벨에는 1~3의 수치를 입력합니다. 기본 기능으로 판정하려면 기능 레벨에"b"를 입력하세요.
|
29
|
+
주사위 개수는 기능 레벨과 주사위 보너스 개수에 따라 결정되며, s+z개의 주사위를 굴립니다. (s="b"인 경우 s=1)
|
30
|
+
판정치는 s+a 입니다.(s="b"인 경우에는 s=0)
|
31
|
+
MESSAGETEXT
|
32
|
+
|
33
|
+
register_prefix_from_super_class()
|
34
|
+
|
35
|
+
def initialize(command)
|
36
|
+
super(command)
|
37
|
+
|
38
|
+
@locale = :ko_kr
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -22,9 +22,9 @@ module BCDice
|
|
22
22
|
FF<=2,1: 能力値2,難易度1で判定し、その結果(成功数,1の目の数,6の目の数,成功・失敗,バースト)を表示。
|
23
23
|
6FF<=3,2&1:ヒート6,能力値3,難易度2,基本ダメージ1で戦闘判定し、その結果(成功数,1の目の数,6の目の数,ダメージ,バースト)を表示。
|
24
24
|
|
25
|
-
|
25
|
+
■ジャンク表 JKT
|
26
26
|
|
27
|
-
|
27
|
+
INFO_MESSAGETEXT
|
28
28
|
|
29
29
|
def initialize(command)
|
30
30
|
super(command)
|
@@ -33,7 +33,8 @@ module BCDice
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def eval_game_system_specific_command(command)
|
36
|
-
resolute_action(command)
|
36
|
+
resolute_action(command) ||
|
37
|
+
roll_tables(command, TABLES)
|
37
38
|
end
|
38
39
|
|
39
40
|
private
|
@@ -116,6 +117,27 @@ module BCDice
|
|
116
117
|
result.text = sequence.join(" > ")
|
117
118
|
end
|
118
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)
|
119
141
|
end
|
120
142
|
end
|
121
143
|
end
|
@@ -16,7 +16,9 @@ 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
|
@@ -67,13 +69,13 @@ module BCDice
|
|
67
69
|
@d66_sort_type = D66SortType::ASC
|
68
70
|
end
|
69
71
|
|
70
|
-
register_prefix('(\d+)?DT', '(\d+)?AS')
|
72
|
+
register_prefix('(\d+)?DT(?:6)?', '(\d+)?AS(?:10)?')
|
71
73
|
|
72
74
|
def eval_game_system_specific_command(command)
|
73
|
-
if (m = /^(\d+)?DT
|
75
|
+
if (m = /^(\d+)?DT(?:6)?$/i.match(command))
|
74
76
|
count = m[1]&.to_i || 2
|
75
77
|
return roll_dt(command, count)
|
76
|
-
elsif (m = /^(\d+)?AS
|
78
|
+
elsif (m = /^(\d+)?AS(?:10)?$/i.match(command))
|
77
79
|
count = m[1]&.to_i || 2
|
78
80
|
return roll_as(command, count)
|
79
81
|
end
|
@@ -91,7 +93,12 @@ module BCDice
|
|
91
93
|
|
92
94
|
# 探偵用判定コマンド DT
|
93
95
|
def roll_dt(command, count)
|
94
|
-
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
|
95
102
|
max = dice_list.max
|
96
103
|
|
97
104
|
result =
|
@@ -111,7 +118,12 @@ module BCDice
|
|
111
118
|
|
112
119
|
# 助手用判定コマンド AS
|
113
120
|
def roll_as(command, count)
|
114
|
-
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
|
115
127
|
max = dice_list.max
|
116
128
|
|
117
129
|
result =
|