bcdice 3.13.0 → 3.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +45 -0
- data/i18n/Arianrhod/ko_kr.yml +3 -0
- data/i18n/Cthulhu/en_us.yml +11 -0
- data/i18n/CyberpunkRed/ja_jp.yml +389 -0
- data/i18n/FinalFantasyXIV/en_us.yml +4 -0
- data/i18n/FinalFantasyXIV/ja_jp.yml +4 -0
- data/i18n/FutariSousa/ja_jp.yml +158 -1
- data/i18n/KizunaBullet/ja_jp.yml +653 -0
- data/i18n/MonotoneMuseum/ja_jp.yml +246 -14
- data/i18n/SkynautsBouken/ja_jp.yml +114 -0
- data/i18n/TensaiGunshiNiNaro/ja_jp.yml +126 -0
- data/i18n/UnsungDuet/ja_jp.yml +62 -0
- data/i18n/UnsungDuet/ko_kr.yml +62 -0
- data/i18n/en_us.yml +5 -0
- data/lib/bcdice/dice_table/range_table.rb +24 -0
- data/lib/bcdice/game_system/Agnostos.rb +248 -0
- data/lib/bcdice/game_system/AniMalus.rb +99 -59
- data/lib/bcdice/game_system/Arianrhod_Korean.rb +30 -0
- data/lib/bcdice/game_system/BlackJacket.rb +244 -0
- data/lib/bcdice/game_system/ConvictorDrive.rb +5 -4
- data/lib/bcdice/game_system/Cthulhu_English.rb +59 -0
- data/lib/bcdice/game_system/CyberpunkRed.rb +14 -4
- data/lib/bcdice/game_system/DivineCharger.rb +841 -0
- data/lib/bcdice/game_system/FinalFantasyXIV.rb +115 -0
- data/lib/bcdice/game_system/FinalFantasyXIV_English.rb +39 -0
- data/lib/bcdice/game_system/FullFace.rb +39 -10
- data/lib/bcdice/game_system/FutariSousa.rb +88 -8
- data/lib/bcdice/game_system/Insane_Korean.rb +1 -1
- data/lib/bcdice/game_system/InvisibleLiar.rb +79 -0
- data/lib/bcdice/game_system/KizunaBullet.rb +240 -0
- data/lib/bcdice/game_system/KyokoShinshoku.rb +51 -8
- data/lib/bcdice/game_system/MonotoneMuseum.rb +14 -1
- data/lib/bcdice/game_system/NRR.rb +2 -2
- data/lib/bcdice/game_system/ShuumatsuBargainWars.rb +203 -0
- data/lib/bcdice/game_system/SkynautsBouken.rb +45 -130
- data/lib/bcdice/game_system/SwordWorld.rb +1 -1
- data/lib/bcdice/game_system/TensaiGunshiNiNaro.rb +228 -0
- data/lib/bcdice/game_system/TheOneRing2nd.rb +406 -0
- data/lib/bcdice/game_system/TheUnofficialHollowKnightRPG.rb +185 -0
- data/lib/bcdice/game_system/TrailOfCthulhu.rb +139 -0
- data/lib/bcdice/game_system/UnsungDuet.rb +17 -75
- data/lib/bcdice/game_system/UnsungDuet_Korean.rb +41 -0
- data/lib/bcdice/game_system/Utakaze.rb +55 -2
- data/lib/bcdice/game_system/Warhammer4.rb +124 -3
- data/lib/bcdice/game_system/Yotabana.rb +62 -0
- data/lib/bcdice/game_system/cyberpunk_red/tables.rb +111 -473
- data/lib/bcdice/game_system/kizuna_bullet/tables.rb +171 -0
- data/lib/bcdice/game_system.rb +16 -0
- data/lib/bcdice/version.rb +1 -1
- metadata +30 -2
@@ -3,281 +3,45 @@
|
|
3
3
|
module BCDice
|
4
4
|
module GameSystem
|
5
5
|
class CyberpunkRed < Base
|
6
|
-
NIGHT_MARKET_FOODS_TABLE = DiceTable::RangeTable.new(
|
7
|
-
"食品とドラッグ",
|
8
|
-
"1D100",
|
9
|
-
[
|
10
|
-
[1..5, "缶詰 100ed(安物)"],
|
11
|
-
[6..10, "パック入り食品 10ed(安物)"],
|
12
|
-
[11..15, "冷凍食品 10ed(安物)"],
|
13
|
-
[16..20, "穀物の袋 20ed(日用)"],
|
14
|
-
[21..25, "キブルのパック 10ed(安物)"],
|
15
|
-
[26..30, "プレパックの袋 20ed(日用)"],
|
16
|
-
[31..35, "ストリート・ドラッグ 20ed以下"],
|
17
|
-
[36..40, "低品質の酒 10ed(安物)"],
|
18
|
-
[41..45, "酒 20ed(日用)"],
|
19
|
-
[46..50, "高品質の酒 100ed(上等)"],
|
20
|
-
[51..55, "MRE 10ed(安物)"],
|
21
|
-
[56..60, "生きた鶏 50ed(程々)"],
|
22
|
-
[61..65, "生きた魚 50ed(程々)"],
|
23
|
-
[66..70, "生の果物 50ed(程々)"],
|
24
|
-
[71..75, "生野菜 50ed(程々)"],
|
25
|
-
[76..80, "根菜類 20ed(日用)"],
|
26
|
-
[81..85, "生きた豚 100ed(上等)"],
|
27
|
-
[86..90, "珍しい果物 100ed(上等)"],
|
28
|
-
[91..95, "珍しい野菜 100ed(上等)"],
|
29
|
-
[96..99, "ストリート・ドラッグ 50edちょうど"],
|
30
|
-
[100, "缶詰 100ed(安物) or ストリート・ドラッグ 50edちょうど"]
|
31
|
-
]
|
32
|
-
).freeze
|
33
|
-
|
34
|
-
NIGHT_MARKET_MECHANIC_TABLE = DiceTable::RangeTable.new(
|
35
|
-
"個人用電子機器",
|
36
|
-
"1D100",
|
37
|
-
[
|
38
|
-
[1..5, "エージェント 100ed(上等)"],
|
39
|
-
[6..10, "プログラムおよびハードウェア 100ed以下"],
|
40
|
-
[11..15, "オーディオ・レコーダー 100ed(上等)"],
|
41
|
-
[16..20, "盗聴器検出器 500ed(高級)"],
|
42
|
-
[21..25, "化学物質分析器 1,000ed(超高級)"],
|
43
|
-
[26..30, "コンピュータ 50ed(程々)"],
|
44
|
-
[31..35, "サイバーデッキ 500ed(高級)"],
|
45
|
-
[36..40, "使い捨て携帯電話 50ed(程々)"],
|
46
|
-
[41..45, "エレキギターその他の楽器 500ed(高級)"],
|
47
|
-
[46..50, "プログラムおよびハードウェア 500edちょうど"],
|
48
|
-
[51..55, "メドスキャナー 1,000ed(超高級)"],
|
49
|
-
[56..60, "追跡装置 500ed(高級)"],
|
50
|
-
[61..65, "無線通信機 100ed(上等)"],
|
51
|
-
[66..70, "テクスキャナー 1,000ed(超高級)"],
|
52
|
-
[71..75, "スマート・グラス 500ed(高級)"],
|
53
|
-
[76..80, "レーダー探知機 500ed(高級)"],
|
54
|
-
[81..85, "スクランブラー/ディスクランブラー 500ed(高級)"],
|
55
|
-
[86..90, "通信スキャナー/音楽プレイヤー 50ed(程々)"],
|
56
|
-
[91..95, "ブレインダンス・ビューア 1,000ed(超高級)"],
|
57
|
-
[96..99, "ヴァーチャリティ・ゴーグル 100ed(上等)"],
|
58
|
-
[100, "エージェント 100ed(上等) or ヴァーチャリティ・ゴーグル 100ed(上等)"]
|
59
|
-
]
|
60
|
-
).freeze
|
61
|
-
|
62
|
-
NIGHT_MARKET_WEAPONS_TABLE = DiceTable::RangeTable.new(
|
63
|
-
"武器と防具",
|
64
|
-
"1D100",
|
65
|
-
[
|
66
|
-
[1..5, "中型拳銃 50ed(程々)"],
|
67
|
-
[6..10, "大型拳銃および超大型拳銃 100ed(上等)"],
|
68
|
-
[11..15, "SMG 100ed(上等)"],
|
69
|
-
[16..20, "大型SMG 100ed(上等)"],
|
70
|
-
[21..25, "ショットガン 500ed(高級)"],
|
71
|
-
[26..30, "アサルト・ライフル 500ed(高級)"],
|
72
|
-
[31..35, "スナイパー・ライフル 500ed(高級)"],
|
73
|
-
[36..40, "弓およびクロスボウ 100ed(上等)"],
|
74
|
-
[41..45, "グレネード・ランチャーおよびロケット・ランチャー 500ed(高級)"],
|
75
|
-
[46..50, "弾薬 500ed以下"],
|
76
|
-
[51..55, "GMが選んだ特殊武器1個"],
|
77
|
-
[56..60, "小型近接武器 50ed(程々)"],
|
78
|
-
[61..65, "中型近接武器 50ed(程々)"],
|
79
|
-
[66..70, "大型近接武器 100ed(上等)"],
|
80
|
-
[71..75, "超大型近接武器 100ed(上等)"],
|
81
|
-
[76..80, "防具 100ed以下"],
|
82
|
-
[81..85, "防具 500edちょうど"],
|
83
|
-
[86..90, "防具 1,000edちょうど"],
|
84
|
-
[91..95, "武器用アタッチメント 100ed以下"],
|
85
|
-
[96..99, "武器用アタッチメント 500ed以上"],
|
86
|
-
[100, "中型拳銃 50ed(程々) or 武器用アタッチメント 500ed以上"]
|
87
|
-
]
|
88
|
-
).freeze
|
89
|
-
|
90
|
-
NIGHT_MARKET_CYBERWARE_TABLE = DiceTable::RangeTable.new(
|
91
|
-
"サイバーウェア",
|
92
|
-
"1D100",
|
93
|
-
[
|
94
|
-
[1..5, "サイバーアイ 100ed(上等)"],
|
95
|
-
[6..10, "サイバー聴覚基本システム 500ed(高級)"],
|
96
|
-
[11..15, "ニューラル・リンク 500ed(高級)"],
|
97
|
-
[16..20, "サイバーアーム 500ed(高級)"],
|
98
|
-
[21..25, "サイバーレッグ 100ed(上等)"],
|
99
|
-
[26..30, "体表用サイバーウェア 1,000edちょうど"],
|
100
|
-
[31..35, "体表用サイバーウェア 500ed以下"],
|
101
|
-
[36..40, "体内用サイバーウェア 1,000edちょうど"],
|
102
|
-
[41..45, "体内用サイバーウェア 500ed以下"],
|
103
|
-
[46..50, "サイバーアイのオプション 1,000edちょうど"],
|
104
|
-
[51..55, "サイバーアイのオプション 500ed以下"],
|
105
|
-
[56..60, "サイバー聴覚のオプション 1,000edちょうど"],
|
106
|
-
[61..65, "サイバー聴覚のオプション 500ed以下"],
|
107
|
-
[66..70, "ニューラルウェアのオプション 1,000edちょうど"],
|
108
|
-
[71..75, "ニューラルウェアのオプション 500ed以下"],
|
109
|
-
[76..80, "サイバー四肢のオプション 1,000edちょうど"],
|
110
|
-
[81..85, "サイバー四肢のオプション 500ed以下"],
|
111
|
-
[86..90, "GMが選んだファッションウェア"],
|
112
|
-
[91..95, "GMが選んだボーグウェア"],
|
113
|
-
[96..99, "GMが選んだ任意のサイバーウェア"],
|
114
|
-
[100, "サイバーアイ 100ed(上等) or GMが選んだ任意のサイバーウェア"]
|
115
|
-
]
|
116
|
-
).freeze
|
117
|
-
|
118
|
-
NIGHT_MARKET_FASHION_TABLE = DiceTable::RangeTable.new(
|
119
|
-
"衣料品とファッションウェア",
|
120
|
-
"1D100",
|
121
|
-
[
|
122
|
-
[1..5, "バッグ・レディ・シック"],
|
123
|
-
[6..10, "ギャング・カラー"],
|
124
|
-
[11..15, "ジェネリック・シック"],
|
125
|
-
[16..20, "ボヘミアン"],
|
126
|
-
[21..25, "レジャーウェア"],
|
127
|
-
[26..30, "ノーマッド・レザー"],
|
128
|
-
[31..35, "アジア・ポップ"],
|
129
|
-
[36..40, "アーバン・フラッシュ"],
|
130
|
-
[41..45, "ビジネスウェア"],
|
131
|
-
[46..50, "ハイ・ファッション"],
|
132
|
-
[51..55, "バイオモニタ 100ed(上等)"],
|
133
|
-
[56..60, "ケムスキン 100ed(上等)"],
|
134
|
-
[61..65, "EMPスレッディング 10ed(安物)"],
|
135
|
-
[66..70, "ライト・タトゥー 100ed(上等)"],
|
136
|
-
[71..75, "シフトタクト 100ed(上等)"],
|
137
|
-
[76..80, "スキンウォッチ 100ed(上等)"],
|
138
|
-
[81..85, "テックヘア 100ed(上等)"],
|
139
|
-
[86..90, "ジェネリック・シック"],
|
140
|
-
[91..95, "レジャーウェア"],
|
141
|
-
[96..99, "ギャング・カラー"],
|
142
|
-
[100, "バッグ・レディ・シック or ギャング・カラー"]
|
143
|
-
]
|
144
|
-
).freeze
|
145
|
-
|
146
|
-
NIGHT_MARKET_SUVIVAL_TABLE = DiceTable::RangeTable.new(
|
147
|
-
"サバイバル用品",
|
148
|
-
"1D100",
|
149
|
-
[
|
150
|
-
[1..5, "対スモッグ呼吸マスク 20ed(日用)"],
|
151
|
-
[6..10, "自動制音イヤー・プロテクタ 1,000ed(超高級)"],
|
152
|
-
[11..15, "双眼鏡 50ed(程々)"],
|
153
|
-
[16..20, "旅行バッグ 20ed(日用)"],
|
154
|
-
[21..25, "懐中電灯 20ed(日用)"],
|
155
|
-
[26..30, "ダクト・テープ 20ed(日用)"],
|
156
|
-
[31..35, "携帯用ベッド&寝袋 20ed(日用)"],
|
157
|
-
[36..40, "鍵開けセット 20ed(日用)"],
|
158
|
-
[41..45, "手錠 50ed(程々)"],
|
159
|
-
[46..50, "メドテク・バッグ 100ed(上等)"],
|
160
|
-
[51..55, "テント&キャンプ用品 50ed(程々)"],
|
161
|
-
[56..60, "ロープ(60m) 20ed(日用)"],
|
162
|
-
[61..65, "テクツール 100ed(上等)"],
|
163
|
-
[66..70, "パーソナル・ケアパック 20ed(日用)"],
|
164
|
-
[71..75, "放射線防護服 1,000ed(超高級)"],
|
165
|
-
[76..80, "発煙筒 10ed(安物)"],
|
166
|
-
[81..85, "グラップル・ガン 100ed(上等)"],
|
167
|
-
[86..90, "テク・バッグ 500ed(高級)"],
|
168
|
-
[91..95, "シャベルおよび斧 50ed(程々)"],
|
169
|
-
[96..99, "エアハイポ 50ed(程々)"],
|
170
|
-
[100, "対スモッグ呼吸マスク 20ed(日用) or エアハイポ 50ed(程々)"]
|
171
|
-
]
|
172
|
-
).freeze
|
173
|
-
|
174
|
-
SCREAM_SHEET_TYPE_TABLE = DiceTable::Table.new(
|
175
|
-
"スクリームシート分類",
|
176
|
-
"1D6",
|
177
|
-
[
|
178
|
-
"国際",
|
179
|
-
"全国",
|
180
|
-
"州",
|
181
|
-
"地方",
|
182
|
-
"経済",
|
183
|
-
"ゴシップ"
|
184
|
-
]
|
185
|
-
).freeze
|
186
|
-
|
187
|
-
SCREAM_SHEET_A_TABLE = DiceTable::Table.new(
|
188
|
-
"ヘッドラインA",
|
189
|
-
"1D10",
|
190
|
-
[
|
191
|
-
"(企業を1つ選ぶ)",
|
192
|
-
"上院議員/議員",
|
193
|
-
"大統領/会長/社長",
|
194
|
-
"企業/企業群",
|
195
|
-
"市議会",
|
196
|
-
"サイバーサイコ",
|
197
|
-
"殺し屋/殺人鬼",
|
198
|
-
"退治人/暴漢",
|
199
|
-
"悲劇的な/不運な",
|
200
|
-
"捜査員/研究員"
|
201
|
-
]
|
202
|
-
).freeze
|
203
|
-
|
204
|
-
SCREAM_SHEET_B_TABLE = DiceTable::Table.new(
|
205
|
-
"ヘッドラインB",
|
206
|
-
"1D10",
|
207
|
-
[
|
208
|
-
"協力を",
|
209
|
-
"シティを",
|
210
|
-
"妥協を/譲歩を",
|
211
|
-
"警告を",
|
212
|
-
"計画を",
|
213
|
-
"スキャンダルを",
|
214
|
-
"女性を",
|
215
|
-
"男性を",
|
216
|
-
"事故を",
|
217
|
-
"希望を"
|
218
|
-
]
|
219
|
-
).freeze
|
220
|
-
|
221
|
-
SCREAM_SHEET_C_TABLE = DiceTable::Table.new(
|
222
|
-
"ヘッドラインC",
|
223
|
-
"1D10",
|
224
|
-
[
|
225
|
-
"提案/提供",
|
226
|
-
"脅かす/危機",
|
227
|
-
"妥協/譲歩",
|
228
|
-
"殺害/破綻/破棄",
|
229
|
-
"殺害される/中止/中断",
|
230
|
-
"死亡/終了/途絶える",
|
231
|
-
"賞賛/表彰/好評",
|
232
|
-
"表明/発表",
|
233
|
-
"判明/暴露/発覚",
|
234
|
-
"継続"
|
235
|
-
]
|
236
|
-
).freeze
|
237
|
-
|
238
|
-
SCREAM_SHEET_OF_TABLE = DiceTable::Table.new(
|
239
|
-
"ヘッドライン助詞",
|
240
|
-
"1D6",
|
241
|
-
[
|
242
|
-
"を",
|
243
|
-
"が",
|
244
|
-
"に対し",
|
245
|
-
"とともに",
|
246
|
-
"より",
|
247
|
-
"へ向けて"
|
248
|
-
]
|
249
|
-
).freeze
|
250
|
-
|
251
6
|
class ScreamSheetRandomizerTable
|
7
|
+
def initialize(locale:, type_table:, a_table:, of_table:, b_table:, c_table:)
|
8
|
+
@locale = locale
|
9
|
+
@type_table = type_table
|
10
|
+
@a_table = a_table
|
11
|
+
@of_table = of_table
|
12
|
+
@b_table = b_table
|
13
|
+
@c_table = c_table
|
14
|
+
end
|
15
|
+
|
252
16
|
def roll(randomizer)
|
253
17
|
result = ""
|
254
18
|
|
255
19
|
dice = randomizer.roll_once(6)
|
256
|
-
scs_type =
|
257
|
-
result += "#{scs_type}
|
20
|
+
scs_type = @type_table.choice(dice)
|
21
|
+
result += "#{scs_type}#{I18n.translate('CyberpunkRed.news', locale: @locale, raise: true)} 『"
|
258
22
|
|
259
23
|
dice = randomizer.roll_once(10)
|
260
|
-
scs_val_a =
|
24
|
+
scs_val_a = @a_table.choice(dice).body
|
261
25
|
result += scs_val_a
|
262
26
|
|
263
27
|
dice = randomizer.roll_once(6)
|
264
|
-
scs_val_of =
|
28
|
+
scs_val_of = @of_table.choice(dice).body
|
265
29
|
result += scs_val_of
|
266
30
|
|
267
31
|
dice = randomizer.roll_once(10)
|
268
|
-
scs_val_a =
|
32
|
+
scs_val_a = @a_table.choice(dice).body
|
269
33
|
result += scs_val_a
|
270
34
|
|
271
35
|
dice = randomizer.roll_once(6)
|
272
|
-
scs_val_of =
|
36
|
+
scs_val_of = @of_table.choice(dice).body
|
273
37
|
result += scs_val_of
|
274
38
|
|
275
39
|
dice = randomizer.roll_once(10)
|
276
|
-
scs_val_b =
|
40
|
+
scs_val_b = @b_table.choice(dice).body
|
277
41
|
result += scs_val_b
|
278
42
|
|
279
43
|
dice = randomizer.roll_once(10)
|
280
|
-
scs_val_c =
|
44
|
+
scs_val_c = @c_table.choice(dice).body
|
281
45
|
result += scs_val_c
|
282
46
|
|
283
47
|
result += "』"
|
@@ -286,245 +50,119 @@ module BCDice
|
|
286
50
|
end
|
287
51
|
end
|
288
52
|
|
289
|
-
SCREAM_SHEET_RANDOM_TABLE = ScreamSheetRandomizerTable.new().freeze
|
290
|
-
|
291
|
-
VENDING_MACHINE_TYPE_TABLE = DiceTable::RangeTable.new(
|
292
|
-
"最寄りの自販機のタイプ",
|
293
|
-
"1D6",
|
294
|
-
[
|
295
|
-
[1..3, "食品"],
|
296
|
-
[4..5, "ファッション"],
|
297
|
-
[6, "変なもの"]
|
298
|
-
]
|
299
|
-
).freeze
|
300
|
-
|
301
|
-
VENDING_MACHINE_FOOD_TABLE = DiceTable::Table.new(
|
302
|
-
"食品",
|
303
|
-
"1D10",
|
304
|
-
[
|
305
|
-
"ラーメン",
|
306
|
-
"ピザ",
|
307
|
-
"ハンバーガー",
|
308
|
-
"スマッシュ",
|
309
|
-
"スシ",
|
310
|
-
"暖かい肉料理",
|
311
|
-
"キブルの1kgパック",
|
312
|
-
"缶コーヒー",
|
313
|
-
"缶ジュース",
|
314
|
-
"缶入りの清涼飲料水"
|
315
|
-
]
|
316
|
-
).freeze
|
317
|
-
|
318
|
-
VENDING_MACHINE_FASHION_TABLE = DiceTable::Table.new(
|
319
|
-
"ファッション",
|
320
|
-
"1D10",
|
321
|
-
[
|
322
|
-
"缶に入ったTシャツ",
|
323
|
-
"性的玩具",
|
324
|
-
"傘",
|
325
|
-
"ネクタイ",
|
326
|
-
"外科手術用マスク",
|
327
|
-
"下着",
|
328
|
-
"花束",
|
329
|
-
"銃と弾",
|
330
|
-
"ブレインダンス・チップ",
|
331
|
-
"ビデオゲーム"
|
332
|
-
]
|
333
|
-
).freeze
|
334
|
-
|
335
|
-
VENDING_MACHINE_STRANGE_TABLE = DiceTable::Table.new(
|
336
|
-
"変なもの",
|
337
|
-
"1D10",
|
338
|
-
[
|
339
|
-
"ペット用のカツラ",
|
340
|
-
"バグ・スナック(昆虫料理)",
|
341
|
-
"レタス1玉",
|
342
|
-
"トビウオがまるごと入ったスープ",
|
343
|
-
"人工培養シーフード",
|
344
|
-
"匂いの缶詰",
|
345
|
-
"生きたカブトムシ",
|
346
|
-
"紙製のコスプレ衣装",
|
347
|
-
"奇妙なカプセル・トイ",
|
348
|
-
"使用済みのパンティ"
|
349
|
-
]
|
350
|
-
).freeze
|
351
|
-
|
352
|
-
SHOP_STAFF_TABLE = DiceTable::Table.new(
|
353
|
-
"店主またはレジ係",
|
354
|
-
"1D6",
|
355
|
-
[
|
356
|
-
"母性的な老婆。客を自分の子供のように扱い、世話を焼いたり小言を言う。",
|
357
|
-
"怒りっぽい年寄り。皆が嫌いで、特におまえのことが大嫌いだ。",
|
358
|
-
"退屈しきったヨーギャンガー。両親の手でレジに繋がれている。",
|
359
|
-
"異様になれなれしく、おまえに付きまとい続ける鬱陶しいやつ。",
|
360
|
-
"露骨な薬物常用者。おまえにひらひら手を振って「もうどうにでもしてくれ……」と言う。",
|
361
|
-
"理解不能な中年。何かつけておまえに文句を言おうとする。"
|
362
|
-
]
|
363
|
-
).freeze
|
364
|
-
|
365
|
-
SHOP_PEOPLE_A_TABLE = DiceTable::Table.new(
|
366
|
-
"変わった客その1",
|
367
|
-
"1D6",
|
368
|
-
[
|
369
|
-
"ぶつぶつ独り言を言い続ける客。急に立ち止まっておまえをじろじろ見る。",
|
370
|
-
"騒ぎ立てる迷惑な酔っぱらい。",
|
371
|
-
"薬物に酔った客。彼にしか見えない何かを殴ろうと拳を振り回している。",
|
372
|
-
"金欠のジョイガール/ボーイ(娼婦/男娼)。「お願いを聞いてあげるから、スマッシュをおごってくれない?」と持ちかけてくる。",
|
373
|
-
"非番のローマン。すぐに食べられるものを探しており、おしゃべりをしたい雰囲気ではない。",
|
374
|
-
"ストリートで襲われる不安に駆られた客。誰かに近寄られると身構える(銃を抜くかもしれない)。"
|
375
|
-
]
|
376
|
-
).freeze
|
377
|
-
|
378
|
-
SHOP_PEOPLE_B_TABLE = DiceTable::Table.new(
|
379
|
-
"変わった客その2",
|
380
|
-
"1D6",
|
381
|
-
[
|
382
|
-
"この店に強盗に入る下見中のヨーギャンガー。強盗になる覚悟はまだ固まっていないようだ。",
|
383
|
-
"1d6ターン後にこの店を襲う予定のギャンガー。",
|
384
|
-
"店主を痛めつけて”みかじめ料”を取り立てようとする三流のギャンガー。",
|
385
|
-
"かわいらしい四歳の迷子。”ママ”を探して偶然この店に入り込んだ。",
|
386
|
-
"口論しながら入店したカップル。声はどんどんやかましくなる。",
|
387
|
-
"場違いに高そうな服を着た金持ちのカップル。上流社会のパーティーからの帰り道に、酒を買おうとしてたまたまこの店に立ち寄った。"
|
388
|
-
]
|
389
|
-
).freeze
|
390
|
-
|
391
53
|
class ShopPeopleTable
|
54
|
+
def initialize(locale:, staff_table:, people_a_table:, people_b_table:)
|
55
|
+
@locale = locale
|
56
|
+
@staff_table = staff_table
|
57
|
+
@people_a_table = people_a_table
|
58
|
+
@people_b_table = people_b_table
|
59
|
+
end
|
60
|
+
|
392
61
|
def roll(randomizer)
|
393
|
-
result = "
|
62
|
+
result = I18n.translate("CyberpunkRed.ShopPeopleTableText.intro", locale: @locale, raise: true)
|
394
63
|
|
395
64
|
dice = randomizer.roll_once(6)
|
396
|
-
staff =
|
65
|
+
staff = @staff_table.choice(dice).body
|
397
66
|
staff = staff[0..-2]
|
398
67
|
result += staff
|
399
|
-
result += "
|
68
|
+
result += I18n.translate("CyberpunkRed.ShopPeopleTableText.shop_staff", locale: @locale, raise: true)
|
400
69
|
|
401
70
|
dice = randomizer.roll_once(6)
|
402
|
-
people =
|
71
|
+
people = @people_a_table.choice(dice).body
|
403
72
|
people = people[0..-2]
|
404
73
|
result += people
|
405
|
-
result += "
|
74
|
+
result += I18n.translate("CyberpunkRed.ShopPeopleTableText.people_a", locale: @locale, raise: true)
|
406
75
|
|
407
76
|
dice = randomizer.roll_once(6)
|
408
|
-
people =
|
77
|
+
people = @people_b_table.choice(dice).body
|
409
78
|
people = people[0..-2]
|
410
79
|
result += people
|
411
|
-
result += "
|
412
|
-
result += "
|
80
|
+
result += I18n.translate("CyberpunkRed.ShopPeopleTableText.people_b", locale: @locale, raise: true)
|
81
|
+
result += I18n.translate("CyberpunkRed.ShopPeopleTableText.outro", locale: @locale, raise: true)
|
413
82
|
|
414
83
|
return result
|
415
84
|
end
|
416
85
|
end
|
417
86
|
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
"
|
423
|
-
"
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
"
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
"
|
447
|
-
"
|
448
|
-
"
|
449
|
-
"
|
450
|
-
"
|
451
|
-
"
|
452
|
-
"
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
[88..92, "ギャングの抗争 > すげえ。PCはこの地域で最大級のギャング団同士の、縄張りを賭けた全面衝突の場に居合わせちまった。P.424参照。"],
|
498
|
-
[93..99, "メジャー級の犯罪者 > PCは悪名高いスカガッタリア・ファミリーの大きな仕事の真っただ中に迷い込んだ。P.424参照。"],
|
499
|
-
[100, "暴れまわるサイバーサイコ > ギラギラと輝くメタル・ボディのサイバーサイコが1体。通行人がうかつに挑発し過ぎて最後のエッジを超えさせてしまったらしく、そいつに湧き上がる怒りを叩きつけている。P.424参照。"],
|
500
|
-
]
|
501
|
-
),
|
502
|
-
"SCST" => SCREAM_SHEET_TYPE_TABLE,
|
503
|
-
"SCSA" => SCREAM_SHEET_A_TABLE,
|
504
|
-
"SCSB" => SCREAM_SHEET_B_TABLE,
|
505
|
-
"SCSC" => SCREAM_SHEET_C_TABLE,
|
506
|
-
"SCSR" => SCREAM_SHEET_RANDOM_TABLE,
|
507
|
-
"VMCT" => VENDING_MACHINE_TYPE_TABLE,
|
508
|
-
"VMCE" => VENDING_MACHINE_FOOD_TABLE,
|
509
|
-
"VMCF" => VENDING_MACHINE_FASHION_TABLE,
|
510
|
-
"VMCS" => VENDING_MACHINE_STRANGE_TABLE,
|
511
|
-
"VMCR" => DiceTable::ChainTable.new(
|
512
|
-
"最寄りの自動販売機表",
|
513
|
-
"1D6",
|
514
|
-
[
|
515
|
-
VENDING_MACHINE_FOOD_TABLE,
|
516
|
-
VENDING_MACHINE_FOOD_TABLE,
|
517
|
-
VENDING_MACHINE_FOOD_TABLE,
|
518
|
-
VENDING_MACHINE_FASHION_TABLE,
|
519
|
-
VENDING_MACHINE_FASHION_TABLE,
|
520
|
-
VENDING_MACHINE_STRANGE_TABLE
|
521
|
-
]
|
522
|
-
),
|
523
|
-
"STOREA" => SHOP_STAFF_TABLE,
|
524
|
-
"STOREB" => SHOP_PEOPLE_A_TABLE,
|
525
|
-
"STOREC" => SHOP_PEOPLE_B_TABLE,
|
526
|
-
"STORE" => SHOP_PEOPLE_TABLE
|
527
|
-
}.freeze
|
87
|
+
class << self
|
88
|
+
private
|
89
|
+
|
90
|
+
def translate_tables(locale)
|
91
|
+
nigit_market_type_table = DiceTable::Table.from_i18n("CyberpunkRed.NightMarketTypeTable", locale)
|
92
|
+
night_market_foods_table = DiceTable::RangeTable.from_i18n("CyberpunkRed.NightMarketFoodsTable", locale)
|
93
|
+
night_market_mechanic_table = DiceTable::RangeTable.from_i18n("CyberpunkRed.NightMarketMechanicTable", locale)
|
94
|
+
night_market_weapons_table = DiceTable::RangeTable.from_i18n("CyberpunkRed.NightMarketWeaponsTable", locale)
|
95
|
+
night_market_cyberware_table = DiceTable::RangeTable.from_i18n("CyberpunkRed.NightMarketCyberwareTable", locale)
|
96
|
+
night_market_fashion_table = DiceTable::RangeTable.from_i18n("CyberpunkRed.NightMarketFashionTable", locale)
|
97
|
+
night_market_suvival_table = DiceTable::RangeTable.from_i18n("CyberpunkRed.NightMarketSuvivalTable", locale)
|
98
|
+
|
99
|
+
scream_sheet_type_table = DiceTable::Table.from_i18n("CyberpunkRed.ScreamSheetTypeTable", locale)
|
100
|
+
scream_sheet_a_table = DiceTable::Table.from_i18n("CyberpunkRed.ScreamSheetATable", locale)
|
101
|
+
scream_sheet_b_table = DiceTable::Table.from_i18n("CyberpunkRed.ScreamSheetBTable", locale)
|
102
|
+
scream_sheet_c_table = DiceTable::Table.from_i18n("CyberpunkRed.ScreamSheetCTable", locale)
|
103
|
+
scream_sheet_of_table = DiceTable::Table.from_i18n("CyberpunkRed.ScreamSheetOfTable", locale)
|
104
|
+
|
105
|
+
vending_machine_type_table = DiceTable::RangeTable.from_i18n("CyberpunkRed.VendingMachineTypeTable", locale)
|
106
|
+
vending_machine_food_table = DiceTable::Table.from_i18n("CyberpunkRed.VendingMachineFoodTable", locale)
|
107
|
+
vending_machine_fashion_table = DiceTable::Table.from_i18n("CyberpunkRed.VendingMachineFashionTable", locale)
|
108
|
+
vending_machine_strange_table = DiceTable::Table.from_i18n("CyberpunkRed.VendingMachineStrangeTable", locale)
|
109
|
+
|
110
|
+
shop_staff_table = DiceTable::Table.from_i18n("CyberpunkRed.ShopStaffTable", locale)
|
111
|
+
shop_people_a_table = DiceTable::Table.from_i18n("CyberpunkRed.ShopPeopleATable", locale)
|
112
|
+
shop_people_b_table = DiceTable::Table.from_i18n("CyberpunkRed.ShopPeopleBTable", locale)
|
113
|
+
|
114
|
+
return {
|
115
|
+
"FFD" => DiceTable::Table.from_i18n("CyberpunkRed.FrameFatalDamageTable", locale),
|
116
|
+
"HFD" => DiceTable::Table.from_i18n("CyberpunkRed.HeadFatalDamageTable", locale),
|
117
|
+
"NCDT" => DiceTable::RangeTable.from_i18n("CyberpunkRed.NightCityDaytimeEncounterTable", locale),
|
118
|
+
"NCMT" => DiceTable::RangeTable.from_i18n("CyberpunkRed.NightCityMidnightEncounterTable", locale),
|
119
|
+
"NMCT" => nigit_market_type_table,
|
120
|
+
"NMCFO" => night_market_foods_table,
|
121
|
+
"NMCME" => night_market_mechanic_table,
|
122
|
+
"NMCWE" => night_market_weapons_table,
|
123
|
+
"NMCCY" => night_market_cyberware_table,
|
124
|
+
"NMCFA" => night_market_fashion_table,
|
125
|
+
"NMCSU" => night_market_suvival_table,
|
126
|
+
"SCST" => scream_sheet_type_table,
|
127
|
+
"SCSA" => scream_sheet_a_table,
|
128
|
+
"SCSB" => scream_sheet_b_table,
|
129
|
+
"SCSC" => scream_sheet_c_table,
|
130
|
+
"SCSR" => ScreamSheetRandomizerTable.new(
|
131
|
+
locale: locale,
|
132
|
+
type_table: scream_sheet_type_table,
|
133
|
+
a_table: scream_sheet_a_table,
|
134
|
+
b_table: scream_sheet_b_table,
|
135
|
+
c_table: scream_sheet_c_table,
|
136
|
+
of_table: scream_sheet_of_table
|
137
|
+
).freeze,
|
138
|
+
"VMCT" => vending_machine_type_table,
|
139
|
+
"VMCE" => vending_machine_food_table,
|
140
|
+
"VMCF" => vending_machine_fashion_table,
|
141
|
+
"VMCS" => vending_machine_strange_table,
|
142
|
+
"VMCR" => DiceTable::ChainTable.new(
|
143
|
+
I18n.translate("CyberpunkRed.VendingMachineTable.name", locale: locale, raise: true),
|
144
|
+
"1D6",
|
145
|
+
[
|
146
|
+
vending_machine_food_table,
|
147
|
+
vending_machine_food_table,
|
148
|
+
vending_machine_food_table,
|
149
|
+
vending_machine_fashion_table,
|
150
|
+
vending_machine_fashion_table,
|
151
|
+
vending_machine_strange_table
|
152
|
+
]
|
153
|
+
),
|
154
|
+
"STOREA" => shop_staff_table,
|
155
|
+
"STOREB" => shop_people_a_table,
|
156
|
+
"STOREC" => shop_people_b_table,
|
157
|
+
"STORE" => ShopPeopleTable.new(
|
158
|
+
locale: locale,
|
159
|
+
staff_table: shop_staff_table,
|
160
|
+
people_a_table: shop_people_a_table,
|
161
|
+
people_b_table: shop_people_b_table
|
162
|
+
).freeze
|
163
|
+
}.freeze
|
164
|
+
end
|
165
|
+
end
|
528
166
|
end
|
529
167
|
end
|
530
168
|
end
|