bcdice 3.11.0 → 3.13.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 +58 -0
- data/i18n/FutariSousa/ko_kr.yml +1625 -529
- data/i18n/Insane/ko_kr.yml +393 -258
- data/i18n/NinjaSlayer2/ja_jp.yml +34 -0
- data/lib/bcdice/arithmetic/parser.rb +4 -2
- data/lib/bcdice/base.rb +1 -1
- data/lib/bcdice/command/parser.rb +4 -2
- data/lib/bcdice/common_command/add_dice/parser.rb +4 -2
- data/lib/bcdice/common_command/barabara_dice/parser.rb +4 -2
- data/lib/bcdice/common_command/calc/parser.rb +4 -2
- data/lib/bcdice/common_command/reroll_dice/parser.rb +4 -2
- data/lib/bcdice/common_command/tally_dice/parser.rb +4 -2
- data/lib/bcdice/common_command/upper_dice/parser.rb +4 -2
- data/lib/bcdice/game_system/Airgetlamh.rb +1 -1
- data/lib/bcdice/game_system/Alsetto.rb +2 -2
- data/lib/bcdice/game_system/AniMalus.rb +221 -0
- data/lib/bcdice/game_system/ArknightsFan.rb +182 -0
- data/lib/bcdice/game_system/Avandner.rb +1 -1
- data/lib/bcdice/game_system/BBN.rb +1 -1
- data/lib/bcdice/game_system/BadLife.rb +3 -3
- data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
- data/lib/bcdice/game_system/Chill3.rb +6 -6
- data/lib/bcdice/game_system/DarkSouls.rb +1 -1
- data/lib/bcdice/game_system/Elric.rb +1 -1
- data/lib/bcdice/game_system/Emoklore.rb +4 -6
- data/lib/bcdice/game_system/FullFace.rb +92 -0
- data/lib/bcdice/game_system/FutariSousa_Korean.rb +44 -19
- data/lib/bcdice/game_system/HunterTheReckoning5th.rb +10 -3
- data/lib/bcdice/game_system/InfiniteFantasia.rb +4 -1
- data/lib/bcdice/game_system/Insane_Korean.rb +11 -11
- data/lib/bcdice/game_system/Irisbane.rb +1 -1
- data/lib/bcdice/game_system/KamitsubakiCityUnderConstructionNarrative.rb +251 -0
- data/lib/bcdice/game_system/KillDeathBusiness.rb +1 -1
- data/lib/bcdice/game_system/KyokoShinshoku.rb +158 -0
- data/lib/bcdice/game_system/Liminal.rb +136 -0
- data/lib/bcdice/game_system/MetalHead.rb +1 -1
- data/lib/bcdice/game_system/MetalHeadExtream.rb +1 -1
- data/lib/bcdice/game_system/NRR.rb +122 -0
- data/lib/bcdice/game_system/NSSQ.rb +1 -1
- data/lib/bcdice/game_system/NightWizard.rb +1 -1
- data/lib/bcdice/game_system/NightWizard3rd.rb +15 -2
- data/lib/bcdice/game_system/NinjaSlayer.rb +3 -1
- data/lib/bcdice/game_system/NinjaSlayer2.rb +299 -0
- data/lib/bcdice/game_system/OneWayHeroics.rb +1 -1
- data/lib/bcdice/game_system/PastFutureParadox.rb +1238 -0
- data/lib/bcdice/game_system/Postman.rb +3 -3
- data/lib/bcdice/game_system/RecordOfSteam.rb +1 -1
- data/lib/bcdice/game_system/RuneQuestRoleplayingInGlorantha.rb +10 -7
- data/lib/bcdice/game_system/Ryutama.rb +4 -4
- data/lib/bcdice/game_system/SajinsenkiAGuS.rb +5 -1
- data/lib/bcdice/game_system/SajinsenkiAGuS2E.rb +285 -0
- data/lib/bcdice/game_system/Siren.rb +97 -0
- data/lib/bcdice/game_system/Skynauts.rb +1 -1
- data/lib/bcdice/game_system/SkynautsBouken.rb +1 -1
- data/lib/bcdice/game_system/Strave.rb +1 -1
- data/lib/bcdice/game_system/SwordWorld.rb +16 -0
- data/lib/bcdice/game_system/SwordWorld2_5.rb +8 -1
- data/lib/bcdice/game_system/TherapieSein.rb +1 -1
- data/lib/bcdice/game_system/TrinitySeven.rb +1 -1
- data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +21 -9
- data/lib/bcdice/game_system/WerewolfTheApocalypse5th.rb +179 -0
- data/lib/bcdice/game_system/cthulhu7th/full_auto.rb +1 -1
- data/lib/bcdice/game_system/sword_world/rating_options.rb +3 -0
- data/lib/bcdice/game_system/sword_world/rating_parsed.rb +9 -0
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +177 -130
- data/lib/bcdice/game_system/sword_world/transcendent_test.rb +1 -1
- data/lib/bcdice/game_system.rb +12 -0
- data/lib/bcdice/loader.rb +1 -1
- data/lib/bcdice/version.rb +1 -1
- metadata +32 -5
|
@@ -57,11 +57,11 @@ module BCDice
|
|
|
57
57
|
diceCount = 2 if diceCount < 2
|
|
58
58
|
|
|
59
59
|
modify = (Regexp.last_match(2) || 0).to_i
|
|
60
|
-
modifyAddString =
|
|
60
|
+
modifyAddString = Regexp.last_match(3) || ''
|
|
61
61
|
|
|
62
|
-
type =
|
|
62
|
+
type = Regexp.last_match(6) || ''
|
|
63
63
|
target = (Regexp.last_match(7) || 0).to_i
|
|
64
|
-
targetAddString =
|
|
64
|
+
targetAddString = Regexp.last_match(8) || ''
|
|
65
65
|
|
|
66
66
|
modify_list = modifyAddString.scan(/[+-]\d+/)
|
|
67
67
|
modify_list.each { |i| modify += i.to_i }
|
|
@@ -7,7 +7,7 @@ module BCDice
|
|
|
7
7
|
ID = 'RuneQuestRoleplayingInGlorantha'
|
|
8
8
|
|
|
9
9
|
# ゲームシステム名
|
|
10
|
-
NAME = '
|
|
10
|
+
NAME = 'ルーンクエスト:ロールプレイング・イン・グローランサ'
|
|
11
11
|
|
|
12
12
|
# ゲームシステム名の読みがな
|
|
13
13
|
SORT_KEY = 'るうんくえすと4'
|
|
@@ -128,10 +128,10 @@ module BCDice
|
|
|
128
128
|
note_str = "クリティカル/スペシャル、ファンブルは未処理。必要なら確認すること。"
|
|
129
129
|
|
|
130
130
|
if roll_value >= 96
|
|
131
|
-
# 96
|
|
131
|
+
# 96以上は無条件で失敗
|
|
132
132
|
Result.failure("#{result_prefix_str} 失敗\n#{note_str}")
|
|
133
133
|
elsif roll_value <= 5 || roll_value <= modifiy_value
|
|
134
|
-
#
|
|
134
|
+
# 05以下あるいは修正値以下は無条件で成功
|
|
135
135
|
Result.success("#{result_prefix_str} 成功\n#{note_str}")
|
|
136
136
|
else
|
|
137
137
|
# 上記全てが当てはまらない時に突破可能な能力値を算出
|
|
@@ -151,15 +151,18 @@ module BCDice
|
|
|
151
151
|
elsif (roll_value == 100) || (roll_value >= (100 - funmble_value + 1))
|
|
152
152
|
# ファンブル(00は必ずファンブル)
|
|
153
153
|
Result.fumble("#{result_str} ファンブル")
|
|
154
|
+
elsif roll_value >= 96 || ((roll_value > success_value) && (roll_value > 5))
|
|
155
|
+
# 失敗(96以上は必ず失敗、出目が01-05ではなく技能値より上なら失敗)
|
|
156
|
+
Result.failure("#{result_str} 失敗")
|
|
154
157
|
elsif roll_value <= special_value
|
|
155
158
|
# スペシャル
|
|
156
159
|
Result.success("#{result_str} スペシャル")
|
|
157
|
-
elsif (roll_value <=
|
|
158
|
-
# 成功(
|
|
160
|
+
elsif (roll_value <= 5) || (roll_value <= success_value)
|
|
161
|
+
# 成功(05以下は必ず成功)
|
|
159
162
|
Result.success("#{result_str} 成功")
|
|
160
163
|
else
|
|
161
|
-
#
|
|
162
|
-
Result.failure("#{result_str}
|
|
164
|
+
# ここには到達しないはずだが、念のため捕捉
|
|
165
|
+
Result.failure("#{result_str} エラー")
|
|
163
166
|
end
|
|
164
167
|
end
|
|
165
168
|
end
|
|
@@ -108,8 +108,8 @@ module BCDice
|
|
|
108
108
|
end
|
|
109
109
|
|
|
110
110
|
def isValidDice(dice1, dice2)
|
|
111
|
-
return
|
|
112
|
-
|
|
111
|
+
return isValidDiceOne(dice1) &&
|
|
112
|
+
isValidDiceOne(dice2)
|
|
113
113
|
end
|
|
114
114
|
|
|
115
115
|
def isValidDiceOne(dice)
|
|
@@ -144,7 +144,7 @@ module BCDice
|
|
|
144
144
|
return ''
|
|
145
145
|
end
|
|
146
146
|
|
|
147
|
-
if
|
|
147
|
+
if total >= difficulty
|
|
148
148
|
return "成功"
|
|
149
149
|
end
|
|
150
150
|
|
|
@@ -152,7 +152,7 @@ module BCDice
|
|
|
152
152
|
end
|
|
153
153
|
|
|
154
154
|
def isFamble(value1, value2)
|
|
155
|
-
return (
|
|
155
|
+
return (value1 == 1) && (value2 == 1)
|
|
156
156
|
end
|
|
157
157
|
|
|
158
158
|
def isCritical(value1, value2, dice1, dice2)
|
|
@@ -51,15 +51,17 @@ module BCDice
|
|
|
51
51
|
|
|
52
52
|
dice_list = @randomizer.roll_barabara(2, 10).map { |d| d == 10 ? 0 : d }
|
|
53
53
|
total = dice_list.sum
|
|
54
|
+
success_level = 1 + dice_list.count { |val| val <= level }
|
|
54
55
|
|
|
55
56
|
return Result.new.tap do |result|
|
|
56
57
|
result.condition = total <= target
|
|
58
|
+
result.rands = dice_list
|
|
57
59
|
|
|
58
60
|
sequence = [
|
|
59
61
|
"(2D10<=#{target})",
|
|
60
62
|
"#{total}[#{dice_list.join(',')}]",
|
|
61
63
|
("チャンス" if dice_list.include?(0)),
|
|
62
|
-
result.success? ? "成功" : "失敗"
|
|
64
|
+
result.success? ? "成功(+#{success_level})" : "失敗"
|
|
63
65
|
].compact
|
|
64
66
|
|
|
65
67
|
result.text = sequence.join(" > ")
|
|
@@ -91,6 +93,7 @@ module BCDice
|
|
|
91
93
|
|
|
92
94
|
return Result.new.tap do |r|
|
|
93
95
|
r.condition = total <= target
|
|
96
|
+
r.rands = dice_list
|
|
94
97
|
r.critical = criticals >= 1
|
|
95
98
|
r.text = [
|
|
96
99
|
"(2D10<=#{target})",
|
|
@@ -114,6 +117,7 @@ module BCDice
|
|
|
114
117
|
|
|
115
118
|
return Result.new.tap do |r|
|
|
116
119
|
r.condition = total <= target
|
|
120
|
+
r.rands = dice_list
|
|
117
121
|
r.critical = criticals >= 1
|
|
118
122
|
r.text = [
|
|
119
123
|
"(3D10<=#{target})",
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'bcdice/game_system/SajinsenkiAGuS'
|
|
4
|
+
|
|
5
|
+
module BCDice
|
|
6
|
+
module GameSystem
|
|
7
|
+
class SajinsenkiAGuS2E < SajinsenkiAGuS
|
|
8
|
+
# ゲームシステムの識別子
|
|
9
|
+
ID = 'SajinsenkiAGuS2E'
|
|
10
|
+
|
|
11
|
+
# ゲームシステム名
|
|
12
|
+
NAME = '砂塵戦機アーガス2ndEdition'
|
|
13
|
+
|
|
14
|
+
# ゲームシステム名の読みがな
|
|
15
|
+
SORT_KEY = 'さしんせんきああかす2'
|
|
16
|
+
|
|
17
|
+
# ダイスボットの使い方
|
|
18
|
+
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
|
19
|
+
・一般判定Lv(チャンス出目0→判定0) nAG+x
|
|
20
|
+
nは習得レベル、Lv0の場合nの省略可能。xは判定値修正(数式による修正可)、省略した場合はレベル修正0
|
|
21
|
+
例)AG:習得レベル0の一般技能、1AG+1:習得レベル1・判定値修正+1の技能、AG+2-1:習得レベル0・判定値修正2-1の技能、(1-1)AG:習得レベル1・レベル修正-1の技能
|
|
22
|
+
|
|
23
|
+
・適正距離での命中判定(チャンス出目0→判定0、HR算出)OM+y@z
|
|
24
|
+
yは命中補正値(数式可)、zはクリティカル値。クリティカル値省略時は0
|
|
25
|
+
HRの算出時には、HRが大きくなる場合に出目0を10に読み替えます。
|
|
26
|
+
例)OM+18-6@2:命中補正値+18-6でクリティカル値2、適正距離の判定
|
|
27
|
+
|
|
28
|
+
・非適正距離での命中判定(チャンス出目0→判定0、HR算出)NM+y@z
|
|
29
|
+
yは命中補正値(数式可)、zはクリティカル値。クリティカル値省略時は0
|
|
30
|
+
HRの算出時には、HRが大きくなる場合に出目0を10に読み替えます。
|
|
31
|
+
例)NM+4-3:命中補正値+4-3で非適正距離の判定
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
・『西風旅徨』で導入されたファンブル・ルールを用いた判定
|
|
35
|
+
判定時にダイスがすべて8以上ならファンブル(自動失敗)です。
|
|
36
|
+
それぞれのコマンドにWを付けると『西風旅徨』モードになります。
|
|
37
|
+
・一般判定 nAGW+x
|
|
38
|
+
・適正距離での命中判定 OMW+y@z
|
|
39
|
+
・非適正距離での命中判定 NMW+y@z
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
・クリティカル表 CR
|
|
44
|
+
・鹵獲結果表 CAP
|
|
45
|
+
・幕間クエスト表 INT
|
|
46
|
+
・サルベージ表 SAL
|
|
47
|
+
・赤字ペナルティー表 DEF
|
|
48
|
+
・特殊戦況表 SPE
|
|
49
|
+
|
|
50
|
+
※通常の1D10などの10面ダイスにおいて出目10の読み替えはしません。コマンドのみです。
|
|
51
|
+
ページ参照は、何もない場合は「ルールブック」、wは「西風旅徨」を示します。
|
|
52
|
+
|
|
53
|
+
INFO_MESSAGE_TEXT
|
|
54
|
+
|
|
55
|
+
def initialize(command)
|
|
56
|
+
super(command)
|
|
57
|
+
@enabled_d9 = true
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def eval_game_system_specific_command(command)
|
|
61
|
+
super(command) ||
|
|
62
|
+
roll_ippan_west(command) ||
|
|
63
|
+
roll_hit_check_west(command) ||
|
|
64
|
+
roll_tables(command, SECOND_ED_TABLES)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def roll_ippan_west(command)
|
|
68
|
+
m = /AGW/.match(command)
|
|
69
|
+
return nil unless m
|
|
70
|
+
|
|
71
|
+
result = roll_ippan(command.sub(/(AG)W/) { ::Regexp.last_match(1) })
|
|
72
|
+
return change_fumble(result)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def roll_hit_check_west(command)
|
|
76
|
+
m = /[ON]MW/.match(command)
|
|
77
|
+
return nil unless m
|
|
78
|
+
|
|
79
|
+
result = roll_hit_check(command.sub(/([ON]M)W/) { ::Regexp.last_match(1) })
|
|
80
|
+
return change_fumble(result)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def change_fumble(result)
|
|
84
|
+
return nil if result.nil?
|
|
85
|
+
|
|
86
|
+
fumble_counts = result.rands.count { |val| val >= 8 }
|
|
87
|
+
if fumble_counts >= 2
|
|
88
|
+
result.text = result.text.sub(/(成功|失敗).*$/, 'ファンブル')
|
|
89
|
+
result.failure = true
|
|
90
|
+
result.success = false
|
|
91
|
+
result.fumble = true
|
|
92
|
+
end
|
|
93
|
+
return result
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
SECOND_ED_TABLES = {
|
|
97
|
+
"CAP" => DiceTable::Table.new(
|
|
98
|
+
"鹵獲結果表",
|
|
99
|
+
"2D10",
|
|
100
|
+
[
|
|
101
|
+
'0:敵A:GuS を完全な状態で鹵獲︕ ※総合価格÷ 2 で売却可。',
|
|
102
|
+
'1:敵A:GuS を完全な状態で鹵獲︕ ※総合価格÷ 2 で売却可。',
|
|
103
|
+
'2:敵A:GuS を完全な状態で鹵獲︕ ※総合価格÷ 2 で売却可。',
|
|
104
|
+
'3:敵A:GuS の兵装を鹵獲︕ ※敵A:GuS の装備している任意の兵装1つを獲得。',
|
|
105
|
+
'4:敵A:GuS の兵装を鹵獲︕ ※敵A:GuS の装備している任意の兵装1つを獲得。',
|
|
106
|
+
'5:敵A:GuS の兵装を鹵獲︕ ※敵A:GuS の装備している任意の兵装1つを獲得。',
|
|
107
|
+
'6:敵A:GuS の兵装を鹵獲︕ ※敵A:GuS の装備している任意の兵装1つを獲得。',
|
|
108
|
+
'7:敵A:GuS の兵装を鹵獲︕ ※敵A:GuS の装備している任意の兵装1つを獲得。',
|
|
109
|
+
'8:使えそうな兵装を発見︕ ※1D10 を振り、出目の部位の兵装1つを獲得。',
|
|
110
|
+
'9:使えそうな兵装を発見︕ ※1D10 を振り、出目の部位の兵装1つを獲得。',
|
|
111
|
+
'10:使えそうな兵装を発見︕ ※1D10 を振り、出目の部位の兵装1つを獲得。',
|
|
112
|
+
'11:使えそうな兵装を発見︕ ※1D10 を振り、出目の部位の兵装1つを獲得。',
|
|
113
|
+
'12:使えそうな兵装を発見︕ ※1D10 を振り、出目の部位の兵装1つを獲得。',
|
|
114
|
+
'13:使えそうな兵装を発見︕ ※1D10 を振り、出目の部位の兵装1つを獲得。',
|
|
115
|
+
'14:残念、完全にスクラップだ……。※部品代として[バランス値×300]cdtを獲得。',
|
|
116
|
+
'15:残念、完全にスクラップだ……。※部品代として[バランス値×300]cdtを獲得。',
|
|
117
|
+
'16:残念、完全にスクラップだ……。※部品代として[バランス値×300]cdtを獲得。',
|
|
118
|
+
'17:残念、完全にスクラップだ……。※部品代として[バランス値×300]cdtを獲得。',
|
|
119
|
+
'18:残念、完全にスクラップだ……。※部品代として[バランス値×300]cdtを獲得。',
|
|
120
|
+
]
|
|
121
|
+
),
|
|
122
|
+
"INT" => DiceTable::RangeTable.new(
|
|
123
|
+
"幕間クエスト表",
|
|
124
|
+
"1D100",
|
|
125
|
+
[
|
|
126
|
+
[1, '慰労 PC/クルー1名が、労ってくれる。 最大HP+4'],
|
|
127
|
+
[2..3, '感謝 PC/クルー1名が、感謝の気持ちを伝える。 最大HP+4'],
|
|
128
|
+
[4..5, '安堵 PC/ クルー1名が、安堵の気持ちを伝える。 最大HP+4'],
|
|
129
|
+
[6..7, '治療 戦闘中の怪我や急な病気で医療班のお世話になることに。 最大HP+4'],
|
|
130
|
+
[8..9, '日常 PC/クルー1名と、他愛のない日常の会話をする。 最大HP+4'],
|
|
131
|
+
[10..11, '遊興 PC/クルー1名と遊びに興じ、楽しい時を過ごす。 XP+1'],
|
|
132
|
+
[12..13, '勤労 PC/クルー1名と協力し、船内の仕事を行う。 XP+1'],
|
|
133
|
+
[14..15, '評価 PC/クルー1名が、仕事の出来を評価してくれる。 XP+1'],
|
|
134
|
+
[16..17, '調達 PC/クルー1名とともに生活品の買い出しを行うことに。 XP+1'],
|
|
135
|
+
[18..19, '社交 取引や補給などの仕事を通し、船外での社会経験を得る。 XP+1'],
|
|
136
|
+
[20..21, '注意 PC/クルー1名が、君の危険な戦闘行動について指摘する。 SP+1'],
|
|
137
|
+
[22..23, '反省 PC/クルー1名と、作戦行動の反省会を行う。 SP+1'],
|
|
138
|
+
[24..25, '鍛錬 PC/クルー1名に、模擬戦に付き合ってもらう。 SP+1'],
|
|
139
|
+
[26..27, '感心 PC/クルー1名の仕事や戦闘行動に対し、感銘を受ける。 SP+1'],
|
|
140
|
+
[28..29, '改良 整備班と協力し、A:GuSのプログラムの改良に努める。 SP+1'],
|
|
141
|
+
[30..31, '割引 兵装が割引されているのを発見し、格安で購入できる。 基本兵装1つを半額で購入可。'],
|
|
142
|
+
[32..33, '発見 クルー1名が、兵装を入手した。 基本兵装1つを半額で購入可。'],
|
|
143
|
+
[34..35, '発明 クルー1名が、兵装を開発した。 基本兵装1つを半額で購入可。'],
|
|
144
|
+
[36..37, '大発見 クルー1名が、強力な兵装を入手した! 上級兵装1つを購入可。(p37参照)'],
|
|
145
|
+
[38..39, '大発明 クルー1名が、新たな兵装を開発した! 上級兵装1つを購入可。(p37参照)'],
|
|
146
|
+
[40..41, '昔話 PC/クルー1名に、自分の過去について語ってしまう。 最大LP+1'],
|
|
147
|
+
[42..43, '願望 PC/クルー1名に、自分の夢や未来について語ってしまう。 最大LP+1'],
|
|
148
|
+
[44..45, '家族 PC/クルー1名に、自分の家族について語ってしまう。 最大LP+1'],
|
|
149
|
+
[46..47, '望郷 PC/クルー1名に、自分の故郷について語ってしまう。 最大LP+1'],
|
|
150
|
+
[48..49, '知人 PC/クルー1名に、自分の知人を重ね合わせてしまう。 最大LP+1'],
|
|
151
|
+
[50..51, '個人収入 チームとは関係ない個人的な商売や取引で利益を得る。 4,000cdtを獲得。'],
|
|
152
|
+
[52..53, '臨時収入 思いがけない臨時の収入が入る。 4,000cdt を獲得。'],
|
|
153
|
+
[54..55, '取引 クルー1 名と取引を行い、予算を獲得することに成功する。 4,000cdtを獲得。'],
|
|
154
|
+
[56..57, '裏取引 クルー1 名と秘密の取引を行い、見返りとして予算を獲得。 6,000cdtを獲得。'],
|
|
155
|
+
[58..59, '賞与 オーナーが特別に報酬を用意してくれた! 6,000cdtを獲得。'],
|
|
156
|
+
[60..61, '改造 整備班とともに機体の改造に明け暮れる。 任意の改造Lv+1。(上限:2Lv)'],
|
|
157
|
+
[62..63, '鹵獲 鹵獲品の中から機体の改造に使えるものを発見。 任意の改造Lv+1。(上限:2Lv)'],
|
|
158
|
+
[64..65, '強化 案機体を強化するための画期的なアイディアを思いつく。 任意の改造Lv+1。(上限:2Lv)'],
|
|
159
|
+
[66..67, '懇願 整備班に頼みこみ、機体の改造をしてもらう。 任意の改造Lv+1。(上限:3Lv)'],
|
|
160
|
+
[68..69, '掘出物 掘出物を発見、整備班が早速機体に取り付けてくれた。 任意の改造Lv+1。(上限:3Lv)'],
|
|
161
|
+
[70..71, '募集 クルーの募集を行ったところ、何名か候補が現れた。 クルー1名を割安(20,000cdt)で雇用可。'],
|
|
162
|
+
[72..73, '勧誘 有能な人材を発見した。ぜひ雇い入れたいものだが。 クルー1名を割安(20,000cdt)で雇用可。'],
|
|
163
|
+
[74..75, '推薦 依頼人からの推薦で、クルーを1名紹介される。 クルー1名を割安(20,000cdt)で雇用可。'],
|
|
164
|
+
[76..77, '志願 クルーとして雇って欲しい、という人物が現れる。クルー1名を割安(15,000cdt)で雇用可。'],
|
|
165
|
+
[78..79, '成長 見習いクルーが大分成長してきた。もう1人前と見てもいい。クルー1名を割安(15,000cdt)で雇用可。'],
|
|
166
|
+
[80..81, '交渉 依頼人との交渉がうまくいき、少し報酬を割増ししてもらえる。 チーム予算を8,000cdt獲得。'],
|
|
167
|
+
[82..83, '節約 経費が思ったよりも節約できた。経理やオーナーの機嫌が良い。 チーム予算を8,000cdt獲得。'],
|
|
168
|
+
[84..85, '賞金 今回の敵は賞金がかかっていたようで臨時収入が入った。 チーム予算を8,000cdt獲得。'],
|
|
169
|
+
[86..87, '名声 チームの名声が高まっており、クルーの自尊心が刺激される。 チーム予算を12,000cdt獲得。'],
|
|
170
|
+
[88..89, '一致団結 オーナーからの労いがあり、クルー一同の結束力が高まる。 チーム予算を12,000cdt獲得。'],
|
|
171
|
+
[90..91, '点検 PC/クルー1名とシップに異状がないか点検作業を行う。 拠点AP+10。'],
|
|
172
|
+
[92..93, '補修 整備班とともにくたびれたシップの改装作業を行う。 拠点AP+10。'],
|
|
173
|
+
[94..95, '全面改修 艦内の問題箇所を全面的に改修する。 拠点AP+10。'],
|
|
174
|
+
[96..97, '自由 行動自由気ままに好きなことをして過ごす。 00~49の任意の効果を適用可。(p69参照)'],
|
|
175
|
+
[98..99, '歓迎 街の住民にたいへんな歓迎を受ける。 50~95の任意の効果を適用可。(p69参照)'],
|
|
176
|
+
[100, '慰労 PC/クルー1名が、労ってくれる。 最大HP+4'],
|
|
177
|
+
]
|
|
178
|
+
),
|
|
179
|
+
"SAL" => DiceTable::RangeTable.new(
|
|
180
|
+
"サルベージ表",
|
|
181
|
+
"1D100",
|
|
182
|
+
[
|
|
183
|
+
[1..2, '大失敗…。大変な損失を出してしまった…。 -5,000cdt'],
|
|
184
|
+
[3..5, '失敗…。かなりの損失を出してしまった…。 -3,000cdt'],
|
|
185
|
+
[6..9, '失敗…。損失を出してしまった…。 -1,000cdt'],
|
|
186
|
+
[10, '大成功!大きな収益を上げることができた! +5,000cdt'],
|
|
187
|
+
[11..19, '空振り……何の成果も得られなかった…。 0cdt'],
|
|
188
|
+
[20, '掘り出し物を発見!2Lv改造済の【基本携行兵装】一つを獲得! 一般兵装(→p34)'],
|
|
189
|
+
[21..22, 'ジャンク品を発見。船の装甲強化くらいには使えそうだ。 拠点AP+[5]'],
|
|
190
|
+
[23..25, 'ジャンク品を発見。少し赤字だがまあやむを得まい。 +1,000cdt'],
|
|
191
|
+
[26..29, 'ジャンク品を発見。手間賃くらいにはなった。 +2,000cdt'],
|
|
192
|
+
[30, '掘り出し物を発見!2Lv改造済の【基本外装兵装】一つを獲得! 一般兵装(→p35)'],
|
|
193
|
+
[31..32, '成功!少しだが利益を出すことができた! +3,000cdt'],
|
|
194
|
+
[33..35, '成功!まずまずの利益を出すことができた! +5,000cdt'],
|
|
195
|
+
[36..39, '大成功!大きな利益を出すことができた! +7,000cdt'],
|
|
196
|
+
[40..41, '良質のバッテリーを獲得。 EP+[4]'],
|
|
197
|
+
[42..43, '良質の装甲版を獲得。 AP+[4]'],
|
|
198
|
+
[44, '大失敗…。大きな損失を出してしまった…。 -5,000cdt'],
|
|
199
|
+
[45, 'ブレードを獲得。 →p34'],
|
|
200
|
+
[46, 'ランスを獲得。 →p34'],
|
|
201
|
+
[47, 'アンカーブレードを獲得。 →p34'],
|
|
202
|
+
[48, 'パイルバンカーを獲得。 →p34'],
|
|
203
|
+
[49, 'ハンドガンを獲得。 →p35'],
|
|
204
|
+
[50, 'ヘビーハンドガンを獲得。 →p35'],
|
|
205
|
+
[51, 'ライフルを獲得。 →p35'],
|
|
206
|
+
[52, 'アンカーショットを獲得。 →p35'],
|
|
207
|
+
[53, 'マシンガンSを獲得。 →p35'],
|
|
208
|
+
[54, 'マシンガンLを獲得。 →p35'],
|
|
209
|
+
[55, 'ミサイルポッドSを獲得。 →p35'],
|
|
210
|
+
[56, 'ミサイルポッドLを獲得。 →p35'],
|
|
211
|
+
[57, 'バズーカを獲得。 →p35'],
|
|
212
|
+
[58, 'カノンを獲得。 →p35'],
|
|
213
|
+
[59, 'ライトシールドを獲得。 →p35'],
|
|
214
|
+
[60, 'ミドルシールドを獲得。 →p35'],
|
|
215
|
+
[61, 'ヘビーシールドを獲得。 →p35'],
|
|
216
|
+
[62, 'レーダーユニットを獲得。 →p35'],
|
|
217
|
+
[63, 'ECMユニットを獲得。 →p35'],
|
|
218
|
+
[64, 'サブブースターを獲得。 →p36'],
|
|
219
|
+
[65, 'ディフェンスサポートを獲得。 →p36'],
|
|
220
|
+
[66, 'コンバットサポートを獲得。 →p36'],
|
|
221
|
+
[67, '大失敗…。大きな損失を出してしまった…。 -5,000cdt'],
|
|
222
|
+
[68, 'ショットサポートを獲得。 →p36'],
|
|
223
|
+
[69, 'パワーローダーを獲得。 →p36'],
|
|
224
|
+
[70, 'サブバッテリーを獲得。 →p36'],
|
|
225
|
+
[71, 'サブバッテリー+を獲得。 →p36'],
|
|
226
|
+
[72, 'ファランクスを獲得。 →p36'],
|
|
227
|
+
[73, 'リアクティブアーマーを獲得。 →p36'],
|
|
228
|
+
[74, '強化装甲版を獲得。 →p36'],
|
|
229
|
+
[75, 'ヘビーマシンガンSを獲得。 →p35'],
|
|
230
|
+
[76, 'ヘビーマシンガンLを獲得。 →p35'],
|
|
231
|
+
[77, '掘り出し物を発見!25,000cdt以下の【上級外装兵装】一つを獲得! 上級兵装 (→p37)'],
|
|
232
|
+
[78..79, '失敗…。かなりの損失を出してしまった…。 -3,000cdt'],
|
|
233
|
+
[80, '医療用品を獲得! 調息値+[1](全PC)'],
|
|
234
|
+
[81, '大型ソーラーパネルを獲得! 整備値+[1](全PC)'],
|
|
235
|
+
[82, '艦内用の環境設備を獲得! サポート使用回数+[1]'],
|
|
236
|
+
[83, 'リニアガンを獲得。 →p37'],
|
|
237
|
+
[84, 'リニアマシンガンを獲得。 →p37'],
|
|
238
|
+
[85, 'ジャマ―ユニットを獲得。 →p37'],
|
|
239
|
+
[86, 'センサー+を獲得。 →p37'],
|
|
240
|
+
[87, 'パワーローダー++を獲得。 →p37'],
|
|
241
|
+
[88, 'サブバッテリー++を獲得。 →p37'],
|
|
242
|
+
[89, 'フレームカバーを獲得。 →p37'],
|
|
243
|
+
[90, '空振り……何の成果も得られなかった…。 0cdt'],
|
|
244
|
+
[91..92, '良質なA:GuSのパーツを獲得!機体の改造や予備パーツとして使えそうだ! 改造Lv+[1](上限:3Lv)'],
|
|
245
|
+
[93..95, 'A:GuSのパーツを獲得!機体の改造や予備パーツとして使えそうだ。 改造Lv+[1](上限:1Lv)'],
|
|
246
|
+
[96..98, '多少傷ついているが、A:GuS1機を獲得!→10,000cdtで売却可能→10,000cdt支払えば補修して取得が可能。 (→p30~33)(→w23)'],
|
|
247
|
+
[99, 'A:GuS1機をほぼ完全な状態で獲得! (→p30~33)(→w23)'],
|
|
248
|
+
[100, '掘り出し物を発見!25,000cdt以下の【上級携行兵装】一つを獲得! 上級兵装 (→p37)'],
|
|
249
|
+
]
|
|
250
|
+
),
|
|
251
|
+
"DEF" => DiceTable::RangeTable.new(
|
|
252
|
+
"赤字ペナルティー表",
|
|
253
|
+
"1D10",
|
|
254
|
+
[
|
|
255
|
+
[1, '解雇 クルー1名を失う。10,000cdtを得る。'],
|
|
256
|
+
[2..3, '劣化 任意のチーム能力一つは-1Lv。10,000cdtを得る。'],
|
|
257
|
+
[4..5, '借金 次回の維持費が+20,000cdt。10,000cdtを得る。'],
|
|
258
|
+
[6..7, '酷使 各PCは最大HP-4。10,000cdtを得る。'],
|
|
259
|
+
[8..9, '売却 各PCはオプション以外の兵装を一つずつ廃棄。10,000cdtを得る。'],
|
|
260
|
+
[10, '解雇 クルー1名を失う。10,000cdtを得る。'],
|
|
261
|
+
]
|
|
262
|
+
),
|
|
263
|
+
# DiceTable::Tableが現状1D9に未対応
|
|
264
|
+
"SPE" => DiceTable::Table.new(
|
|
265
|
+
"特殊戦況表",
|
|
266
|
+
"1D10",
|
|
267
|
+
[
|
|
268
|
+
'混戦 以下のエリアのユニットをシャッフルする。♠:A⇔C ♣:B⇔D ♦:A⇔D ♥:B⇔C',
|
|
269
|
+
'乱戦 R中、すべての攻撃は[距離:○]になる。',
|
|
270
|
+
'逸失 敵拠点エリアのユニットを[♠♣:A ♦♥:B]に移動。味方拠点エリアのユニットを[♠♣:D ♦♥:C]に移動。',
|
|
271
|
+
'突風 艦船、オブジェクト以外の全ユニットを「風向き」方向に移動。',
|
|
272
|
+
'流砂 以下のエリアのユニットは脱出のため、MPとEPを[3]点失う。[♠:A ♣:B ♦:C ♥:D]',
|
|
273
|
+
'混乱 母船内でトラブル発生。R中、【整備】は行えない。[♠♥:味方側 ♣♦:敵側]',
|
|
274
|
+
'岩盤 以下のエリアのユニットは岩盤に乗り上げ、《クリティカル》が1回発生。[♠:A ♣:B ♦:C ♥:D]',
|
|
275
|
+
'混乱 R中、イニシア値を逆順で処理する。 ※【エイミング】等の高低も逆として処理する。',
|
|
276
|
+
'飛礫 飛礫によって、すべてのユニットはAPを[1D10](以下のエリアでは[2D10])点失う。[♠:A ♣:B ♦:C ♥:D]',
|
|
277
|
+
'雨 雨は砂を土へと変えてしまう。R中、全ユニット移動/突撃不可。',
|
|
278
|
+
]
|
|
279
|
+
),
|
|
280
|
+
}.freeze
|
|
281
|
+
register_prefix_from_super_class()
|
|
282
|
+
register_prefix('-?\d*AGW', 'OMW', 'NMW', SECOND_ED_TABLES.keys)
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
end
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'bcdice/command/parser'
|
|
4
|
+
|
|
5
|
+
module BCDice
|
|
6
|
+
module GameSystem
|
|
7
|
+
class Siren < Base
|
|
8
|
+
# ゲームシステムの識別子
|
|
9
|
+
ID = "Siren"
|
|
10
|
+
|
|
11
|
+
# ゲームシステム名
|
|
12
|
+
NAME = "終末アイドル育成TRPG セイレーン"
|
|
13
|
+
|
|
14
|
+
# ゲームシステム名の読みがな
|
|
15
|
+
SORT_KEY = "せいれえん"
|
|
16
|
+
|
|
17
|
+
HELP_MESSAGE = <<~TEXT
|
|
18
|
+
・判定: SL+a<=b±c
|
|
19
|
+
a=達成値への修正(0の場合は省略)
|
|
20
|
+
b=能力値
|
|
21
|
+
c=判定への修正(0の場合は省略、複数可)
|
|
22
|
+
例)判定修正-10の装備を装着しながら【技術:60】〈兵器:2〉で判定する場合。
|
|
23
|
+
SL+2<=60+40-10
|
|
24
|
+
|
|
25
|
+
・育成: TR$a<=b
|
|
26
|
+
a=育成した回数
|
|
27
|
+
b=ヘルス
|
|
28
|
+
例)ヘルスの現在値が60で2回目の【身体】の育成を行う場合。
|
|
29
|
+
TR$2<=60
|
|
30
|
+
TEXT
|
|
31
|
+
|
|
32
|
+
def eval_game_system_specific_command(command)
|
|
33
|
+
case command
|
|
34
|
+
when /^SL/ then check_action(command)
|
|
35
|
+
when /^TR/ then check_training(command)
|
|
36
|
+
else return nil
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def check_action(command)
|
|
41
|
+
parser = Command::Parser.new('SL', round_type: @round_type).restrict_cmp_op_to(:<=)
|
|
42
|
+
parsed = parser.parse(command)
|
|
43
|
+
return nil if parsed.nil?
|
|
44
|
+
|
|
45
|
+
target = parsed.target_number
|
|
46
|
+
|
|
47
|
+
dice = @randomizer.roll_once(100)
|
|
48
|
+
|
|
49
|
+
if dice > target
|
|
50
|
+
return Result.failure("(1D100<=#{target}) > #{dice} > 失敗")
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
dig10 = dice / 10
|
|
54
|
+
dig1 = dice % 10
|
|
55
|
+
if dig10 == 0
|
|
56
|
+
dig10 = 10
|
|
57
|
+
end
|
|
58
|
+
if dig1 == 0
|
|
59
|
+
dig1 = 10
|
|
60
|
+
end
|
|
61
|
+
achievement_value = dig10 + dig1 + parsed.modify_number
|
|
62
|
+
return Result.success("(1D100<=#{target}) > #{dice} > 成功(達成値:#{achievement_value})")
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def check_training(command)
|
|
66
|
+
parser = Command::Parser.new('TR', round_type: @round_type).restrict_cmp_op_to(:<=).enable_dollar.disable_modifier
|
|
67
|
+
parsed = parser.parse(command)
|
|
68
|
+
return nil if parsed.nil?
|
|
69
|
+
|
|
70
|
+
count = parsed.dollar
|
|
71
|
+
return nil if count.nil?
|
|
72
|
+
|
|
73
|
+
target = parsed.target_number
|
|
74
|
+
|
|
75
|
+
dice = @randomizer.roll_once(100)
|
|
76
|
+
|
|
77
|
+
dig10 = dice / 10
|
|
78
|
+
dig1 = dice % 10
|
|
79
|
+
if dig10 == 0
|
|
80
|
+
dig10 = 10
|
|
81
|
+
end
|
|
82
|
+
if dig1 == 0
|
|
83
|
+
dig1 = 10
|
|
84
|
+
end
|
|
85
|
+
achievement_value = dig10 + dig1
|
|
86
|
+
|
|
87
|
+
if dice > target
|
|
88
|
+
return Result.failure("(1D100<=#{target}) > #{dice} > 失敗(能力値減少:10 / ヘルス減少:#{achievement_value})")
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
return Result.success("(1D100<=#{target}) > #{dice} > 成功(能力値上昇:#{count * 5 + achievement_value} / ヘルス減少:#{achievement_value})")
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
register_prefix('SL', 'TR')
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
@@ -50,7 +50,7 @@ module BCDice
|
|
|
50
50
|
private
|
|
51
51
|
|
|
52
52
|
def get_judge_result(command)
|
|
53
|
-
return nil unless (m =
|
|
53
|
+
return nil unless (m = /^2D6<=(\d)$/i.match(command) || /^SN(\d*)$/i.match(command))
|
|
54
54
|
|
|
55
55
|
debug("====get_judge_result====")
|
|
56
56
|
|
|
@@ -96,7 +96,7 @@ module BCDice
|
|
|
96
96
|
"大漁\n船内マップ上にいるすべてのキャラクターの【生命点】の最大値を「2点」増加する。この効果は重複しない。\n 飛翔イカの群れだ! どうも、 窓から漏れる明かりにつられてやってきたらしい。網をはろう。今夜は新鮮なイカがたらふく食べられそうだ。",
|
|
97
97
|
"気流+1\n飛空艇コマを1スポット分進める。\n 他の空域よりも、比較的強い流れが一定の方向に吹き続けている空域。ときに探空士たちの手助けになり、ときに探空士たちに立ちはだかる。どの空域にどんな風が流れているかを見極めて進むのが、空の旅での基本だ。",
|
|
98
98
|
"ケセランパセラン\nキミは任意の船内マップ上に配置されてるパーツ1つを選択する。そのパーツが【快適度】のキーワード効果がある場合、このセッションの間、その数値は「1点」高いものとして扱う。\n ふわふわとした大きな綿毛のような浮遊生物。その毛のさわり心地は、上級階級のソファにも使われるほど柔らかい。捕まえて飼うことができれば、一服の癒やしをあたえてくれることだろう。",
|
|
99
|
-
"うさこぷたー\nキミの【生命点】を「3点」回復する。\n
|
|
99
|
+
"うさこぷたー\nキミの【生命点】を「3点」回復する。\n ふたつの耳を回転させて空を飛ぶうさぎのような浮遊生物が、ずっとこちらを見つめている。かわいいはかわいいのだが、こいつは一体なんなんだろう……。"
|
|
100
100
|
]
|
|
101
101
|
),
|
|
102
102
|
"NEO" => DiceTable::Table.new(
|
|
@@ -90,7 +90,7 @@ module BCDice
|
|
|
90
90
|
result = "(#{diceCount}D10\<\=#{target}) > #{diceText} > Hits:#{successCount}*#{damage} > #{totalDamage}ダメージ"
|
|
91
91
|
else
|
|
92
92
|
result = "(#{diceCount}D10\<\=#{target}) > #{diceText}"
|
|
93
|
-
if
|
|
93
|
+
if successCount > 0
|
|
94
94
|
result += " > 【成功】"
|
|
95
95
|
else
|
|
96
96
|
result += " > 【失敗】"
|
|
@@ -334,6 +334,11 @@ module BCDice
|
|
|
334
334
|
if command.modifier_after_half != 0
|
|
335
335
|
text += Format.modifier(command.modifier_after_half)
|
|
336
336
|
end
|
|
337
|
+
elsif command.one_and_a_half
|
|
338
|
+
text = "(#{text})*1.5"
|
|
339
|
+
if command.modifier_after_one_and_a_half != 0
|
|
340
|
+
text += Format.modifier(command.modifier_after_one_and_a_half)
|
|
341
|
+
end
|
|
337
342
|
end
|
|
338
343
|
sequence.push(text)
|
|
339
344
|
elsif command.half
|
|
@@ -342,6 +347,12 @@ module BCDice
|
|
|
342
347
|
text += Format.modifier(command.modifier_after_half)
|
|
343
348
|
end
|
|
344
349
|
sequence.push(text)
|
|
350
|
+
elsif command.one_and_a_half
|
|
351
|
+
text = "#{rateResults.first}*1.5"
|
|
352
|
+
if command.modifier_after_one_and_a_half != 0
|
|
353
|
+
text += Format.modifier(command.modifier_after_one_and_a_half)
|
|
354
|
+
end
|
|
355
|
+
sequence.push(text)
|
|
345
356
|
end
|
|
346
357
|
|
|
347
358
|
if round > 1
|
|
@@ -355,6 +366,11 @@ module BCDice
|
|
|
355
366
|
if command.modifier_after_half != 0
|
|
356
367
|
total += command.modifier_after_half
|
|
357
368
|
end
|
|
369
|
+
elsif command.one_and_a_half
|
|
370
|
+
total = (total * 1.5).ceil
|
|
371
|
+
if command.modifier_after_one_and_a_half != 0
|
|
372
|
+
total += command.modifier_after_one_and_a_half
|
|
373
|
+
end
|
|
358
374
|
end
|
|
359
375
|
|
|
360
376
|
total_text = total.to_s
|
|
@@ -39,6 +39,13 @@ module BCDice
|
|
|
39
39
|
クリティカル値を指定しない場合、クリティカルなしと扱われます。
|
|
40
40
|
例)HK20 K20h HK10-5@9 K10-5@9H K20gfH K20+8H+2 K20+8H+(1+1)
|
|
41
41
|
|
|
42
|
+
・レーティング表の1.5倍 (OHKx, KxOH+N)
|
|
43
|
+
レーティング表の先頭または末尾に"OH"をつけると、レーティング表を振って最終結果を1.5倍します。
|
|
44
|
+
末尾につけた場合、直後に修正ををつけることで、1.5倍後の加減算を行うことができます。
|
|
45
|
+
この際、複数の項による修正にはカッコで囲うことが必要です(カッコがないとパースに失敗します)
|
|
46
|
+
クリティカル値を指定しない場合、クリティカルなしと扱われます。
|
|
47
|
+
例)OHK20 K20oh OHK10-5@9 K20+8OH+2 K20+8OH+(1+1)
|
|
48
|
+
|
|
42
49
|
・ダイス目の修正(運命変転やクリティカルレイ用)
|
|
43
50
|
末尾に「$修正値」でダイス目に修正がかかります。
|
|
44
51
|
$+1と修正表記ならダイス目に+修正、$9のように固定値ならダイス目をその出目に差し替え。
|
|
@@ -82,7 +89,7 @@ module BCDice
|
|
|
82
89
|
アビスカース表を出すことができます。
|
|
83
90
|
INFO_MESSAGE_TEXT
|
|
84
91
|
|
|
85
|
-
register_prefix('H?K', 'Gr', '2D6?@\d+', 'FT', 'TT', 'Dru', 'ABT')
|
|
92
|
+
register_prefix('H?K', 'OHK', 'Gr', '2D6?@\d+', 'FT', 'TT', 'Dru', 'ABT')
|
|
86
93
|
|
|
87
94
|
def eval_game_system_specific_command(command)
|
|
88
95
|
case command
|