Skip to content

Commit be81061

Browse files
authored
Merge pull request #755 from satsumawagashi/adapt-for-haryu-senki
[天才軍師になろう]『覇竜戦記』と『まるごと1冊冒険企画局プラス』で追加されたスキルへの対応
2 parents 5515a15 + e893b77 commit be81061

File tree

2 files changed

+334
-19
lines changed

2 files changed

+334
-19
lines changed

lib/bcdice/game_system/TensaiGunshiNiNaro.rb

Lines changed: 51 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,34 @@ class TensaiGunshiNiNaro < Base
1717
・行為判定
1818
TN6…「有利」を得ていない場合、6面ダイスを2つ振って判定します。
1919
TN10…「有利」を得ている場合、10面ダイスを2つ振って判定します。
20-
不調 気づかぬうちの不満【C】…判定のダイス目が「4」でも判定に成功しません。数字の後ろに【C】をつけます。
20+
不調 気づかぬうちの不満【C】…このセッションの間、「4」の出目を出しても判定は成功になりません。数字の後ろに【C】をつけます。
2121
 例)TN6C
2222
軍師スキル 〇〇サポート【S】…決戦フェイズの判定中「3」の出目を出しても判定に成功します。数字の後ろに【S】をつけます。
2323
 例)TN6S
2424
英傑スキル/武人 煌めく刃【B】…決戦フェイズの判定中「3」の出目を出しても判定に成功となり、スペシャルが発生します。数字の後ろに【B】をつけます。
2525
 例)TN6B
26+
英傑スキル/武人 力ずく…その判定のサイコロをすべて振った後、[使用者の【攻撃力】]個サイコロを振る。先頭に使用者の【攻撃力】をつけます。
27+
 例)4TN6
28+
英傑スキル/武人 必殺の剣【D】…《戦技》を使用している判定中「4」「5」の出目を出してもスペシャルが発生します。数字の後ろに【D】をつけます。
29+
 例)TN6K
30+
英傑スキル/武人 二刀流【T】…「攻撃」のスキルの判定中「2」の出目を出しても判定に成功となり、同じ出目のサイコロが2つ以上出ているとスペシャルが発生します。数字の後ろに【T】をつけます。
31+
 例)TN6T
2632
英傑スキル/カリスマ 御身のためならば【Y】…「交流」「スカウト」の判定中「3」の出目を出しても判定に成功となり、スペシャルが発生します。数字の後ろに【Y】をつけます。
2733
 例)TN6Y
34+
英傑スキル/弓取り 愛用の弓【A】…「攻撃」のスキルの判定中「3」の出目を出しても判定に成功となり、スペシャルが発生します。数字の後ろに【A】をつけます。
35+
 例)TN6A
36+
英傑スキル/ヤンキー&マイルドヤンキー その辺の物を武器に【C】…「4」の出目を出しても判定は成功になりません。数字の後ろに【C】をつけます。
37+
 例)TN6C
38+
英傑スキル/ヤンキー&マイルドヤンキー 熱血判定【C】…「4」の出目を出しても判定は成功になりません。数字の後ろに【C】をつけます。
39+
 例)TN6C
2840
英傑スキル/英傑汎用 凄腕エージェント【A】…活動フェイズの判定中「3」の出目を出しても判定に成功となり、スペシャルが発生します。数字の後ろに【A】をつけます。
2941
 例)TN6A
3042
数字の後ろに複数のコマンドを追加できます。
3143
 例)TN10CYA
32-
・ダメージ計算 xDM>=t
44+
・ダメージ計算 xDM+y>=t
3345
 [ダメージ計算]を行う。成否と【HP】の減少量を表示する。
3446
 x: 6面ダイス数
47+
 y: 補正値(省略可能)
3548
 t: 防御力
3649
・各種表
3750
関係決定表 RELA
@@ -48,7 +61,7 @@ def initialize(command)
4861
@round_type = RoundType::FLOOR
4962
end
5063

51-
register_prefix('TN(6|10)[CSBYA]*', '\d+DM')
64+
register_prefix('\d*TN(6|10)[ABCKSTY]*', '\d+DM')
5265

5366
def eval_game_system_specific_command(command)
5467
roll_judge(command) || roll_damage(command) || roll_tables(command, self.class::TABLES)
@@ -58,7 +71,7 @@ def eval_game_system_specific_command(command)
5871

5972
# 行為判定
6073
def roll_judge(command)
61-
m = /^TN(6|10)([CSBYA]*)$/.match(command)
74+
m = /^(\d*)TN(6|10)([ABCKSTY]*)$/.match(command)
6275
unless m
6376
return nil
6477
end
@@ -73,51 +86,73 @@ def roll_judge(command)
7386
fumble_dices = [1]
7487

7588
# 有利
76-
advantage = m[1] == "10"
89+
advantage = m[2] == "10"
7790

7891
# 不調 気づかぬうちの不満
79-
complaints = m[2].include?("C")
92+
complaints = m[3].include?("C")
8093

8194
# 軍師スキル 〇〇サポート
82-
support = m[2].include?("S")
95+
support = m[3].include?("S")
8396

8497
# 英傑スキル/武人 煌めく刃
85-
blade = m[2].include?("B")
98+
blade = m[3].include?("B")
99+
100+
# 英傑スキル/武人 必殺の剣
101+
killer = m[3].include?("K")
102+
103+
# 英傑スキル/武人 二刀流
104+
twin = m[3].include?("T")
86105

87106
# 英傑スキル/カリスマ 御身のためならば
88-
you = m[2].include?("Y")
107+
you = m[3].include?("Y")
89108

109+
# 英傑スキル/弓取り 愛用の弓
90110
# 英傑スキル/英傑汎用 凄腕エージェント
91-
agent = m[2].include?("A")
111+
agent = m[3].include?("A")
92112

93-
# 〇〇サポート、煌めく刃、御身のためならば、凄腕エージェントいずれかの適用時
113+
# 二刀流の適用時
114+
if twin
115+
# 成功となる出目に2を追加
116+
success_dices.push(2)
117+
end
118+
119+
# 〇〇サポート、煌めく刃、愛用の弓、御身のためならば、凄腕エージェントいずれかの適用時
94120
if support | blade | you | agent
95121
# 成功となる出目に3を追加
96122
success_dices.push(3)
97123
end
98124

99-
# 煌めく刃、御身のためならば、凄腕エージェントいずれかの適用時
125+
# 煌めく刃、御身のためならば、愛用の弓、凄腕エージェントいずれかの適用時
100126
if blade | you | agent
101127
# スペシャルとなる出目に3を追加
102128
special_dices.push(3)
103129
end
104130

131+
# 必殺の剣の適用時
132+
if killer
133+
# スペシャルとなる出目に4,5を追加
134+
special_dices.push(4)
135+
special_dices.push(5)
136+
end
137+
105138
# 気づかぬうちの不満適用時
106139
if complaints
107140
# 成功となる出目から4を削除
108141
success_dices.delete(4)
109142
end
110143

144+
# 英傑スキル/武人 力ずく
145+
times = 2 + m[1].to_i
111146
dice_size = advantage ? 10 : 6
112-
dice_list = @randomizer.roll_barabara(2, dice_size)
147+
dice_list = @randomizer.roll_barabara(times, dice_size)
113148

114149
texts = []
115150
is_critical = false
116151
is_fumble = false
117152
is_success = false
118153

119-
# スペシャルとなる出目を含む場合
120-
unless dice_list.intersection(special_dices).empty?
154+
# スペシャルとなる出目を含む、または、二刀流の適用時かつ同じ出目のサイコロが2つ以上出ている場合
155+
if !dice_list.intersection(special_dices).empty? | (twin & (dice_list.count != dice_list.uniq.count))
121156
# クリティカルフラグを立てる
122157
is_critical = true
123158
# スペシャルのシステムメッセージを追加
@@ -169,7 +204,6 @@ def roll_judge(command)
169204
def roll_damage(command)
170205
parser = Command::Parser.new("DM", round_type: @round_type)
171206
.has_prefix_number
172-
.disable_modifier
173207
.restrict_cmp_op_to(:>=)
174208
parsed = parser.parse(command)
175209
unless parsed
@@ -180,7 +214,7 @@ def roll_damage(command)
180214
is_success = false
181215

182216
# ダメージ計算
183-
damage = @randomizer.roll_sum(parsed.prefix_number, 6)
217+
damage = @randomizer.roll_sum(parsed.prefix_number, 6) + parsed.modify_number
184218
# HP減少量計算
185219
dec = damage / parsed.target_number
186220

0 commit comments

Comments
 (0)