bcdice 3.16.1 → 3.17.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 +111 -0
- data/i18n/Airgetlamh/ja_jp.yml +5 -0
- data/i18n/Airgetlamh/ko_kr.yml +5 -0
- data/i18n/Alsetto/ja_jp.yml +5 -0
- data/i18n/Alsetto/ko_kr.yml +5 -0
- data/i18n/AnimaAnimus/ja_jp.yml +28 -0
- data/i18n/AnimaAnimus/ko_kr.yml +28 -0
- data/i18n/BlackJacket/ja_jp.yml +79 -0
- data/i18n/BlackJacket/ko_kr.yml +79 -0
- data/i18n/Bloodorium/ja_jp.yml +3 -0
- data/i18n/Bloodorium/ko_kr.yml +3 -0
- data/i18n/Cthulhu/ko_kr.yml +1 -1
- data/i18n/Dracurouge/ko_kr.yml +1284 -205
- data/i18n/Emoklore/ja_jp.yml +1 -0
- data/i18n/Emoklore/ko_kr.yml +1 -0
- data/i18n/FutariSousa/ja_jp.yml +70 -0
- data/i18n/FutariSousa/ko_kr.yml +157 -0
- data/i18n/HatsuneMiku/ja_jp.yml +579 -0
- data/i18n/HatsuneMiku/ko_kr.yml +579 -0
- data/i18n/Irisbane/ja_jp.yml +27 -0
- data/i18n/Irisbane/ko_kr.yml +27 -0
- data/i18n/JuinKansen/ja_jp.yml +168 -0
- data/i18n/JuinKansen/ko_kr.yml +168 -0
- data/i18n/KemonoNoMori/ja_jp.yml +229 -0
- data/i18n/KemonoNoMori/ko_kr.yml +229 -0
- data/i18n/KizunaBullet/ko_kr.yml +653 -0
- data/i18n/MagicPunk/ja_jp.yml +5 -0
- data/i18n/MagicPunk/ko_kr.yml +5 -0
- data/i18n/MorkBorg/ja_jp.yml +34 -0
- data/i18n/MorkBorg/ko_kr.yml +34 -0
- data/i18n/Nechronica/ko_kr.yml +43 -0
- data/i18n/NegikureNegimaki/ja_jp.yml +6 -0
- data/i18n/NegikureNegimaki/ko_kr.yml +6 -0
- data/i18n/Nuekagami/ja_jp.yml +219 -0
- data/i18n/Nuekagami/ko_kr.yml +219 -0
- data/i18n/Revulture/ja_jp.yml +8 -0
- data/i18n/Revulture/ko_kr.yml +8 -0
- data/i18n/SRS/ja_jp.yml +4 -0
- data/i18n/SRS/ko_kr.yml +4 -0
- data/i18n/ShinobiGami/ja_jp.yml +879 -0
- data/i18n/ShinobiGami/ko_kr.yml +876 -0
- data/i18n/StarryDolls/ja_jp.yml +456 -0
- data/i18n/StarryDolls/ko_kr.yml +456 -0
- data/i18n/StratoShout/ja_jp.yml +8 -8
- data/i18n/SwordWorld2_5/ja_jp.yml +48 -0
- data/i18n/Ventangle/ja_jp.yml +4 -0
- data/i18n/Ventangle/ko_kr.yml +4 -0
- data/i18n/YearZeroEngine/ja_jp.yml +12 -0
- data/i18n/YearZeroEngine/ko_kr.yml +12 -0
- data/i18n/ZombiLine/ja_jp.yml +27 -0
- data/i18n/ZombiLine/ko_kr.yml +27 -0
- data/i18n/ko_kr.yml +2 -0
- data/i18n/zh_hant.yml +2 -2
- data/lib/bcdice/dice_table/d66_left_range_table.rb +21 -0
- data/lib/bcdice/game_system/Aionia.rb +68 -19
- data/lib/bcdice/game_system/Airgetlamh.rb +64 -41
- data/lib/bcdice/game_system/Airgetlamh_Korean.rb +53 -0
- data/lib/bcdice/game_system/Alsetto.rb +63 -50
- data/lib/bcdice/game_system/Alsetto_Korean.rb +51 -0
- data/lib/bcdice/game_system/AnimaAnimus.rb +15 -32
- data/lib/bcdice/game_system/AnimaAnimus_Korean.rb +39 -0
- data/lib/bcdice/game_system/BlackJacket.rb +57 -113
- data/lib/bcdice/game_system/BlackJacket_Korean.rb +8 -206
- data/lib/bcdice/game_system/Bloodorium.rb +1 -1
- data/lib/bcdice/game_system/Bloodorium_Korean.rb +34 -0
- data/lib/bcdice/game_system/ChroniclesOfDarkness2e.rb +163 -0
- data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +471 -300
- data/lib/bcdice/game_system/DeadlineHeroes_Korean.rb +273 -0
- data/lib/bcdice/game_system/Dracurouge_Korean.rb +25 -19
- data/lib/bcdice/game_system/DungeonsAndDragons5.rb +106 -73
- data/lib/bcdice/game_system/DungeonsAndDragons5_Korean.rb +53 -0
- data/lib/bcdice/game_system/DungeonsAndDragons_Korean.rb +61 -0
- data/lib/bcdice/game_system/Emoklore.rb +34 -9
- data/lib/bcdice/game_system/Emoklore_Korean.rb +10 -2
- data/lib/bcdice/game_system/FateCoreSystem.rb +10 -6
- data/lib/bcdice/game_system/FullMetalPanic_Korean.rb +28 -0
- data/lib/bcdice/game_system/FutariSousa.rb +37 -12
- data/lib/bcdice/game_system/FutariSousa_Korean.rb +25 -8
- data/lib/bcdice/game_system/GaiaCare.rb +40 -0
- data/lib/bcdice/game_system/GardenOrder.rb +2 -2
- data/lib/bcdice/game_system/GardenOrderReEdit.rb +849 -0
- data/lib/bcdice/game_system/GardenOrder_Korean.rb +839 -0
- data/lib/bcdice/game_system/HatsuneMiku.rb +51 -605
- data/lib/bcdice/game_system/HatsuneMiku_Korean.rb +56 -0
- data/lib/bcdice/game_system/HunterTheReckoning5th.rb +15 -11
- data/lib/bcdice/game_system/Irisbane.rb +17 -30
- data/lib/bcdice/game_system/Irisbane_Korean.rb +52 -0
- data/lib/bcdice/game_system/JuinKansen.rb +41 -208
- data/lib/bcdice/game_system/JuinKansen_Korean.rb +8 -213
- data/lib/bcdice/game_system/KemonoNoMori.rb +67 -276
- data/lib/bcdice/game_system/KemonoNoMori_Korean.rb +62 -0
- data/lib/bcdice/game_system/KinAriel.rb +117 -0
- data/lib/bcdice/game_system/KizunaBullet_Korean.rb +109 -0
- data/lib/bcdice/game_system/KutuluRevised.rb +94 -0
- data/lib/bcdice/game_system/LiverLabyrinth.rb +321 -0
- data/lib/bcdice/game_system/Lost.rb +89 -0
- data/lib/bcdice/game_system/MagicPunk.rb +85 -0
- data/lib/bcdice/game_system/MagicPunk_Korean.rb +39 -0
- data/lib/bcdice/game_system/MarvelHeroicRoleplaying.rb +144 -0
- data/lib/bcdice/game_system/MetallicGuardian_Korean.rb +28 -0
- data/lib/bcdice/game_system/MorkBorg.rb +170 -0
- data/lib/bcdice/game_system/MorkBorg_Korean.rb +49 -0
- data/lib/bcdice/game_system/NanimonaiMura.rb +112 -0
- data/lib/bcdice/game_system/Nechronica_Korean.rb +6 -6
- data/lib/bcdice/game_system/NegikureNegimaki.rb +140 -0
- data/lib/bcdice/game_system/NegikureNegimaki_Korean.rb +48 -0
- data/lib/bcdice/game_system/NeonUnderRealm.rb +122 -0
- data/lib/bcdice/game_system/NinjaSlayer2.rb +170 -49
- data/lib/bcdice/game_system/Nuekagami.rb +19 -261
- data/lib/bcdice/game_system/Nuekagami_Korean.rb +43 -0
- data/lib/bcdice/game_system/ParanoiaPerfect.rb +74 -0
- data/lib/bcdice/game_system/PastFutureParadox.rb +2245 -55
- data/lib/bcdice/game_system/PreciousDays.rb +170 -0
- data/lib/bcdice/game_system/Revulture.rb +8 -5
- data/lib/bcdice/game_system/Revulture_Korean.rb +7 -81
- data/lib/bcdice/game_system/Ryutama.rb +46 -46
- data/lib/bcdice/game_system/SRS.rb +4 -4
- data/lib/bcdice/game_system/SRS_Korean.rb +67 -0
- data/lib/bcdice/game_system/ShinobiGami.rb +154 -1047
- data/lib/bcdice/game_system/ShinobiGami_Korean.rb +102 -0
- data/lib/bcdice/game_system/StarryDolls.rb +70 -508
- data/lib/bcdice/game_system/StarryDolls_Korean.rb +80 -0
- data/lib/bcdice/game_system/StratoShout.rb +1 -1
- data/lib/bcdice/game_system/SwordWorld.rb +28 -2
- data/lib/bcdice/game_system/SwordWorld2_0.rb +1 -1
- data/lib/bcdice/game_system/SwordWorld2_5.rb +67 -3
- data/lib/bcdice/game_system/TacticalExorcist.rb +222 -0
- data/lib/bcdice/game_system/TenkaRyouran_Korean.rb +30 -0
- data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +38 -33
- data/lib/bcdice/game_system/Ventangle.rb +8 -7
- data/lib/bcdice/game_system/Ventangle_Korean.rb +6 -95
- data/lib/bcdice/game_system/Warhammer4.rb +202 -6
- data/lib/bcdice/game_system/WerewolfTheApocalypse5th.rb +20 -15
- data/lib/bcdice/game_system/WorldEndScrapyard.rb +333 -0
- data/lib/bcdice/game_system/WorldsEndFrontline_Korean.rb +26 -0
- data/lib/bcdice/game_system/YearZeroEngine.rb +7 -7
- data/lib/bcdice/game_system/YearZeroEngine_Korean.rb +46 -0
- data/lib/bcdice/game_system/ZombiLine.rb +29 -36
- data/lib/bcdice/game_system/ZombiLine_Korean.rb +37 -0
- data/lib/bcdice/game_system/cthulhu7th_Korean/full_auto.rb +294 -0
- data/lib/bcdice/game_system/cthulhu7th_Korean/rollable.rb +43 -0
- data/lib/bcdice/game_system/sword_world/rating_options.rb +9 -0
- data/lib/bcdice/game_system/sword_world/rating_parsed.rb +19 -0
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +229 -149
- data/lib/bcdice/game_system/sword_world/transcendent_test.rb +1 -0
- data/lib/bcdice/game_system.rb +42 -0
- data/lib/bcdice/version.rb +1 -1
- metadata +87 -2
|
@@ -7,7 +7,7 @@ module BCDice
|
|
|
7
7
|
ID = 'VampireTheMasquerade5th'
|
|
8
8
|
|
|
9
9
|
# ゲームシステム名
|
|
10
|
-
NAME = '
|
|
10
|
+
NAME = 'ヴァンパイア:ザ・マスカレード第5版'
|
|
11
11
|
|
|
12
12
|
# ゲームシステム名の読みがな
|
|
13
13
|
SORT_KEY = 'うあんはいあさますかれえと5'
|
|
@@ -15,32 +15,32 @@ module BCDice
|
|
|
15
15
|
# ダイスボットの使い方
|
|
16
16
|
HELP_MESSAGE = <<~MESSAGETEXT
|
|
17
17
|
・判定コマンド(nVMFx+x または nVMIxHx)
|
|
18
|
-
VMF
|
|
19
|
-
VMI
|
|
18
|
+
VMFコマンドはハンガーダイスとダイスプールを個別に指定する。
|
|
19
|
+
VMIコマンドはハンガーダイスをダイスプールの内数として指定する。
|
|
20
20
|
|
|
21
|
-
例:難易度2、9
|
|
21
|
+
例:難易度2、9ダイスプールでハンガーダイス3個の場合、それぞれ以下のようなコマンドとなる。
|
|
22
22
|
2VMF6+3
|
|
23
23
|
2VMI9H3
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
例) (難易度)VMF(通常ダイス)+(
|
|
25
|
+
難易度指定:達成数のカウント、判定成功と失敗、クリティカル処理、クリティカル成功、完全失敗のチェックを行う
|
|
26
|
+
(ハンガーダイスがある場合)凄惨なるクリティカルと獣の過ちチェックを行う
|
|
27
|
+
例) (難易度)VMF(通常ダイス)+(ハンガーダイス)
|
|
28
28
|
(難易度)VMF(通常ダイス)
|
|
29
|
-
(難易度)VMI(通常ダイス)H(
|
|
29
|
+
(難易度)VMI(通常ダイス)H(ハンガーダイス)
|
|
30
30
|
(難易度)VMI(通常ダイス)
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
例) VMF(通常ダイス)+(
|
|
32
|
+
難易度省略:達成数のカウント、判定失敗、クリティカル処理、完全失敗、(ハンガーダイスがある場合)獣の過ちチェックを行う
|
|
33
|
+
判定成功、凄惨なるクリティカルのチェックを行わない
|
|
34
|
+
クリティカル成功、(ハンガーダイスがある場合)獣の過ち、凄惨なるクリティカルのヒントを出力
|
|
35
|
+
例) VMF(通常ダイス)+(ハンガーダイス)
|
|
36
36
|
VMF(通常ダイス)
|
|
37
|
-
VMI(通常ダイス)H(
|
|
37
|
+
VMI(通常ダイス)H(ハンガーダイス)
|
|
38
38
|
VMI(通常ダイス)
|
|
39
39
|
|
|
40
|
-
難易度0
|
|
41
|
-
例) 0VMF(通常ダイス)+(
|
|
40
|
+
難易度0指定:クリティカル処理と達成数のカウントを行い、全てのチェックを行わない
|
|
41
|
+
例) 0VMF(通常ダイス)+(ハンガーダイス)
|
|
42
42
|
0VMF(通常ダイス)
|
|
43
|
-
0VMI(通常ダイス)+(
|
|
43
|
+
0VMI(通常ダイス)+(ハンガーダイス)
|
|
44
44
|
0VMI(通常ダイス)
|
|
45
45
|
|
|
46
46
|
MESSAGETEXT
|
|
@@ -58,17 +58,14 @@ module BCDice
|
|
|
58
58
|
register_prefix('\d*(VMF|(VMI\d*(H\d?)?))')
|
|
59
59
|
|
|
60
60
|
def eval_game_system_specific_command(command)
|
|
61
|
-
m = /\A(\d+)?(((VMF)(
|
|
61
|
+
m = /\A(\d+)?(((VMF)(-?\d+)(\+(\d+))?)|((VMI)(-?\d+)(H(\d+))?))$/.match(command)
|
|
62
62
|
unless m
|
|
63
63
|
return ''
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
dice_pool, hunger_dice_pool = get_dice_pools(m)
|
|
67
|
-
if dice_pool < 0
|
|
68
|
-
return "ダイスプール0のときにHungerダイスは指定できません。"
|
|
69
|
-
end
|
|
70
67
|
if hunger_dice_pool > 5
|
|
71
|
-
return "
|
|
68
|
+
return "ハンガーダイス指定は5ダイスが最大です。"
|
|
72
69
|
end
|
|
73
70
|
|
|
74
71
|
dice_text, success_dice, ten_dice, = make_dice_roll(dice_pool)
|
|
@@ -102,9 +99,13 @@ module BCDice
|
|
|
102
99
|
# Hunger Diceを内数処理するの場合
|
|
103
100
|
hunger_dice_pool = m[HUNGER_DICE_INCLUDED_INDEX].nil? ? -1 : m[HUNGER_DICE_INCLUDED_INDEX].to_i
|
|
104
101
|
dice_pool_value = m[DICE_POOL_HUNGER_DICE_INCLUDED_INDEX].to_i
|
|
102
|
+
if dice_pool_value <= 0
|
|
103
|
+
# ダイスプールが0のとき、最低保証ダイスプールであるダイスプール1にする
|
|
104
|
+
dice_pool_value = 1
|
|
105
|
+
end
|
|
105
106
|
dice_pool = dice_pool_value - (hunger_dice_pool < 0 ? 0 : hunger_dice_pool)
|
|
106
107
|
if dice_pool_value > 0 && hunger_dice_pool >= dice_pool_value
|
|
107
|
-
# 1
|
|
108
|
+
# 1 以上のダイスプール、かつ、ハンガーダイスがダイスプール以上のとき、ダイスプールが全てハンガーダイスになる。
|
|
108
109
|
dice_pool = 0
|
|
109
110
|
hunger_dice_pool = dice_pool_value
|
|
110
111
|
end
|
|
@@ -112,33 +113,37 @@ module BCDice
|
|
|
112
113
|
# Hunger DiceがPLによる内数指定の場合
|
|
113
114
|
hunger_dice_pool = m[HUNGER_DICE_NO_INCLUDED_INDEX].nil? ? -1 : m[HUNGER_DICE_NO_INCLUDED_INDEX].to_i
|
|
114
115
|
dice_pool = m[DICE_POOL_HUNGER_DICE_NO_INCLUDED_INDEX].to_i
|
|
116
|
+
if dice_pool <= 0 && hunger_dice_pool <= 0
|
|
117
|
+
# ダイスプールとハンガーダイスどちらも0指定のとき、最低保証ダイスプールである1ダイスプールにする
|
|
118
|
+
dice_pool = 1
|
|
119
|
+
end
|
|
115
120
|
end
|
|
116
121
|
return dice_pool, hunger_dice_pool
|
|
117
122
|
end
|
|
118
123
|
|
|
119
124
|
def get_roll_result(result_text, success_dice, ten_dice, hunger_ten_dice, hunger_botch_dice, difficulty)
|
|
120
|
-
result_text = "#{result_text}
|
|
125
|
+
result_text = "#{result_text} 達成数=#{success_dice}"
|
|
121
126
|
is_critical = ten_dice >= 2
|
|
122
127
|
|
|
123
128
|
if difficulty > 0
|
|
124
129
|
result_text = "#{result_text} 難易度=#{difficulty}"
|
|
125
130
|
|
|
126
131
|
if success_dice >= difficulty
|
|
127
|
-
result_text = "#{result_text}
|
|
132
|
+
result_text = "#{result_text} 上回り=#{success_dice - difficulty}"
|
|
128
133
|
|
|
129
134
|
if hunger_ten_dice > 0 && is_critical
|
|
130
|
-
return Result.critical("#{result_text}:判定成功! [Messy Critical]")
|
|
135
|
+
return Result.critical("#{result_text}:判定成功! [凄惨なるクリティカル/Messy Critical]")
|
|
131
136
|
elsif is_critical
|
|
132
|
-
return Result.critical("#{result_text}:判定成功! [Critical Win]")
|
|
137
|
+
return Result.critical("#{result_text}:判定成功! [クリティカル成功/Critical Win]")
|
|
133
138
|
end
|
|
134
139
|
|
|
135
140
|
return Result.success("#{result_text}:判定成功!")
|
|
136
141
|
else
|
|
137
142
|
if hunger_botch_dice > 0
|
|
138
|
-
return Result.fumble("#{result_text}:判定失敗! [Bestial Failure]")
|
|
143
|
+
return Result.fumble("#{result_text}:判定失敗! [獣の過ち/Bestial Failure]")
|
|
139
144
|
end
|
|
140
145
|
if success_dice == 0
|
|
141
|
-
return Result.fumble("#{result_text}:判定失敗! [Total Failure]")
|
|
146
|
+
return Result.fumble("#{result_text}:判定失敗! [完全失敗/Total Failure]")
|
|
142
147
|
end
|
|
143
148
|
|
|
144
149
|
return Result.failure("#{result_text}:判定失敗!")
|
|
@@ -146,18 +151,18 @@ module BCDice
|
|
|
146
151
|
elsif difficulty < 0
|
|
147
152
|
if success_dice == 0
|
|
148
153
|
if hunger_botch_dice > 0
|
|
149
|
-
return Result.fumble("#{result_text}:判定失敗! [Bestial Failure]")
|
|
154
|
+
return Result.fumble("#{result_text}:判定失敗! [獣の過ち/Bestial Failure]")
|
|
150
155
|
end
|
|
151
156
|
|
|
152
|
-
return Result.fumble("#{result_text}:判定失敗! [Total Failure]")
|
|
157
|
+
return Result.fumble("#{result_text}:判定失敗! [完全失敗/Total Failure]")
|
|
153
158
|
else
|
|
154
159
|
if hunger_botch_dice > 0
|
|
155
|
-
result_text = "#{result_text}\n 判定失敗なら [Bestial Failure]"
|
|
160
|
+
result_text = "#{result_text}\n 判定失敗なら [獣の過ち/Bestial Failure]"
|
|
156
161
|
end
|
|
157
162
|
if hunger_ten_dice > 0 && is_critical
|
|
158
|
-
result_text = "#{result_text}\n 判定成功なら [Messy Critical]"
|
|
163
|
+
result_text = "#{result_text}\n 判定成功なら [凄惨なるクリティカル/Messy Critical]"
|
|
159
164
|
elsif is_critical
|
|
160
|
-
result_text = "#{result_text}\n 判定成功なら [Critical Win]"
|
|
165
|
+
result_text = "#{result_text}\n 判定成功なら [クリティカル成功/Critical Win]"
|
|
161
166
|
end
|
|
162
167
|
return result_text.to_s
|
|
163
168
|
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'bcdice/base'
|
|
4
|
+
require "bcdice/format"
|
|
4
5
|
|
|
5
6
|
module BCDice
|
|
6
7
|
module GameSystem
|
|
@@ -88,9 +89,9 @@ module BCDice
|
|
|
88
89
|
"#{dice_total}#{Format.modifier(cmd.modify_number)}"
|
|
89
90
|
end
|
|
90
91
|
|
|
91
|
-
|
|
92
|
+
gap_bonus_str =
|
|
92
93
|
if cmd.target_number && cmd.dollar && result.success? && (gap = total - cmd.target_number) >= cmd.dollar
|
|
93
|
-
"
|
|
94
|
+
translate("Ventangle.level_gap", gap: gap)
|
|
94
95
|
end
|
|
95
96
|
|
|
96
97
|
sequence = [
|
|
@@ -100,7 +101,7 @@ module BCDice
|
|
|
100
101
|
modifier_str,
|
|
101
102
|
total.to_s,
|
|
102
103
|
result.text,
|
|
103
|
-
|
|
104
|
+
gap_bonus_str,
|
|
104
105
|
].compact
|
|
105
106
|
|
|
106
107
|
result.text = sequence.join(" > ")
|
|
@@ -113,16 +114,16 @@ module BCDice
|
|
|
113
114
|
fumble = cmd.fumble || DEFAULT_FUMBLE_VALUE
|
|
114
115
|
|
|
115
116
|
if dice_total <= fumble
|
|
116
|
-
return Result.fumble(
|
|
117
|
+
return Result.fumble(translate("fumble"))
|
|
117
118
|
elsif dice_total >= special
|
|
118
|
-
return Result.critical(
|
|
119
|
+
return Result.critical(translate("Ventangle.special"))
|
|
119
120
|
end
|
|
120
121
|
|
|
121
122
|
if cmd.target_number
|
|
122
123
|
if total.send(cmd.cmp_op, cmd.target_number)
|
|
123
|
-
return Result.success(
|
|
124
|
+
return Result.success(translate("success"))
|
|
124
125
|
else
|
|
125
|
-
return Result.failure(
|
|
126
|
+
return Result.failure(translate("failure"))
|
|
126
127
|
end
|
|
127
128
|
else
|
|
128
129
|
return Result.new(nil)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'bcdice/
|
|
3
|
+
require 'bcdice/game_system/Ventangle'
|
|
4
4
|
|
|
5
5
|
module BCDice
|
|
6
6
|
module GameSystem
|
|
@@ -20,7 +20,7 @@ module BCDice
|
|
|
20
20
|
|
|
21
21
|
예시:
|
|
22
22
|
VT 기본 스페셜치, 펌블치로 판정
|
|
23
|
-
VT@10#3 스페셜치 10
|
|
23
|
+
VT@10#3 스페셜치 10, 펌블치 3으로 판정
|
|
24
24
|
VT3@10#3 어드밴티지 1점을 사용해 스페셜치 10, 펌블치 3 판정을 주사위 3개로 판정
|
|
25
25
|
|
|
26
26
|
VT>=5 기본 스페셜치, 펌블치로 목표치 5 판정
|
|
@@ -30,100 +30,11 @@ module BCDice
|
|
|
30
30
|
VT3@10#3$4>=5 어드밴티지 1점을 사용해 스페셜치 10, 펌블치 3, 목표치 5 판정을 주사위 3개로 판정. 이때 달성치가 목표치보다 4이상 큰 경우, 갭 보너스를 표시
|
|
31
31
|
MESSAGETEXT
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
DEFAULT_SPECIAL_VALUE = 12
|
|
35
|
-
# 既定のファンブル値
|
|
36
|
-
DEFAULT_FUMBLE_VALUE = 2
|
|
37
|
-
# 規定のダイス個数
|
|
38
|
-
DEFAULT_DICE_NUM = 2
|
|
33
|
+
register_prefix_from_super_class()
|
|
39
34
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
def eval_game_system_specific_command(command)
|
|
44
|
-
debug("eval_game_system_specific_command Begin")
|
|
45
|
-
|
|
46
|
-
parser = Command::Parser.new('VT', round_type: round_type)
|
|
47
|
-
.enable_critical
|
|
48
|
-
.enable_fumble
|
|
49
|
-
.enable_dollar
|
|
50
|
-
.enable_suffix_number
|
|
51
|
-
.restrict_cmp_op_to(nil, :>=)
|
|
52
|
-
cmd = parser.parse(command)
|
|
53
|
-
|
|
54
|
-
unless cmd
|
|
55
|
-
return nil
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
dice_num = cmd.suffix_number || DEFAULT_DICE_NUM
|
|
59
|
-
if dice_num < DEFAULT_DICE_NUM
|
|
60
|
-
return nil
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
dice_list = @randomizer.roll_barabara(dice_num, 6)
|
|
64
|
-
if dice_num > 2
|
|
65
|
-
# 出目の順序を保存して上位2つの出目を取得
|
|
66
|
-
j = 0 # 安定ソートのために利用 cf. https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/sort_by.html
|
|
67
|
-
using_list = dice_list.map.with_index { |x, i| {index: i, value: x} }
|
|
68
|
-
.sort_by { |x| [x[:value], j += 1] }.reverse.take(2)
|
|
69
|
-
.sort_by { |x| x[:index] }.map { |x| x[:value] }
|
|
70
|
-
else
|
|
71
|
-
using_list = dice_list
|
|
72
|
-
end
|
|
73
|
-
dice_total = using_list.sum
|
|
74
|
-
total = dice_total + cmd.modify_number
|
|
75
|
-
|
|
76
|
-
result = compare(dice_total, total, cmd)
|
|
77
|
-
|
|
78
|
-
advantage_str =
|
|
79
|
-
if dice_num > 2
|
|
80
|
-
using_list.to_s
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
modifier_str =
|
|
84
|
-
if cmd.modify_number > 0
|
|
85
|
-
"#{dice_total}#{Format.modifier(cmd.modify_number)}"
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
level_gap_str =
|
|
89
|
-
if cmd.target_number && cmd.dollar && result.success? && (gap = total - cmd.target_number) >= cmd.dollar
|
|
90
|
-
"갭 보너스(#{gap})"
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
sequence = [
|
|
94
|
-
cmd.to_s,
|
|
95
|
-
dice_list.to_s,
|
|
96
|
-
advantage_str,
|
|
97
|
-
modifier_str,
|
|
98
|
-
total.to_s,
|
|
99
|
-
result.text,
|
|
100
|
-
level_gap_str,
|
|
101
|
-
].compact
|
|
102
|
-
|
|
103
|
-
result.text = sequence.join(" > ")
|
|
104
|
-
|
|
105
|
-
return result
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
def compare(dice_total, total, cmd)
|
|
109
|
-
special = cmd.critical || DEFAULT_SPECIAL_VALUE
|
|
110
|
-
fumble = cmd.fumble || DEFAULT_FUMBLE_VALUE
|
|
111
|
-
|
|
112
|
-
if dice_total <= fumble
|
|
113
|
-
return Result.fumble('펌블')
|
|
114
|
-
elsif dice_total >= special
|
|
115
|
-
return Result.critical('스페셜')
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
if cmd.target_number
|
|
119
|
-
if total.send(cmd.cmp_op, cmd.target_number)
|
|
120
|
-
return Result.success('성공')
|
|
121
|
-
else
|
|
122
|
-
return Result.failure('실패')
|
|
123
|
-
end
|
|
124
|
-
else
|
|
125
|
-
return Result.new(nil)
|
|
126
|
-
end
|
|
35
|
+
def initialize(command)
|
|
36
|
+
super(command)
|
|
37
|
+
@locale = :ko_kr
|
|
127
38
|
end
|
|
128
39
|
end
|
|
129
40
|
end
|
|
@@ -20,6 +20,12 @@ module BCDice
|
|
|
20
20
|
頑健ボーナスフラグは頑健ボーナス以下のダメージの時にUをつけます。
|
|
21
21
|
例)whctH whctAU WHCTL
|
|
22
22
|
|
|
23
|
+
■ 『武器を掲げよ!』版クリティカル表 (bkctH, bkctA, bkctB, bkctL, bkctHx, bkctAx, bkctBx, bkctLx)
|
|
24
|
+
"BK部位 超過ダメージ"の形で指定します。
|
|
25
|
+
部位は「H(頭部)」「A(腕)」「B(胴体)」「L(足)」の4カ所です。
|
|
26
|
+
超過ダメージは耐久値を0にして余剰ダメージがある場合の値を入力します(省略可)。
|
|
27
|
+
例)bkctH bkctA4 BKCTL
|
|
28
|
+
|
|
23
29
|
■ 命中部位表 (WHLT)
|
|
24
30
|
命中部位をランダムに決定します。(クリティカル用)
|
|
25
31
|
|
|
@@ -33,9 +39,11 @@ module BCDice
|
|
|
33
39
|
|
|
34
40
|
■ 小誤発動表 (WHMIT)
|
|
35
41
|
小誤発動表をロールして、結果を表示します。
|
|
42
|
+
※Winds of Magic版(WOMMIT)
|
|
36
43
|
|
|
37
44
|
■ 大誤発動表 (WHMAT)
|
|
38
45
|
大誤発動表をロールして、結果を表示します。
|
|
46
|
+
※Winds of Magic版(WOMMAT)
|
|
39
47
|
|
|
40
48
|
■ 命中判定 (WHx)
|
|
41
49
|
"WH(命中値)"の形で指定します。
|
|
@@ -43,7 +51,7 @@ module BCDice
|
|
|
43
51
|
例)wh60 wh(43-20)
|
|
44
52
|
INFO_MESSAGE_TEXT
|
|
45
53
|
|
|
46
|
-
register_prefix('WH')
|
|
54
|
+
register_prefix('WH', 'WOM', 'BK')
|
|
47
55
|
|
|
48
56
|
def initialize(command)
|
|
49
57
|
super(command)
|
|
@@ -130,14 +138,29 @@ module BCDice
|
|
|
130
138
|
# クリティカル表
|
|
131
139
|
def roll_critical_table(command)
|
|
132
140
|
m = /^WHCT([HABTL])(U)?$/.match(command)
|
|
133
|
-
|
|
141
|
+
n = /^BKCT([HABTL])(\d*)?$/.match(command)
|
|
142
|
+
return nil unless m || n
|
|
134
143
|
|
|
135
|
-
|
|
136
|
-
|
|
144
|
+
case command
|
|
145
|
+
when /^WHCT([HABTL])(U)?$/
|
|
146
|
+
part = m[1]
|
|
147
|
+
part = "B" if part == "T"
|
|
137
148
|
|
|
138
|
-
|
|
149
|
+
under_ganken_bonus = !m[2].nil?
|
|
139
150
|
|
|
140
|
-
|
|
151
|
+
CRITICAL_TABLES[part].roll(@randomizer, under_ganken_bonus)
|
|
152
|
+
when /^BKCT([HABTL])(\d*)?$/
|
|
153
|
+
part = n[1]
|
|
154
|
+
part = "B" if part == "T"
|
|
155
|
+
|
|
156
|
+
if n[2].nil?
|
|
157
|
+
over_damage = 0
|
|
158
|
+
else
|
|
159
|
+
over_damage = n[2].to_i
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
CRITICAL_TABLES_UIA[part].roll(@randomizer, over_damage)
|
|
163
|
+
end
|
|
141
164
|
end
|
|
142
165
|
|
|
143
166
|
class CriticalTable
|
|
@@ -261,6 +284,127 @@ module BCDice
|
|
|
261
284
|
),
|
|
262
285
|
}.freeze
|
|
263
286
|
|
|
287
|
+
class CriticalTable_UIA
|
|
288
|
+
def initialize(name, items)
|
|
289
|
+
@name = name
|
|
290
|
+
@items = items
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
def roll(randomizer, over_damage)
|
|
294
|
+
dice = randomizer.roll_once(100)
|
|
295
|
+
if over_damage
|
|
296
|
+
dice = (dice + (over_damage * 10)).clamp(1, 1000)
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
chosen = @items.find { |key, _| key >= dice }[1]
|
|
300
|
+
|
|
301
|
+
"#{@name}(#{dice}) > #{chosen}"
|
|
302
|
+
end
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
CRITICAL_TABLES_UIA = {
|
|
306
|
+
"H" => CriticalTable_UIA.new(
|
|
307
|
+
"頭部CT表(武器を掲げよ)",
|
|
308
|
+
[
|
|
309
|
+
[3, '勲章となる傷:浅手:「出血状態」1つを得る。社交系テストSL+1(累積なし)。'],
|
|
310
|
+
[6, '朦朧化打撃:耐久値-1:「朦朧状態」1つを得る。'],
|
|
311
|
+
[9, '眼窩の負傷:耐久値-1:「目がくらんだ状態」1つを得る。'],
|
|
312
|
+
[15, '耳朶への強打:耐久値-1:「耳鳴り状態」1つを得る。'],
|
|
313
|
+
[20, '小さな裂傷:耐久値-1:「出血状態」1つを得る。'],
|
|
314
|
+
[25, '眼の周りの青あざ:耐久値-2:「目がくらんだ状態」2つを得る。'],
|
|
315
|
+
[30, '耳朶の裂傷:耐久値-2:「出血状態」2つに加えて、「耳鳴り状態」1つを得る。'],
|
|
316
|
+
[35, '額への一打:耐久値-2:「出血状態」2つに加えて「目がくらんだ状態」1つを得る。なお後者は「出血状態」を取り除いた後でなければ取り除けない。'],
|
|
317
|
+
[40, '顎骨折:耐久値-2:「朦朧状態」2つを得る。さらに「骨折(軽度)」の負傷を得る。'],
|
|
318
|
+
[45, '眼窩の大怪我:耐久値-3:「出血状態」2つを得る。さらに「目がくらんだ状態」1つも得て、こちらは「治療行為」を受けない限り回復できない。'],
|
|
319
|
+
[50, '耳朶の大怪我:耐久値-3:片耳の聴力を失う。聴覚に関するテストに-20。この効果をもう一度受けた場合、永続的な聴覚喪失者となる。これは魔法でしか治療できない。'],
|
|
320
|
+
[55, '鼻砕き:耐久値-3:「出血状態」2つを得る。「手強い(+0)」〈肉体抵抗〉テストを行い、失敗したら「朦朧状態」1つも得る。社交系テストに+1/-1。'],
|
|
321
|
+
[60, '顎粉砕:耐久値-3:「朦朧状態」3つを得る。「手強い(+0)」〈肉体抵抗〉テストを行い、失敗したら「気絶状態」を得る。「骨折(重度)」の負傷を得る。'],
|
|
322
|
+
[65, '耳が屑肉に:耐久値-4:「耳鳴り状態」3つに加えて「出血状態」2つを得る。片耳の機能を失う。「身体欠損(普通)」を被る。'],
|
|
323
|
+
[75, '口粉砕:耐久値-4:「出血状態」2つを得る。1d10本の歯が失われる。「身体欠損(容易)」を被る。'],
|
|
324
|
+
[80, '脳震盪:耐久値-4:「出血状態」2つと「耳鳴り状態」1つに加えて1d10の「朦朧状態」を得る。さらに1d10日間継続する「疲労状態」1つも得る。この「疲労状態」継続中に頭部への「致命的負傷」を再度得たなら、「普通(+20)」の〈肉体抵抗〉テストを行い、失敗したなら追加で「気絶状態」になる。'],
|
|
325
|
+
[85, '眼球破裂:耐久値-5:「目がくらんだ状態」3つと、「出血状態」2つ、「朦朧状態」1つを得る。片目の機能を失う。「身体欠損(難しい)」を被る。'],
|
|
326
|
+
[94, '顔が化け物のように:耐久値-5:「出血状態」3つ「目がくらんだ状態」3つ、「朦朧状態」2つを得る。片目の機能を失い、鼻梁も失う。「身体欠損(多難)」を被る。'],
|
|
327
|
+
[99, '顎が屑肉に:耐久値-5:「出血状態」4つと「朦朧状態」3つを得る。「超多難(-30)」な〈肉体抵抗〉テストを行い、失敗したら「気絶状態」になる。「骨折(重度)」の負傷を得て、舌と1d10本の歯を失う。「身体欠損(多難)」を被る。'],
|
|
328
|
+
[1000, '頭蓋骨粉砕:即死:'],
|
|
329
|
+
]
|
|
330
|
+
),
|
|
331
|
+
"A" => CriticalTable_UIA.new(
|
|
332
|
+
"腕部CT表(武器を掲げよ)",
|
|
333
|
+
[
|
|
334
|
+
[10, '手首が揺さぶられる:浅手:手に持っているものを落としてしまう。'],
|
|
335
|
+
[20, '腕痺れ:浅手:手に持っているものを落としてしまう。その腕は1d10-【頑健力】ボーナスのラウンド(最低1)に渡り使えない。その期間中、その手は失われたものとして扱う。'],
|
|
336
|
+
[25, '小さな裂傷:耐久値-1:「出血状態」1つを得る。'],
|
|
337
|
+
[40, '捻挫:耐久値-1:「筋断裂(軽度)」の負傷を得る。'],
|
|
338
|
+
[45, '筋断裂:耐久値-1:「出血状態」1つと、「筋断裂(軽度)」の負傷を得る。'],
|
|
339
|
+
[50, '手の出血:耐久値-1:「出血状態」1つを得る。その手で何かを握る「アクション」を行う場合、先立って「普通(+20)」の【器用度】テストを行い、失敗したら取り落としてしまう。'],
|
|
340
|
+
[55, '肩の捻挫:耐久値-2:手に持っているものを落としてしまい、その腕は1d10ラウンドに渡って使えなくなる。'],
|
|
341
|
+
[60, '大きな傷口:耐久値-2:「出血状態」2つを得る。傷口を縫う「手術」を受ける前に同じ腕にダメージを受けた場合、傷口が開き「出血状態」1つを追加で得る。'],
|
|
342
|
+
[75, '単純骨折:耐久値-2:手に持っているものを落としてしまい、「骨折(軽度)」の負傷を得る。「難しい(-10)」〈肉体抵抗〉テストを行い、失敗したなら「朦朧状態」1つを得る。'],
|
|
343
|
+
[80, '靱帯断裂:耐久値-2:手に持っているものを落としてしまい、「筋断裂(重度)」の負傷を得る。'],
|
|
344
|
+
[85, '深手:耐久値-3:「出血状態」2つを得る。「朦朧状態」1つを得て、「筋断裂(軽度)」の負傷を得る。「多難(-20)」な〈肉体抵抗〉テストを行い、失敗したなら「気絶状態」になる。'],
|
|
345
|
+
[90, '肘粉砕:耐久値-3:手に持っているものを落としてしまい、「筋断裂(重度)」の負傷を得る。'],
|
|
346
|
+
[95, '動脈破損:耐久値-3:「出血状態」4つを得る。「手術」を受ける前に同じ腕にダメージを受けるたびに「出血状態」2つを得る。'],
|
|
347
|
+
[109, '肩の脱臼:耐久値-4:「多難(-20)」な〈肉体抵抗〉テストを行い、失敗したなら「朦朧状態」1つを得て「伏せ状態」になる。手に持っているものを落としてしまう。その腕を使うことはできず、欠損したものとして扱う。さらに「治療行為」を受けるまでの間「朦朧状態」1つを得る。'],
|
|
348
|
+
[115, '指切断:耐久値-4:「身体欠損(普通)」を被る。「出血状態」1つを得る。'],
|
|
349
|
+
[120, '手の半切断:耐久値-4:指一本を失い、「身体欠損(多難)」を被る。「出血状態」2つと「朦朧状態」1つを得る。君が「治療行為」を受けるまでの以降の各ラウンドに指を一本ずつ失う。すべての指を失ったら、その手の機能を失い「身体欠損(難しい)」を得る。'],
|
|
350
|
+
[125, '力こぶがズタズタに:耐久値-5:手に持っていたものを落とすとともに「筋断裂(重度)」の負傷を得て、「出血状態」2つと「朦朧状態」1つを得る。'],
|
|
351
|
+
[130, '片手が屑肉同然に:耐久値-5:その手の機能を失い、「身体欠損(多難)」を被る。「出血状態」2つを得る。「多難(-20)」な〈肉体抵抗〉テストを行い、失敗したなら「気絶状態」になる。'],
|
|
352
|
+
[135, '靱帯断裂:耐久値-5:腕は無用の長物と化す―「身体欠損(超多難)」を被る。「出血状態」3つ、「朦朧状態」1つを得て、「伏せ状態」になる。「多難(-20)」な〈肉体抵抗〉テストを行い、失敗したなら「気絶状態」になる。'],
|
|
353
|
+
[1000, '残酷な腕の喪失:即死:'],
|
|
354
|
+
]
|
|
355
|
+
),
|
|
356
|
+
"B" => CriticalTable_UIA.new(
|
|
357
|
+
"胴体CT表(武器を掲げよ)",
|
|
358
|
+
[
|
|
359
|
+
[10, '息ができない:浅手:「朦朧状態」1つを得る。「普通(+20)」の〈肉体抵抗〉テストを行い、失敗したなら「伏せ状態」になる。また、1d10ラウンドに渡って「移動力」が半分になる。'],
|
|
360
|
+
[20, 'ただのかすり傷だって!:耐久値-1:「出血状態」1つを得る。'],
|
|
361
|
+
[25, 'みぞおちへの一打:耐久値-1:「朦朧状態」1つを得る。「容易(+40)」な〈肉体抵抗〉テストを行い、失敗したなら「伏せ状態」になる。'],
|
|
362
|
+
[30, '下腹部に直撃!:耐久値-1:「多難(-20)」な〈肉体抵抗〉テストを行い、失敗したなら「朦朧状態」3つを得る。'],
|
|
363
|
+
[35, '背中を捻じる:耐久値-1:「筋断裂(軽度)」の負傷を得る。'],
|
|
364
|
+
[40, '肋骨に青あざ:耐久値-2:1d10日間に渡って【敏捷力】に関連するテストに-10。'],
|
|
365
|
+
[45, '鎖骨捻じれ:耐久値-2:左右どちらの鎖骨かランダムに決定する。そちらの手に持っている物を落としてしまい、1d10ラウンドに渡ってその腕は使用できない。'],
|
|
366
|
+
[50, '裂傷:耐久値-2:「出血状態」2つを得る。'],
|
|
367
|
+
[55, '肋骨にひびが:耐久値-3:「朦朧状態」1つを得る。また、「骨折(軽度)」の負傷を得る。'],
|
|
368
|
+
[60, '大きな傷口:耐久値-3:「出血状態」3つを得る。「手術」を受けるまでの間、胴体に命中を受けるたびに追加で1つの「出血状態」を得る。'],
|
|
369
|
+
[65, '激痛を伴う裂傷:耐久値-3:「出血状態」2つと「朦朧状態」1つを得る。「多難(-20)」な〈肉体抵抗〉テストを行い、失敗したなら「気絶状態」になる。またSL+4以上でテストに成功していない限り、金切り声を上げてしまう。'],
|
|
370
|
+
[70, '動脈損傷:耐久値-3:「出血状態」4つを得る。「手術」を受けるまでの間、胴体に攻撃を受けるたびに追加で2つの「出血状態」を得る。'],
|
|
371
|
+
[75, '背筋断裂:耐久値-4:「筋断裂(重度)」の負傷を得る。'],
|
|
372
|
+
[80, '股関節骨折:耐久値-4:「朦朧状態」1つを得る。「手強い(+0)」〈肉体抵抗〉テストを行い、失敗したなら「伏せ状態」にもなる。「骨折(軽度)」の負傷を得る。'],
|
|
373
|
+
[85, '胸郭の大怪我:耐久値-4:「出血状態」4つを得る。「手術」を受けるまでの間、胴体に命中を受けるたびに追加で2つの「出血状態」を得る。'],
|
|
374
|
+
[90, '内臓の損傷:耐久値-4:「膿み傷」に罹患し、「出血状態」2つを得る。'],
|
|
375
|
+
[95, '胸郭粉砕:耐久値-5:「朦朧状態」1つを得る。これは「治療行為」を受けない限り取り除くことは出来ない。さらに「骨折(重度)」の負傷を得る。'],
|
|
376
|
+
[110, '鎖骨粉砕:耐久値-5:「気絶状態」になる。これは「治療行為」を受けない限り取り除くことは出来ない。さらに「骨折(重度)」の負傷を得る。'],
|
|
377
|
+
[115, '内臓出血:耐久値-5:「出血状態」1つを得る。これは「手術」を受けない限り取り除くことは出来ない。さらに「血液腐れ病」に罹患する。'],
|
|
378
|
+
[1000, '胴部両断:即死:'],
|
|
379
|
+
]
|
|
380
|
+
),
|
|
381
|
+
"L" => CriticalTable_UIA.new(
|
|
382
|
+
"脚部CT表(武器を掲げよ)",
|
|
383
|
+
[
|
|
384
|
+
[10, '爪先をぶつける:浅手:「普通(+20)」の〈肉体抵抗〉テストを行い、失敗したなら次のターンの終了時まで【敏捷力】に関するテストに-10。'],
|
|
385
|
+
[20, '足がかりを失う:浅手:「手強い(+0)」〈肉体抵抗〉テストを行い、失敗したなら「伏せ状態」になる。'],
|
|
386
|
+
[25, '足首の捻挫:耐久値-1:以降1d10ラウンドに渡って【敏捷力】に関連するテストに-10。'],
|
|
387
|
+
[40, '小さな裂傷:耐久値-1:「出血状態」1つを得る。'],
|
|
388
|
+
[45, '太腿への打撃:耐久値-1:「出血状態」1つを得て「普通(+20)」の〈肉体抵抗〉テストを行い、失敗したなら「伏せ状態」になる。'],
|
|
389
|
+
[50, '足首の筋断裂:耐久値-1:「筋断裂(軽度)」の負傷を得る。'],
|
|
390
|
+
[55, '膝の捻挫:耐久値-2:以降1d10ラウンドに渡って【敏捷力】に関連するテストに-20。'],
|
|
391
|
+
[60, '爪先のひどい裂傷:耐久値-2:「出血状態」1つを得る。「手強い(+0)」〈肉体抵抗〉テストを行い、失敗したなら片方の爪先を失う―「身体欠損(普通)」を被る。'],
|
|
392
|
+
[65, 'ひどい裂傷:耐久値-2:「出血状態」2つを得る。「手強い(+0)」〈肉体抵抗〉テストを行い、失敗したなら「伏せ状態」になる。'],
|
|
393
|
+
[70, '膝のひどい捻挫:耐久値-3:「筋断裂(重度)」の負傷を得る。'],
|
|
394
|
+
[80, '太腿への深手:耐久値-3:「出血状態」3つを得る。「手強い(+0)」〈肉体抵抗〉テストを行い、失敗したなら「伏せ状態」になる。「手術」を受けるまでの間、この脚に命中を受けるたびに、追加で1つの「出血状態」を得る。'],
|
|
395
|
+
[75, '脚への痛打:耐久値-3:「伏せ状態」に加えて「出血状態」2つを得て、「骨折(軽度)」の負傷を得る。さらに「多難(-20)」な〈肉体抵抗〉テストを行い、失敗したなら「朦朧状態」1つを追加で得る。'],
|
|
396
|
+
[85, '靱帯断裂:耐久値-3:「伏せ状態」に加えて「朦朧状態」1つを得る。「多難(-20)」な〈肉体抵抗〉テストを行い、失敗したなら「気絶状態」になる。君のその脚は使えなくなる。'],
|
|
397
|
+
[90, '脛への深手:耐久値-4:敵の武器が君の膝下に当たり、骨に食い込んで腱を切断する。「朦朧状態」1つを得て、「伏せ状態」になる。さらに「筋断裂(重度)」と「骨折(軽度)」の負傷を得る。'],
|
|
398
|
+
[95, '膝粉砕:耐久値-4:「出血状態」1つと「朦朧状態」1つを得ることに加えて、「伏せ状態」になる。「骨折(重度)」の負傷を得る。'],
|
|
399
|
+
[105, '膝関節脱臼:耐久値-4:「伏せ状態」になる。「多難(-20)」な〈肉体抵抗〉テストを行い、失敗したなら「朦朧状態」1つを得る。これは「治療行為」を受けない限り取り除くことができない。'],
|
|
400
|
+
[115, '脚粉砕:耐久値-4:「普通(+20)」の〈肉体抵抗〉テストを行い、失敗したなら「伏せ状態」を得て、足の指1本を失う。さら、SLが-1あるごとに追加で1つの足指を失う―「身体欠損(普通)」を被る。「出血状態」2つを得る。'],
|
|
401
|
+
[120, '足切断:耐久値-5:「身体欠損(多難)」を被る。「出血状態」3つと「朦朧状態」2つを得て「伏せ状態」になる。'],
|
|
402
|
+
[125, 'アキレス腱切断:耐久値-5:苦痛に金切り声を上げながら倒れる。「出血状態」2つと「朦朧状態」2つを得て「伏せ状態」になる。「身体欠損(超多難)」を被る。'],
|
|
403
|
+
[1000, '骨盤粉砕:即死:'],
|
|
404
|
+
]
|
|
405
|
+
),
|
|
406
|
+
}.freeze
|
|
407
|
+
|
|
264
408
|
# 命中判定
|
|
265
409
|
def roll_attack(command)
|
|
266
410
|
m = /^WH(\d+)$/.match(command)
|
|
@@ -449,6 +593,58 @@ module BCDice
|
|
|
449
593
|
[96..100, 'エーテルの逆流:君の【意志力】ボーナス×1ヤード以内にいるすべての者は──敵も味方も同様に──(【頑健力】ボーナスとアーマー・ポイント〔AP〕を無視して)1d10点の「耐久値」を失い、さらに「伏せ状態」になる。射程内に目標が存在しなければ、魔法は行き場を失い、君の頭は爆発し、君は即死する。'],
|
|
450
594
|
]
|
|
451
595
|
),
|
|
596
|
+
"WOMMIT" => DiceTable::RangeTable.new(
|
|
597
|
+
"小誤発動表(Winds of Magic)",
|
|
598
|
+
"1D100",
|
|
599
|
+
[
|
|
600
|
+
[1..5, '魔女の印:1マイル以内で次に新たに生まれたクリーチャー1体が混沌変異する。'],
|
|
601
|
+
[6..10, '酸っぱいミルク:1d100ヤード以内のすべてのミルクが即座に酸っぱくなる。'],
|
|
602
|
+
[11..15, '立ち枯れ:君の【意志力】ボーナス×1 マイル以内の農場が立ち枯れの病にかかり、すべての穀物が一夜のうちに腐れてしまう。'],
|
|
603
|
+
[16..20, '耳垢閉塞:君の耳が即座に分厚い耳垢で詰まってしまう。「耳鳴り状態」1つを得る。誰かが君に耳掃除してくれない限りこれを取り除くことはできない(〈治療〉技能を用いてテストに成功しなければならない)。'],
|
|
604
|
+
[21..25, '凍える吐息:君の周囲の気温が急降下し、人の吐息が白くなる。君から【意志力】ボーナス×1 マイル以内の者は全員手強い (+0) 〈肉体抵抗〉テストに成功しなければ急激な寒さにより、その場を離れない限り【射撃技術度】、【敏捷力】、【器用度】テストに–10の修正を受ける。この効果は1分間継続する。'],
|
|
605
|
+
[26..30, '結び目ほどき:君の「所持品」のあらゆる留め金が外れ、あらゆる紐の結び目がほどけてしまう。ベルトはずり落ち、ポーチは開き、バッグは落ち、鎧も外れてしまうのだ。'],
|
|
606
|
+
[31..35, '気まぐれな装い:君の衣服が自分の意志を持っているかのように振る舞う。「組み付かれた状態」1つを得る。これに抵抗するための【筋力】は1d10×5となる。'],
|
|
607
|
+
[36..40, '節制の呪い:1d100ヤード以内のすべての酒が苦くて臭いひどい味になる。オールド・ワールドの酒場の多くでなぜ呪文詠唱が好まれないのか、その理由の一助である。'],
|
|
608
|
+
[41..45, '鼻につく言葉:1d10ラウンドにわたって、すべての〈言語〉テスト(発動テストも含む)に-10のペナルティを被る。'],
|
|
609
|
+
[46..50, '困惑する:戦闘に参加しているなら、「不意を討たれた状態」になる。それ以外の場合、君は完全にびくついてしまい、心はあたふたとし、ほんの片時も集中することができなくなる。'],
|
|
610
|
+
[51..55, '不浄なる幻視:穢らわしく不浄な行為の幻視が浮かび上がり君を悩ませる。「目がくらんだ状態」1つを得る。「手強い」(+0)〈冷静さ〉テストを行ない、失敗したなら、さらに1つの同「状態」を得る。'],
|
|
611
|
+
[56..60, '魔女の目:君の目が1d10時間にわたって、自分の「魔法体系」に関連した不自然な色に変わる。目の色が変わっている間、君はいかなる手段でも取り除くことができない「目がくらんだ状態」1つを得る。君はこの期間、《魔法感知》と《第二の視覚》異能を使用できなくなる。'],
|
|
612
|
+
[61..65, '破裂:君の鼻、目、耳からおびただしく出血する。1d10個の「出血状態」を得る。'],
|
|
613
|
+
[66..70, '地獄の囁き:GMは印表(p.45)から反転の印を二つ選んでもよい。「普通」(+20)の【意志力】テストを行ない、失敗したなら「堕落ポイント」1点を得る。'],
|
|
614
|
+
[71..75, '恐怖!:君は混沌の領域を忌まわしき瞬く間にいくつも幻視し、それに苛まれる。GMは反転の印を「印表」(p.45)から1つ選んでもよい。「多難」(-20)な〈冷静さ〉テストを行ない、失敗したなら「戦意喪失状態」1つを得る。'],
|
|
615
|
+
[76..80, '堕落の呪い:「堕落ポイント」1点を得る。'],
|
|
616
|
+
[81..85, '腸内大暴動:君はお腹の不調を抑えきれず、粗相してしまう。「疲労状態」1つを得るが、これは君が衣服を取り替え、身体を綺麗にするまで取り除くことができない。'],
|
|
617
|
+
[86..90, '魔法の刻印:君は自身が扱う魔力の風の物理的な印を具現する。ハイシュの印ならp.58、シャモンの印ならp.70、グューランの印ならp.82、アズィルの印ならp.94、ウルグの印ならp.106、シャイシュの印ならp.118、アキュシーの印ならp.130、ガウルの印ならp.142を参照せよ。魔法印表のいずれも君の魔法的な背景に合わないか、すでに具現した印を得るなら、『大誤発動表』でもう一度ロールすること。'],
|
|
618
|
+
[91..95, '倍増する不幸:この表を2回ロールする。91〜100が出た場合には再ロールをすること。'],
|
|
619
|
+
[96..100, 'ほとばしる混沌:『大誤発動表』でもう一度ロールすること。'],
|
|
620
|
+
]
|
|
621
|
+
),
|
|
622
|
+
"WOMMAT" => DiceTable::RangeTable.new(
|
|
623
|
+
"大誤発動表(Winds of Magic)",
|
|
624
|
+
"1D100",
|
|
625
|
+
[
|
|
626
|
+
[1..5, '亡霊の声:【意志力】×1ヤード以内のすべての者が“混沌の領域”から現れた暗く誘惑的な囁き声を耳にする。知性のあるクリーチャーは皆、「普通」(+20)の〈冷静さ〉テストを行ない、失敗したなら、「堕落ポイント」1点を得る。'],
|
|
627
|
+
[6..10, 'エーテルの衝撃:君は、【頑健力】ボーナスとアーマー・ポイント〔AP〕による修正値を無視して、1d10点の「耐久値」を失う。さらに、「普通」(+20)の〈肉体抵抗〉テストを行ない、失敗したなら、「朦朧状態」1つも得る。'],
|
|
628
|
+
[11..15, '死の歩み:君の足跡はその行く手に死を残していく。次の1d10時間にわたって、君の周囲のあらゆる植物は枯れ死に果てる。'],
|
|
629
|
+
[16..20, '二重の災難:君が発動した呪文の効果は1d10マイル以内の他の場所で発生する。そこでどのような結果が起こるかはGMの裁定によるが、可能な限り影響があるべきだ。'],
|
|
630
|
+
[21..25, '魂の火:君は自分の「魔法体系」に関連した色の不浄な炎に取り巻かれ、「炎上状態」1つを得る。'],
|
|
631
|
+
[26..30, '抑えの効かぬ舌:君は1d10ラウンドにわたって、わけのわからないことを喋りまくる。この間、君は言葉による意思疏通ができず、あらゆる発動テストを行なうこともできないが、それ以外は通常通り行動してもよい。'],
|
|
632
|
+
[31..35, '群れの襲撃:君はエーテル体のラット、ジャイアント・スパイダー、スネーク、その他(GM の任意)の群れに囲まれる。関連するクリーチャー種別の通常プロフィールに「群れ」の「クリーチャー特徴」を加えて用いること。1d10ラウンドの終了後に、まだ倒されていなければその群れは撤退する。'],
|
|
633
|
+
[36..40, '布人形:君はランダムな方向に1d10ヤード空中に投げ飛ばされ、地面に落ちて1d10点の「耐久値」を失い(アーマー・ポイント〔AP〕は無視する)、さらに「伏せ状態」になる。'],
|
|
634
|
+
[41..45, '凍りつく四肢:四肢のひとつ(ランダムに決定する)が1d10ラウンドにわたって動かなくなる。この四肢はまるで「身体欠損」(P.180を参照)になったかのように使い物にならない。'],
|
|
635
|
+
[46..50, '闇の目:君は1d10時間にわたって、《第二の視覚》の異能の利益を失う。この時間中、君は〈魔風交信〉テストにも-20のペナルティを被る。'],
|
|
636
|
+
[51..55, '混沌の先見:1d10点ぶんの「幸運ポイント」の余剰プールを得る(これは通常の上限を超えても構わない)。君が「幸運ポイント」を1点消費するたびに、「堕落ポイント」を1点獲得する。なお、セッションの終了時に残存している追加で得たポイントはすべて失われる。GMは君の【意志力】ボーナスと等しい数の反転の印(p.45)を君に与える。'],
|
|
637
|
+
[56..60, '浮遊:君は“魔力の風”に乗り、1d10分にわたって地上から1d10ヤードの高さに浮かび上がる。他のキャラクターたちが君を無理やり動かすこともできるし、君も呪文や翼などを使って移動することもできるが、そのままにしておくと君が浮かんだ位置に常に戻ってくる。「浮遊」が終了した後に何が起こるかについては、「落下」(P.166)を参照のこと。'],
|
|
638
|
+
[61..65, '吐き気:君は吐き気が抑えきれなくなり、君の体内にあった量以上の、悪臭を放つ汚物を吐きちらす。「朦朧状態」1つを得る。これは1d10ラウンドにわたって持続する。'],
|
|
639
|
+
[66..70, '混沌の地震:1d100ヤード以内にいるすべてのクリーチャーは「普通」(+20)の〈運動〉テストを行ない、失敗したなら、「伏せ状態」になる。'],
|
|
640
|
+
[71..75, '忘却:発動しようとした呪文が君の記憶から喪失する。君がもしその呪文を記憶していたなら、思い出すことができず、再度記憶せねばならない。魔導書から発動していたなら、呪文が書かれていたページが発火する。呪文は失われ、適切な処置をすぐに行わなければ、魔導書が「炎上状態」1つを得る。'],
|
|
641
|
+
[76..80, '裏切り:暗黒の神々が恐るべき背信を行なうよう君を誘惑する。君が味方の1人に対する攻撃か、その他何らかの裏切り行為に全力を尽くしたなら、「幸運ポイント」をすべて回復できる。君が他のキャラクターに「運命点」1点を失わせたなら、君がその1点の「運命点」を得る。'],
|
|
642
|
+
[81..85, '穢らわしい弱体化:1点の「堕落ポイント」に加えて、「疲労状態」1つを獲得し、さらに「伏せ状態」にもなる。'],
|
|
643
|
+
[86..90, '凄まじき悪臭:いまや君は鼻が曲がりそうなまでに臭い!君は「攪乱」の「クリーチャー特徴」(P.338)を獲得し、おそらく嗅覚を持つ誰彼すべてからの敵意にさらされる。この効果は1d10時間持続する。'],
|
|
644
|
+
[91..95, '力の流出:君は1d10分にわたって、呪文を発動するために使う異能を使用することができない(通常は《秘術魔術》だが、《混沌魔術》や同種の異能ということもありえる)。'],
|
|
645
|
+
[96..100, 'エーテルの逆流:君の【意志力】ボーナス×1ヤード以内にいるすべての者は──敵も味方も同様に──(【頑健力】ボーナスとアーマー・ポイント〔AP〕を無視して)1d10点の「耐久値」を失い、さらに「伏せ状態」になる。射程内に目標が存在しなければ、魔法は行き場を失い、君の頭は爆発し、君は即死する。'],
|
|
646
|
+
]
|
|
647
|
+
),
|
|
452
648
|
}.freeze
|
|
453
649
|
end
|
|
454
650
|
end
|