bcdice 3.14.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 +59 -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/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/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/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/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/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/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/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/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 +15 -0
- data/lib/bcdice/version.rb +1 -1
- metadata +22 -6
@@ -15,48 +15,67 @@ module BCDice
|
|
15
15
|
SORT_KEY = 'しのひかみ'
|
16
16
|
|
17
17
|
# ダイスボットの使い方
|
18
|
+
# 25/01/17:書式成形(半角スペース×2に統一、同じ書籍のシーン表は改行なしで列挙)
|
18
19
|
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
19
20
|
・行為判定 nSG@s#f>=x
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
21
|
+
2D6の行為判定を行う。ダイス数が指定された場合、大きい出目2個を採用する。
|
22
|
+
n: ダイス数 (省略時 2)
|
23
|
+
s: スペシャル値 (省略時 12)
|
24
|
+
f: ファンブル値 (省略時 2)
|
25
|
+
x: 目標値 (省略可)
|
26
|
+
例)SG, SG@11, SG@11#3, SG#3>=7, 3SG>=7
|
27
|
+
|
28
|
+
・行為判定以外の表
|
29
|
+
以下の表は「回数+コマンド」で複数回振れる
|
30
|
+
例)3RCT, 2WT
|
26
31
|
|
27
32
|
・ランダム特技決定表 RTTn (n:分野番号、省略可能)
|
28
|
-
|
33
|
+
1器術 2体術 3忍術 4謀術 5戦術 6妖術
|
29
34
|
|
30
35
|
・ランダム分野表 RCT
|
31
36
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
異形表 MTR、妖魔忍法表(x:A,B,C) DSx
|
36
|
-
プライズ効果表 PT
|
37
|
+
・各種表:基本ルールブック以降
|
38
|
+
ファンブル表 FT、戦場表 BT、感情表 ET、変調表 WT、戦国変調表 GWT、プライズ効果表 PT
|
39
|
+
妖魔化(異形表、妖魔忍法表一括) MT、異形表 MTR、妖魔忍法表(x:A,B,C) DSx
|
37
40
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
41
|
+
・各種表:流派ブック以降
|
42
|
+
比良坂流派ブック
|
43
|
+
パニック表 HRPT
|
44
|
+
鞍馬流派ブック
|
45
|
+
新戦場表 BNT
|
46
|
+
御斎流派ブック
|
47
|
+
覚醒表 OTAT
|
48
|
+
忍法授業シーン表(x:1-攻撃系 2-防御系 3-戦略系)NCTx
|
49
|
+
【数奇】OTS
|
50
|
+
隠忍流派ブック
|
51
|
+
妖術変調対応表(x:なし-現代/戦国、1-現代、2-戦国)YWTx
|
52
|
+
妖魔化(新異形表利用) NMT、新異形表 NMTR、妖魔忍法表(x:1-異霊 2-凶身 3-神化 4-攻激)DSNx
|
53
|
+
出物表 ONDT
|
43
54
|
|
44
|
-
|
45
|
-
|
46
|
-
|
55
|
+
・各種表:基本ルールブック改訂版以前
|
56
|
+
無印
|
57
|
+
旧ファンブル表 OFT 、旧変調表 OWT、旧戦場表 OBT、異形表 MT
|
58
|
+
怪
|
59
|
+
怪ファンブル表 KFT、怪変調表 KWT (基本ルールブックと同一)
|
47
60
|
|
48
61
|
・シーン表
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
62
|
+
基本ルールブック
|
63
|
+
通常 ST、出島 DST、都市 CST、館 MST、トラブル TST、回想 KST、日常 NST、学校 GAST、戦国 GST
|
64
|
+
忍秘伝
|
65
|
+
中忍試験 HC、滅びの塔 HT、影の街 HK、夜行列車 HY、病院 HO、龍動 HR、密室 HM、催眠 HS
|
66
|
+
正忍記
|
67
|
+
カジノ TC、ロードムービー TRM、マスカレイド・キャッスル TMC、月天に死の咲く TGS、恋人との日々 TKH、学校(黒星祭) TKG、魔都学園 TMG、魔都東京 TMT
|
68
|
+
流派ブック以降
|
69
|
+
御斎流派ブック
|
70
|
+
不良高校 OTFK
|
71
|
+
基本ルールブック改訂版以前
|
72
|
+
死
|
73
|
+
東京 TKST
|
74
|
+
リプレイ戦1〜2巻
|
75
|
+
京都 KYST、神社仏閣 JBST
|
76
|
+
その他
|
77
|
+
秋空に雪舞えば AKST、夏の終わり NTST、出島EX DXST、災厄 CLST、斜歯ラボ HLST、培養プラント PLST
|
78
|
+
|
60
79
|
・D66ダイスあり
|
61
80
|
INFO_MESSAGE_TEXT
|
62
81
|
|
@@ -99,8 +118,19 @@ module BCDice
|
|
99
118
|
register_prefix('\d*SG')
|
100
119
|
|
101
120
|
def eval_game_system_specific_command(command)
|
102
|
-
return action_roll(command) ||
|
103
|
-
|
121
|
+
return action_roll(command) || repeat_table(command)
|
122
|
+
end
|
123
|
+
|
124
|
+
def repeat_table(command)
|
125
|
+
times = command.start_with?(/\d/) ? command.to_i : 1
|
126
|
+
key = command.sub(/^\d+/, '')
|
127
|
+
results = [*0...times].map do |_|
|
128
|
+
roll_tables(key, TABLES) || roll_tables(key, SCENE_TABLES) ||
|
129
|
+
roll_tables(key, DEMON_SKILL_TABLES) || roll_tables(key, DEMON_SKILL_TABLES_NEW) || RTT.roll_command(@randomizer, key)
|
130
|
+
end.compact
|
131
|
+
return nil if results.empty?
|
132
|
+
|
133
|
+
return results.join("\n")
|
104
134
|
end
|
105
135
|
|
106
136
|
RTT = DiceTable::SaiFicSkillTable.new(
|
@@ -209,12 +239,12 @@ module BCDice
|
|
209
239
|
'妖魔忍法表・異霊',
|
210
240
|
'1D6',
|
211
241
|
[
|
212
|
-
'【逢魔時】(基本
|
213
|
-
'【神隠】(基本
|
214
|
-
'【狂骨】(基本
|
215
|
-
'【木魂】(基本
|
216
|
-
'【付喪神】(基本
|
217
|
-
'【生剥】(基本
|
242
|
+
'【逢魔時】(基本 p172)/【虚舟】(隠忍 p28)',
|
243
|
+
'【神隠】(基本 p172)/【夢喰】(隠忍 p28)',
|
244
|
+
'【狂骨】(基本 p172)/【金毛】(隠忍 p28)',
|
245
|
+
'【木魂】(基本 p172)/【朽縄】(隠忍 p28)',
|
246
|
+
'【付喪神】(基本 p172)/【香魂】(隠忍 p28)',
|
247
|
+
'【生剥】(基本 p172)/【三尸】(隠忍 p28)',
|
218
248
|
]
|
219
249
|
),
|
220
250
|
'DSN2' => DiceTable::Table.new(
|
@@ -538,12 +568,12 @@ module BCDice
|
|
538
568
|
'覚醒表',
|
539
569
|
'1D6',
|
540
570
|
[
|
541
|
-
'
|
571
|
+
'自分の力が急に恐ろしくなる。好きな覚醒済みデータを一つ選び、それを未覚醒データに変更する。',
|
542
572
|
'自分の力が暴走し、周囲に被害を与える。そのシーンに登場しているキャラクター全員(自分含む)に射撃戦ダメージを1点与える。',
|
543
|
-
'
|
573
|
+
'覚醒に伴い、身体の形が変化する。未覚醒忍法の中からランダムに一つを選び、それを覚醒済み忍法にする。',
|
544
574
|
'忍者の血に目覚め、力の制御方法が理解出来るようになる。好きな未覚醒忍法を一つを選び、それを覚醒済み忍法にする。',
|
545
575
|
'自分だけが操ることが出来る独自の力に目覚める。好きな未覚醒奥義一つを選び、それを覚醒済みの奥義にする。',
|
546
|
-
'
|
576
|
+
'自分の脳に直接何かが囁きかける。集団戦ダメージを1点受けると、好きな未覚醒データの中から一つ選び、それを覚醒済みデータに変更することができる。退魔編であれば、集団戦ダメージを受ける代わりに妖魔化することで、好きな未覚醒データの中から一つ選び、それを覚醒済みデータに変更することができる。'
|
547
577
|
]
|
548
578
|
),
|
549
579
|
'ONDT' => DiceTable::Table.new(
|
@@ -1187,7 +1217,7 @@ module BCDice
|
|
1187
1217
|
]
|
1188
1218
|
),
|
1189
1219
|
}.freeze
|
1190
|
-
register_prefix(RTT.prefixes, TABLES.keys, SCENE_TABLES.keys, DEMON_SKILL_TABLES.keys, DEMON_SKILL_TABLES_NEW.keys)
|
1220
|
+
register_prefix(RTT.prefixes.map { |k| "\\d*#{k}" }, TABLES.keys.map { |k| "\\d*#{k}" }, SCENE_TABLES.keys.map { |k| "\\d*#{k}" }, DEMON_SKILL_TABLES.keys.map { |k| "\\d*#{k}" }, DEMON_SKILL_TABLES_NEW.keys.map { |k| "\\d*#{k}" })
|
1191
1221
|
end
|
1192
1222
|
end
|
1193
1223
|
end
|
@@ -85,7 +85,7 @@ module BCDice
|
|
85
85
|
|
86
86
|
def eval_game_system_specific_command(command)
|
87
87
|
command_sn(command) || command_d(command) || command_avo(command) || command_snavo(command) ||
|
88
|
-
command_snd(command) || roll_tables(command, TABLES)
|
88
|
+
command_snd(command) || roll_tables(command, self.class::TABLES)
|
89
89
|
end
|
90
90
|
|
91
91
|
private
|
@@ -145,7 +145,7 @@ module BCDice
|
|
145
145
|
.sub("F/", "[#{translate('SkynautsBouken.fire')}]/").sub("S/", "[#{translate('SkynautsBouken.big_shake')}]/")
|
146
146
|
result = ["(#{command})", get_points_text(points, 0, 0)]
|
147
147
|
if ballistics != 0
|
148
|
-
dir = DIRECTION_INFOS[ballistics]
|
148
|
+
dir = self.class::DIRECTION_INFOS[ballistics]
|
149
149
|
diff_x, diff_y = dir[:position_diff]
|
150
150
|
result[-1] += "\n"
|
151
151
|
result << "《#{translate('SkynautsBouken.ballistics')}》#{dir[:name]}"
|
@@ -160,7 +160,7 @@ module BCDice
|
|
160
160
|
dmg = command.match(/^AVO@([2468])(.*?)$/)
|
161
161
|
return nil unless dmg
|
162
162
|
|
163
|
-
dir = DIRECTION_INFOS[dmg[1].to_i]
|
163
|
+
dir = self.class::DIRECTION_INFOS[dmg[1].to_i]
|
164
164
|
diff_x, diff_y = dir[:position_diff]
|
165
165
|
"《#{translate('SkynautsBouken.avoidance')}》#{dir[:name]} > " + dmg[2].gsub(/\(?\[(\d),(\d{1,2})\]\)?/) do
|
166
166
|
y = Regexp.last_match(1).to_i + diff_y
|
@@ -224,7 +224,7 @@ module BCDice
|
|
224
224
|
x = @randomizer.roll_sum(2, 6) # 横
|
225
225
|
|
226
226
|
[[x, y]] + range.map do |r|
|
227
|
-
xdiff, ydiff = DIRECTION_INFOS[r][:position_diff]
|
227
|
+
xdiff, ydiff = self.class::DIRECTION_INFOS[r][:position_diff]
|
228
228
|
[x + xdiff, y + ydiff]
|
229
229
|
end
|
230
230
|
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bcdice/game_system/SkynautsBouken"
|
4
|
+
|
5
|
+
module BCDice
|
6
|
+
module GameSystem
|
7
|
+
class SkynautsBouken_Korean < SkynautsBouken
|
8
|
+
# ゲームシステムの識別子
|
9
|
+
ID = 'SkynautsBouken:Korean'
|
10
|
+
|
11
|
+
# ゲームシステム名
|
12
|
+
NAME = '톱니바퀴 탑의 탐공사'
|
13
|
+
|
14
|
+
# ゲームシステム名の読みがな
|
15
|
+
SORT_KEY = '国際化:Korean:톱니바퀴 탑의 탐공사'
|
16
|
+
|
17
|
+
# ダイスボットの使い方
|
18
|
+
HELP_MESSAGE = <<~MESSAGETEXT
|
19
|
+
・행위판정(nSNt#f) n:다이스 수(생략시 2), t:목표치(생략시 7), f:펌블치(생략시 1)
|
20
|
+
예)SN6#2 3SN
|
21
|
+
・대미지 체크 (Dx/y@m) x:대미지 범위、y:공격횟수
|
22
|
+
m:《탄도학》(생략 가능)상:8, 하:2, 좌:4, 우:6
|
23
|
+
예) D/4 D19/2 D/3@8 D[진동]/2
|
24
|
+
・회피(AVO@m대미지)
|
25
|
+
m:회피 방향(상:8, 하:2, 좌:4, 우:6), 대미지: 대미지 체크 결과
|
26
|
+
예)AVO@8[1,4],[2,6],[3,8] AVO@2[6,4],[2,6]
|
27
|
+
・FT 펌블표(p76)
|
28
|
+
・NV 항행표
|
29
|
+
・항행이벤트표
|
30
|
+
・NEN 항행계
|
31
|
+
・NEE 조우계
|
32
|
+
・NEO 선내계
|
33
|
+
・NEH 곤란계
|
34
|
+
・NEL 장거리 여행계
|
35
|
+
|
36
|
+
■ 판정 세트
|
37
|
+
・《회피운동》판정+회피(nSNt#f/AVO@대미지)
|
38
|
+
nSNt#f → 성공하면 AVO@m
|
39
|
+
예)SN/AVO@8[1,4],[2,6],[3,8] 3SN#2/AVO@2[6,4],[2,6]
|
40
|
+
・포격 판정+대미지 체크 (nSNt#f/Dx/y@m)
|
41
|
+
행위 판정의 출발(出目) 변경 타이밍을 놓치므로 GM의 허가 필요
|
42
|
+
nSNt#f → 성공하면 Dx/y@m
|
43
|
+
예)SN/D/4 3SN#2/D[진동]/2
|
44
|
+
MESSAGETEXT
|
45
|
+
|
46
|
+
def initialize(command)
|
47
|
+
super(command)
|
48
|
+
@locale = :ko_kr
|
49
|
+
end
|
50
|
+
|
51
|
+
register_prefix_from_super_class()
|
52
|
+
|
53
|
+
TABLES = translate_tables(:ko_kr).freeze
|
54
|
+
DIRECTION_INFOS = translate_direction_infos(:ko_kr).freeze
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -18,7 +18,7 @@ module BCDice
|
|
18
18
|
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
19
19
|
VOT, GUT, BAT, KEYT, DRT: (보컬, 기타, 베이스, 키보드, 드럼)트러블표
|
20
20
|
EMO: 감정표
|
21
|
-
RTT[1-6], AT[1-6]: 특기표(공백: 랜덤 1:
|
21
|
+
RTT[1-6], AT[1-6]: 특기표(공백: 랜덤 1: 가치관 2: 신체 3: 모티브 4: 이모션 5: 행동 6: 역경)
|
22
22
|
SCENE, MACHI, GAKKO, BAND: (범용, 거리, 학교, 밴드)장면표. 접근 장면에 사용
|
23
23
|
TENKAI: 장면 전개표. 분주 장면, 연습 장면에 사용
|
24
24
|
[]내는 생략가능 D66는 변동있음
|
@@ -85,6 +85,7 @@ module BCDice
|
|
85
85
|
round = 0
|
86
86
|
first_to = command.first_to
|
87
87
|
first_modify = command.first_modify
|
88
|
+
first_modify_ssp = command.first_modify_ssp
|
88
89
|
|
89
90
|
loop do
|
90
91
|
dice_raw, diceText = rollDice(command, round)
|
@@ -96,6 +97,9 @@ module BCDice
|
|
96
97
|
elsif first_modify != 0
|
97
98
|
dice += first_modify
|
98
99
|
first_modify = 0
|
100
|
+
elsif first_modify_ssp != 0
|
101
|
+
dice += first_modify_ssp if dice_raw <= 10
|
102
|
+
first_modify_ssp = 0
|
99
103
|
end
|
100
104
|
|
101
105
|
# 出目がピンゾロの時にはそこで終了
|
@@ -46,11 +46,12 @@ module BCDice
|
|
46
46
|
クリティカル値を指定しない場合、クリティカルなしと扱われます。
|
47
47
|
例)OHK20 K20oh OHK10-5@9 K20+8OH+2 K20+8OH+(1+1)
|
48
48
|
|
49
|
-
|
49
|
+
・ダイス目の修正(運命変転やクリティカルレイ、魔女の火用)
|
50
50
|
末尾に「$修正値」でダイス目に修正がかかります。
|
51
51
|
$+1と修正表記ならダイス目に+修正、$9のように固定値ならダイス目をその出目に差し替え。
|
52
|
+
$~+1とチルダを追加して記述することで、出目10以下の場合のみダイス目に+修正(魔女の火用)
|
52
53
|
クリティカルした場合でも固定値や修正値の適用は最初の一回だけです。
|
53
|
-
例)K20$+1 K10+5$9 k10-5@9$+2 k10[9]+10$9
|
54
|
+
例)K20$+1 K10+5$9 k10-5@9$+2 k10[9]+10$9 k20+6$~+1
|
54
55
|
|
55
56
|
・ダイス目の修正(必殺攻撃用)
|
56
57
|
「#修正値」でダイス目に修正がかかります。
|
@@ -17,21 +17,34 @@ module BCDice
|
|
17
17
|
・行為判定
|
18
18
|
TN6…「有利」を得ていない場合、6面ダイスを2つ振って判定します。
|
19
19
|
TN10…「有利」を得ている場合、10面ダイスを2つ振って判定します。
|
20
|
-
不調 気づかぬうちの不満【C
|
20
|
+
不調 気づかぬうちの不満【C】…このセッションの間、「4」の出目を出しても判定は成功になりません。数字の後ろに【C】をつけます。
|
21
21
|
例)TN6C
|
22
22
|
軍師スキル 〇〇サポート【S】…決戦フェイズの判定中「3」の出目を出しても判定に成功します。数字の後ろに【S】をつけます。
|
23
23
|
例)TN6S
|
24
24
|
英傑スキル/武人 煌めく刃【B】…決戦フェイズの判定中「3」の出目を出しても判定に成功となり、スペシャルが発生します。数字の後ろに【B】をつけます。
|
25
25
|
例)TN6B
|
26
|
+
英傑スキル/武人 力ずく…その判定のサイコロをすべて振った後、[使用者の【攻撃力】]個サイコロを振る。先頭に使用者の【攻撃力】をつけます。
|
27
|
+
例)4TN6
|
28
|
+
英傑スキル/武人 必殺の剣【D】…《戦技》を使用している判定中「4」「5」の出目を出してもスペシャルが発生します。数字の後ろに【D】をつけます。
|
29
|
+
例)TN6K
|
30
|
+
英傑スキル/武人 二刀流【T】…「攻撃」のスキルの判定中「2」の出目を出しても判定に成功となり、同じ出目のサイコロが2つ以上出ているとスペシャルが発生します。数字の後ろに【T】をつけます。
|
31
|
+
例)TN6T
|
26
32
|
英傑スキル/カリスマ 御身のためならば【Y】…「交流」「スカウト」の判定中「3」の出目を出しても判定に成功となり、スペシャルが発生します。数字の後ろに【Y】をつけます。
|
27
33
|
例)TN6Y
|
34
|
+
英傑スキル/弓取り 愛用の弓【A】…「攻撃」のスキルの判定中「3」の出目を出しても判定に成功となり、スペシャルが発生します。数字の後ろに【A】をつけます。
|
35
|
+
例)TN6A
|
36
|
+
英傑スキル/ヤンキー&マイルドヤンキー その辺の物を武器に【C】…「4」の出目を出しても判定は成功になりません。数字の後ろに【C】をつけます。
|
37
|
+
例)TN6C
|
38
|
+
英傑スキル/ヤンキー&マイルドヤンキー 熱血判定【C】…「4」の出目を出しても判定は成功になりません。数字の後ろに【C】をつけます。
|
39
|
+
例)TN6C
|
28
40
|
英傑スキル/英傑汎用 凄腕エージェント【A】…活動フェイズの判定中「3」の出目を出しても判定に成功となり、スペシャルが発生します。数字の後ろに【A】をつけます。
|
29
41
|
例)TN6A
|
30
42
|
数字の後ろに複数のコマンドを追加できます。
|
31
43
|
例)TN10CYA
|
32
|
-
・ダメージ計算 xDM>=t
|
44
|
+
・ダメージ計算 xDM+y>=t
|
33
45
|
[ダメージ計算]を行う。成否と【HP】の減少量を表示する。
|
34
46
|
x: 6面ダイス数
|
47
|
+
y: 補正値(省略可能)
|
35
48
|
t: 防御力
|
36
49
|
・各種表
|
37
50
|
関係決定表 RELA
|
@@ -48,7 +61,7 @@ module BCDice
|
|
48
61
|
@round_type = RoundType::FLOOR
|
49
62
|
end
|
50
63
|
|
51
|
-
register_prefix('TN(6|10)[
|
64
|
+
register_prefix('\d*TN(6|10)[ABCKSTY]*', '\d+DM')
|
52
65
|
|
53
66
|
def eval_game_system_specific_command(command)
|
54
67
|
roll_judge(command) || roll_damage(command) || roll_tables(command, self.class::TABLES)
|
@@ -58,7 +71,7 @@ module BCDice
|
|
58
71
|
|
59
72
|
# 行為判定
|
60
73
|
def roll_judge(command)
|
61
|
-
m = /^TN(6|10)([
|
74
|
+
m = /^(\d*)TN(6|10)([ABCKSTY]*)$/.match(command)
|
62
75
|
unless m
|
63
76
|
return nil
|
64
77
|
end
|
@@ -73,51 +86,73 @@ module BCDice
|
|
73
86
|
fumble_dices = [1]
|
74
87
|
|
75
88
|
# 有利
|
76
|
-
advantage = m[
|
89
|
+
advantage = m[2] == "10"
|
77
90
|
|
78
91
|
# 不調 気づかぬうちの不満
|
79
|
-
complaints = m[
|
92
|
+
complaints = m[3].include?("C")
|
80
93
|
|
81
94
|
# 軍師スキル 〇〇サポート
|
82
|
-
support = m[
|
95
|
+
support = m[3].include?("S")
|
83
96
|
|
84
97
|
# 英傑スキル/武人 煌めく刃
|
85
|
-
blade = m[
|
98
|
+
blade = m[3].include?("B")
|
99
|
+
|
100
|
+
# 英傑スキル/武人 必殺の剣
|
101
|
+
killer = m[3].include?("K")
|
102
|
+
|
103
|
+
# 英傑スキル/武人 二刀流
|
104
|
+
twin = m[3].include?("T")
|
86
105
|
|
87
106
|
# 英傑スキル/カリスマ 御身のためならば
|
88
|
-
you = m[
|
107
|
+
you = m[3].include?("Y")
|
89
108
|
|
109
|
+
# 英傑スキル/弓取り 愛用の弓
|
90
110
|
# 英傑スキル/英傑汎用 凄腕エージェント
|
91
|
-
agent = m[
|
111
|
+
agent = m[3].include?("A")
|
92
112
|
|
93
|
-
#
|
113
|
+
# 二刀流の適用時
|
114
|
+
if twin
|
115
|
+
# 成功となる出目に2を追加
|
116
|
+
success_dices.push(2)
|
117
|
+
end
|
118
|
+
|
119
|
+
# 〇〇サポート、煌めく刃、愛用の弓、御身のためならば、凄腕エージェントいずれかの適用時
|
94
120
|
if support | blade | you | agent
|
95
121
|
# 成功となる出目に3を追加
|
96
122
|
success_dices.push(3)
|
97
123
|
end
|
98
124
|
|
99
|
-
#
|
125
|
+
# 煌めく刃、御身のためならば、愛用の弓、凄腕エージェントいずれかの適用時
|
100
126
|
if blade | you | agent
|
101
127
|
# スペシャルとなる出目に3を追加
|
102
128
|
special_dices.push(3)
|
103
129
|
end
|
104
130
|
|
131
|
+
# 必殺の剣の適用時
|
132
|
+
if killer
|
133
|
+
# スペシャルとなる出目に4,5を追加
|
134
|
+
special_dices.push(4)
|
135
|
+
special_dices.push(5)
|
136
|
+
end
|
137
|
+
|
105
138
|
# 気づかぬうちの不満適用時
|
106
139
|
if complaints
|
107
140
|
# 成功となる出目から4を削除
|
108
141
|
success_dices.delete(4)
|
109
142
|
end
|
110
143
|
|
144
|
+
# 英傑スキル/武人 力ずく
|
145
|
+
times = 2 + m[1].to_i
|
111
146
|
dice_size = advantage ? 10 : 6
|
112
|
-
dice_list = @randomizer.roll_barabara(
|
147
|
+
dice_list = @randomizer.roll_barabara(times, dice_size)
|
113
148
|
|
114
149
|
texts = []
|
115
150
|
is_critical = false
|
116
151
|
is_fumble = false
|
117
152
|
is_success = false
|
118
153
|
|
119
|
-
#
|
120
|
-
|
154
|
+
# スペシャルとなる出目を含む、または、二刀流の適用時かつ同じ出目のサイコロが2つ以上出ている場合
|
155
|
+
if !dice_list.intersection(special_dices).empty? | (twin & (dice_list.count != dice_list.uniq.count))
|
121
156
|
# クリティカルフラグを立てる
|
122
157
|
is_critical = true
|
123
158
|
# スペシャルのシステムメッセージを追加
|
@@ -169,7 +204,6 @@ module BCDice
|
|
169
204
|
def roll_damage(command)
|
170
205
|
parser = Command::Parser.new("DM", round_type: @round_type)
|
171
206
|
.has_prefix_number
|
172
|
-
.disable_modifier
|
173
207
|
.restrict_cmp_op_to(:>=)
|
174
208
|
parsed = parser.parse(command)
|
175
209
|
unless parsed
|
@@ -180,7 +214,7 @@ module BCDice
|
|
180
214
|
is_success = false
|
181
215
|
|
182
216
|
# ダメージ計算
|
183
|
-
damage = @randomizer.roll_sum(parsed.prefix_number, 6)
|
217
|
+
damage = @randomizer.roll_sum(parsed.prefix_number, 6) + parsed.modify_number
|
184
218
|
# HP減少量計算
|
185
219
|
dec = damage / parsed.target_number
|
186
220
|
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class TheIndieHack < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'TheIndieHack'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = 'The Indie Hack'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'しいんていはつく'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<~INFO_MESSAGETEXT
|
17
|
+
■判定 cIH+a c:CL a:能力値
|
18
|
+
|
19
|
+
例)IH: ライトダイスとダークダイスを1個ずつ振って、その結果を表示
|
20
|
+
INFO_MESSAGETEXT
|
21
|
+
|
22
|
+
register_prefix('([+-]?\d)?IH')
|
23
|
+
|
24
|
+
def eval_game_system_specific_command(command)
|
25
|
+
resolute_action(command)
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
# ダイス判定
|
31
|
+
# @param [String] command
|
32
|
+
# @return [Result]
|
33
|
+
def resolute_action(command)
|
34
|
+
m = /([+-]?\d)?IH([+-]\d)?/.match(command)
|
35
|
+
return nil unless m
|
36
|
+
|
37
|
+
cl = m[1].to_i
|
38
|
+
abilities = m[2].to_i
|
39
|
+
|
40
|
+
dices = @randomizer.roll_barabara(2, 6)
|
41
|
+
dice_text = dices.join(",")
|
42
|
+
dices[0] += cl
|
43
|
+
dices[1] += abilities
|
44
|
+
dice_text2 = dices.join(",")
|
45
|
+
diff = dices[1] - dices[0]
|
46
|
+
side = diff < 0 ? "ライト" : "ダーク"
|
47
|
+
side = "両" if diff == 0
|
48
|
+
if dice_text == dice_text2
|
49
|
+
output = "(IH) > #{dice_text} > #{side}#{get_success_level(diff)}"
|
50
|
+
else
|
51
|
+
output = "(#{m[1]}IH#{m[2]}) > [#{dice_text}] > #{dice_text2} > #{side}#{get_success_level(diff)}"
|
52
|
+
end
|
53
|
+
if diff > 0
|
54
|
+
return Result.success(output)
|
55
|
+
elsif diff < 0
|
56
|
+
return Result.failure(output)
|
57
|
+
else
|
58
|
+
return Result.new.tap do |result|
|
59
|
+
result.text = output
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def get_success_level(die_difference)
|
65
|
+
case die_difference.abs
|
66
|
+
when 0
|
67
|
+
return "陣営がそれぞれ確定描写を1つ追加します"
|
68
|
+
when 1
|
69
|
+
return "陣営が確定描写を1つ追加しますが、味方によって追加されたネガティブな確定描写を1つ受けます"
|
70
|
+
when 2
|
71
|
+
return "陣営が確定描写を1つ追加します"
|
72
|
+
when 3
|
73
|
+
return "陣営が確定描写を1つ追加し、さらに場面描写を1つ追加します"
|
74
|
+
when 4
|
75
|
+
return "陣営が確定描写を1つ追加し、さらにその陣営の味方ひとりも確定描写を1つ追加します"
|
76
|
+
else
|
77
|
+
return "陣営が確定描写を2つ追加します"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -31,6 +31,11 @@ module BCDice
|
|
31
31
|
mはポシビリティを使用する前のロール結果を入れて下さい。
|
32
32
|
出目が10未満の場合は、10への読み替えが行われます。
|
33
33
|
また、振り足しを自動で行い、20の出目が出たときには技能無し値も並記します。
|
34
|
+
・CPOS
|
35
|
+
"CPOSm"で、コズムポシビリティ使用による1d20のロールを行います。
|
36
|
+
mはポシビリティを使用する前のロール結果を入れて下さい。
|
37
|
+
出目が10未満の場合でも、10への読み替えが行われません。
|
38
|
+
振り足しは自動で行い、20の出目が出たときには技能無し値も並記します。
|
34
39
|
・ボーナスダメージロール
|
35
40
|
"xBD[+y]"でロールします。[]内は省略可能。
|
36
41
|
xはダメージダイス数。yはダメージ基本値 or 式を入れて下さい。
|
@@ -42,13 +47,14 @@ module BCDice
|
|
42
47
|
・ダメージ結果表「DTx or DAMAGEx」
|
43
48
|
・ロールボーナス表「BTx+y or BONUSx+y or TOTALx+y」 xは数値, yは技能基本値
|
44
49
|
INFO_MESSAGE_TEXT
|
45
|
-
register_prefix('TE', 'UP', 'POS', '\d+BD', 'TG', 'RT', 'Result', 'DT', 'damage', 'BT', 'bonus', 'total', '1R20')
|
50
|
+
register_prefix('TE', 'UP', 'POS', 'CPOS', '\d+BD', 'TG', 'RT', 'Result', 'DT', 'damage', 'BT', 'bonus', 'total', '1R20')
|
46
51
|
|
47
52
|
def eval_game_system_specific_command(command)
|
48
53
|
torg_check(command) ||
|
49
54
|
getRolld20DiceCommandResult(command) ||
|
50
55
|
getUpRollDiceCommandResult(command) ||
|
51
56
|
getPossibilityRollDiceCommandResult(command) ||
|
57
|
+
getCosmPossibilityRollDiceCommandResult(command) ||
|
52
58
|
getBonusDamageDiceCommandResult(command) ||
|
53
59
|
getSuccessLevelDiceCommandResult(command) ||
|
54
60
|
getDamageResultDiceCommandResult(command) ||
|
@@ -75,7 +81,7 @@ module BCDice
|
|
75
81
|
mod = m[1]
|
76
82
|
|
77
83
|
debug(mod)
|
78
|
-
mod =
|
84
|
+
mod = mod ? Arithmetic.eval(mod, @round_type) : 0
|
79
85
|
debug(mod)
|
80
86
|
mod = mod.to_i
|
81
87
|
skilled, unskilled, dice_str, = torg_eternity_dice(false, false)
|
@@ -191,7 +197,7 @@ module BCDice
|
|
191
197
|
return nil
|
192
198
|
end
|
193
199
|
|
194
|
-
output_modifier =
|
200
|
+
output_modifier = m[1] ? Arithmetic.eval(m[1], @round_type) : 0
|
195
201
|
skilled, unskilled, dice_str, = torg_eternity_dice(true, false)
|
196
202
|
subtotal_skilled = skilled + output_modifier
|
197
203
|
subtotal_unskilled = unskilled + output_modifier
|
@@ -206,6 +212,29 @@ module BCDice
|
|
206
212
|
return output
|
207
213
|
end
|
208
214
|
|
215
|
+
# ロールコマンド (コズムポシビリティロール)
|
216
|
+
def getCosmPossibilityRollDiceCommandResult(command)
|
217
|
+
debug("Torg Eternity CosmPossibility Roll Command ? ", command)
|
218
|
+
m = /^CPOS((\d+)(\+\d+)?)$/i.match(command)
|
219
|
+
unless m
|
220
|
+
return nil
|
221
|
+
end
|
222
|
+
|
223
|
+
output_modifier = m[1] ? Arithmetic.eval(m[1], @round_type) : 0
|
224
|
+
skilled, unskilled, dice_str, = torg_eternity_dice(false, false)
|
225
|
+
subtotal_skilled = skilled + output_modifier
|
226
|
+
subtotal_unskilled = unskilled + output_modifier
|
227
|
+
value_skilled = format("%+d", get_torg_eternity_bonus(subtotal_skilled))
|
228
|
+
if subtotal_skilled != subtotal_unskilled
|
229
|
+
value_unskilled = format("%+d", get_torg_eternity_bonus(subtotal_unskilled))
|
230
|
+
output = "d20ロール(ポシビリティ) > #{output_modifier}+1d20[#{dice_str}] > #{value_skilled}[#{subtotal_skilled}](技能有) / #{value_unskilled}[#{subtotal_unskilled}](技能無)"
|
231
|
+
else
|
232
|
+
output = "d20ロール(ポシビリティ) > #{output_modifier}+1d20[#{dice_str}] > #{value_skilled}[#{subtotal_skilled}]"
|
233
|
+
end
|
234
|
+
|
235
|
+
return output
|
236
|
+
end
|
237
|
+
|
209
238
|
# ダメージボーナスコマンド
|
210
239
|
def getBonusDamageDiceCommandResult(command)
|
211
240
|
debug("TorgEternity Bonus Damage Roll Command ? ", command)
|
@@ -234,7 +263,7 @@ module BCDice
|
|
234
263
|
return nil
|
235
264
|
end
|
236
265
|
|
237
|
-
value =
|
266
|
+
value = m[2] ? Arithmetic.eval(m[2], @round_type) : 0
|
238
267
|
debug(value)
|
239
268
|
if value < 0
|
240
269
|
output = "Failure."
|
@@ -254,7 +283,7 @@ module BCDice
|
|
254
283
|
return nil
|
255
284
|
end
|
256
285
|
|
257
|
-
value =
|
286
|
+
value = m[2] ? Arithmetic.eval(m[2], @round_type) : 0
|
258
287
|
debug(value)
|
259
288
|
output = get_torg_eternity_damage_result(value)
|
260
289
|
output = "ダメージ結果表[#{value}] > #{output}"
|
@@ -307,7 +336,7 @@ module BCDice
|
|
307
336
|
value_modifier = 0
|
308
337
|
output_modifier = ""
|
309
338
|
else
|
310
|
-
value_modifier =
|
339
|
+
value_modifier = string_modifier ? Arithmetic.eval(string_modifier, @round_type) : 0
|
311
340
|
output_modifier = format("%+d", value_modifier)
|
312
341
|
end
|
313
342
|
debug(value_modifier)
|