bcdice 3.15.0 → 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 +140 -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/DoubleCross/ja_jp.yml +2 -2
- data/i18n/Dracurouge/ko_kr.yml +1284 -205
- data/i18n/Emoklore/ja_jp.yml +1 -0
- data/i18n/Emoklore/ko_kr.yml +8 -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/SkynautsBouken/ja_jp.yml +28 -28
- 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/EdgeFlippers.rb +315 -0
- data/lib/bcdice/game_system/Emoklore.rb +34 -9
- data/lib/bcdice/game_system/Emoklore_Korean.rb +50 -0
- 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/Garactier.rb +1 -1
- 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 +46 -0
- 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/MeikyuKingdomBasic.rb +122 -2
- 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 +51 -0
- 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 +41 -0
- 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/meikyu_kingdom_basic/atoz_table.rb +1184 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/randr236_table.rb +254 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/table.rb +54 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/tk_table.rb +755 -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 +47 -0
- data/lib/bcdice/version.rb +1 -1
- metadata +96 -2
|
@@ -56,7 +56,7 @@ module BCDice
|
|
|
56
56
|
when /KC\d[-+\d]*/ then check_1D12(command, false)
|
|
57
57
|
when 'CTR' then get_trap_result()
|
|
58
58
|
when 'EET' then get_escape_experience_table_result(command)
|
|
59
|
-
else roll_tables(command, TABLES)
|
|
59
|
+
else roll_tables(command, self.class::TABLES)
|
|
60
60
|
end
|
|
61
61
|
end
|
|
62
62
|
|
|
@@ -77,299 +77,90 @@ module BCDice
|
|
|
77
77
|
debug('dice_total, target_total, success_degree = ', dice_total, target_total, success_degree)
|
|
78
78
|
|
|
79
79
|
if dice_total == 12
|
|
80
|
-
Result.fumble("(1D12<=#{target_total}) > #{dice_total} >
|
|
80
|
+
Result.fumble("(1D12<=#{target_total}) > #{dice_total} > #{translate('KemonoNoMori.fumble')}")
|
|
81
81
|
elsif dice_total == 11
|
|
82
|
-
Result.critical("(1D12<=#{target_total}) > #{dice_total} >
|
|
82
|
+
Result.critical("(1D12<=#{target_total}) > #{dice_total} > #{translate('KemonoNoMori.critical', success_degree: success_degree)}")
|
|
83
83
|
elsif dice_total <= target_total
|
|
84
|
-
Result.success("(1D12<=#{target_total}) > #{dice_total} >
|
|
84
|
+
Result.success("(1D12<=#{target_total}) > #{dice_total} > #{translate('KemonoNoMori.success', success_degree: success_degree)}")
|
|
85
85
|
else
|
|
86
|
-
Result.failure("(1D12<=#{target_total}) > #{dice_total} >
|
|
86
|
+
Result.failure("(1D12<=#{target_total}) > #{dice_total} > #{translate('failure')}")
|
|
87
87
|
end
|
|
88
88
|
end
|
|
89
89
|
|
|
90
90
|
def get_trap_result()
|
|
91
91
|
tra_check_num = @randomizer.roll_once(12)
|
|
92
92
|
unless tra_check_num == 12
|
|
93
|
-
return Result.new(
|
|
93
|
+
return Result.new(translate('KemonoNoMori.trap_not_activated', check_num: tra_check_num))
|
|
94
94
|
end
|
|
95
95
|
|
|
96
96
|
chase_num = @randomizer.roll_once(12)
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
Result.new(
|
|
97
|
+
chase_key = case chase_num
|
|
98
|
+
when 1..4 then 'KemonoNoMori.trap_activated_small'
|
|
99
|
+
when 5..8 then 'KemonoNoMori.trap_activated_large'
|
|
100
|
+
when 9..12 then 'KemonoNoMori.trap_activated_human'
|
|
101
|
+
end
|
|
102
|
+
Result.new(translate(chase_key, check_num: tra_check_num, chase_num: chase_num))
|
|
103
103
|
end
|
|
104
104
|
|
|
105
105
|
def get_escape_experience_table_result(command)
|
|
106
|
-
escape_experience = roll_tables(command, TABLES)
|
|
106
|
+
escape_experience = roll_tables(command, self.class::TABLES)
|
|
107
107
|
escape_duration = @randomizer.roll_once(12)
|
|
108
|
-
Result.new("#{escape_experience} (
|
|
108
|
+
Result.new("#{escape_experience} (#{translate('KemonoNoMori.reappear', hours: escape_duration)})")
|
|
109
109
|
end
|
|
110
110
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
[7..8, '強風'],
|
|
165
|
-
[9..10, '酷暑'],
|
|
166
|
-
[11..12, '極寒'],
|
|
167
|
-
]
|
|
168
|
-
),
|
|
169
|
-
'RWDT' => DiceTable::RangeTable.new(
|
|
170
|
-
'ランダム天気持続表',
|
|
171
|
-
'1D12',
|
|
172
|
-
[
|
|
173
|
-
[1..2, '1ターン'],
|
|
174
|
-
[3..4, '3ターン'],
|
|
175
|
-
[5..6, '6ターン'],
|
|
176
|
-
[7..8, '24ターン'],
|
|
177
|
-
[9..10, '72ターン'],
|
|
178
|
-
[11..12, '156ターン'],
|
|
179
|
-
]
|
|
180
|
-
),
|
|
181
|
-
'ROMT' => DiceTable::RangeTable.new(
|
|
182
|
-
'ランダム遮蔽物表(屋外)',
|
|
183
|
-
'1D12',
|
|
184
|
-
[
|
|
185
|
-
[1..2, '【藪】耐久度3,軽減値1,特殊効果:コンタクト内のキャラクターに対する射撃攻撃判定に-1の修正を付加'],
|
|
186
|
-
[3..5, '【木】耐久度5,軽減値2,特殊効果:コンタクト内のキャラクターに対する射撃攻撃判定に-1の修正を付加'],
|
|
187
|
-
[6..8, '【大木】耐久度7,軽減値3,特殊効果:コンタクト内のキャラクターに対する射撃攻撃判定に-2の修正を付加'],
|
|
188
|
-
[9..10, '【岩】耐久度6,軽減値4,特殊効果:コンタクト内のキャラクターに対する射撃攻撃判定に-1の修正を付加/コンタクト内で行われる格闘攻撃のダメージ+1'],
|
|
189
|
-
[11..12, '【岩壁】耐久度8,軽減値4,特殊効果:コンタクト内のキャラクターに対する射撃攻撃判定に-2の修正を付加/コンタクト内で行われる格闘攻撃のダメージ+2'],
|
|
190
|
-
]
|
|
191
|
-
),
|
|
192
|
-
'RIMT' => DiceTable::RangeTable.new(
|
|
193
|
-
'ランダム遮蔽物表(屋内)',
|
|
194
|
-
'1D12',
|
|
195
|
-
[
|
|
196
|
-
[1..4, '【木材の壁】耐久度4,軽減値2,特殊効果:コンタクト内のキャラクターに対する射撃攻撃判定に-1の修正を付加'],
|
|
197
|
-
[5..8, '【木材の扉】耐久度4,軽減値2,特殊効果:コンタクト内のキャラクターに対する射撃攻撃判定に-1、接触判定と突撃判定に-2の修正を付加'],
|
|
198
|
-
[9..12, '【木製家具】耐久度3,軽減値2,特殊効果:コンタクト内で行われる格闘攻撃のダメージ+1'],
|
|
199
|
-
]
|
|
200
|
-
),
|
|
201
|
-
'EET' => DiceTable::RangeTable.new(
|
|
202
|
-
'逃走体験表',
|
|
203
|
-
'1D12',
|
|
204
|
-
[
|
|
205
|
-
[1..3, '【余裕】が0になる'],
|
|
206
|
-
[4..6, '任意の【絆】を合計2点減少する'],
|
|
207
|
-
[7..9, '全ての荷物を失う(逃走したエリアに配置され、調査で発見可能)'],
|
|
208
|
-
[10..12, '全ての武器と防具と小道具と荷物を失う(逃走したエリアに配置され、調査で発見可能)'],
|
|
209
|
-
]
|
|
210
|
-
),
|
|
211
|
-
'GFT' => DiceTable::RangeTable.new(
|
|
212
|
-
'食材採集表',
|
|
213
|
-
'1D12',
|
|
214
|
-
[
|
|
215
|
-
[1..2, '食べられる根(栄養価:2)'],
|
|
216
|
-
[3..5, '食べられる草(栄養価:3)'],
|
|
217
|
-
[6..8, '食べられる実(栄養価:5)'],
|
|
218
|
-
[9..10, '小型動物(栄養価:10)'],
|
|
219
|
-
[11, '大型動物(栄養価:40)'],
|
|
220
|
-
[12, '気持ち悪い虫(栄養価:1)'],
|
|
221
|
-
]
|
|
222
|
-
),
|
|
223
|
-
'GWT' => DiceTable::RangeTable.new(
|
|
224
|
-
'水採集表',
|
|
225
|
-
'1D12',
|
|
226
|
-
[
|
|
227
|
-
[1..6, '汚水'],
|
|
228
|
-
[7..11, '飲料水'],
|
|
229
|
-
[12, '毒水'],
|
|
230
|
-
]
|
|
231
|
-
),
|
|
232
|
-
'WST' => DiceTable::Table.new(
|
|
233
|
-
'白の魔石効果表',
|
|
234
|
-
'1D12',
|
|
235
|
-
[
|
|
236
|
-
'役に立たないものの色を変える',
|
|
237
|
-
'役に立たないものを大きくする',
|
|
238
|
-
'役に立たないものを小さくする',
|
|
239
|
-
'役に立たないものを保存する',
|
|
240
|
-
'役に立たないものを復元する',
|
|
241
|
-
'役に立たないものを召喚する',
|
|
242
|
-
'役に立たないものを動かす',
|
|
243
|
-
'役に立たないものを増やす',
|
|
244
|
-
'役に立たないものを貼り付ける',
|
|
245
|
-
'役に立たないものを作り出す',
|
|
246
|
-
'小型動物を召喚する',
|
|
247
|
-
'大型動物を召喚する',
|
|
248
|
-
]
|
|
249
|
-
),
|
|
250
|
-
'HPT' => DiceTable::RangeTable.new(
|
|
251
|
-
'人間部位表',
|
|
252
|
-
'1D12',
|
|
253
|
-
[
|
|
254
|
-
[1..2, '右腕部'],
|
|
255
|
-
[3..4, '左腕部'],
|
|
256
|
-
[5..6, '右脚部'],
|
|
257
|
-
[7..8, '左脚部'],
|
|
258
|
-
[9..11, '胴部'],
|
|
259
|
-
[12, '頭部'],
|
|
260
|
-
]
|
|
261
|
-
),
|
|
262
|
-
'PDT' => DiceTable::RangeTable.new(
|
|
263
|
-
'部位ダメージ段階表',
|
|
264
|
-
'1D12',
|
|
265
|
-
[
|
|
266
|
-
[1..6, '軽傷'],
|
|
267
|
-
[7..10, '重傷'],
|
|
268
|
-
[11, '破壊'],
|
|
269
|
-
[12, '喪失'],
|
|
270
|
-
]
|
|
271
|
-
),
|
|
272
|
-
'QPT' => DiceTable::RangeTable.new(
|
|
273
|
-
'四足動物部位表',
|
|
274
|
-
'1D12',
|
|
275
|
-
[
|
|
276
|
-
[1..2, '異形'],
|
|
277
|
-
[3, '武器'],
|
|
278
|
-
[4, '右前脚部'],
|
|
279
|
-
[5, '左前脚部'],
|
|
280
|
-
[6, '右後脚部'],
|
|
281
|
-
[7, '左後脚部'],
|
|
282
|
-
[8..10, '胴部'],
|
|
283
|
-
[11..12, '頭部'],
|
|
284
|
-
]
|
|
285
|
-
),
|
|
286
|
-
'APT' => DiceTable::RangeTable.new(
|
|
287
|
-
'無足動物部位表',
|
|
288
|
-
'1D12',
|
|
289
|
-
[
|
|
290
|
-
[1..3, '異形'],
|
|
291
|
-
[4..6, '武器'],
|
|
292
|
-
[7..10, '胴部'],
|
|
293
|
-
[11..12, '頭部'],
|
|
294
|
-
]
|
|
295
|
-
),
|
|
296
|
-
'TPT' => DiceTable::RangeTable.new(
|
|
297
|
-
'二足動物部位表',
|
|
298
|
-
'1D12',
|
|
299
|
-
[
|
|
300
|
-
[1, '異形'],
|
|
301
|
-
[2, '武器'],
|
|
302
|
-
[3, '右腕部'],
|
|
303
|
-
[4, '左腕部'],
|
|
304
|
-
[5..6, '右脚部'],
|
|
305
|
-
[7..8, '左脚部'],
|
|
306
|
-
[9..11, '胴部'],
|
|
307
|
-
[12, '頭部'],
|
|
308
|
-
]
|
|
309
|
-
),
|
|
310
|
-
'BPT' => DiceTable::RangeTable.new(
|
|
311
|
-
'鳥部位表',
|
|
312
|
-
'1D12',
|
|
313
|
-
[
|
|
314
|
-
[1, '異形'],
|
|
315
|
-
[2, '武器'],
|
|
316
|
-
[3..4, '右翼(右腕部)'],
|
|
317
|
-
[5..6, '左翼(左腕部)'],
|
|
318
|
-
[7, '右脚部'],
|
|
319
|
-
[8, '左脚部'],
|
|
320
|
-
[9..11, '胴部'],
|
|
321
|
-
[12, '頭部'],
|
|
322
|
-
]
|
|
323
|
-
),
|
|
324
|
-
'CPT' => DiceTable::RangeTable.new(
|
|
325
|
-
'頭足動物部位表',
|
|
326
|
-
'1D12',
|
|
327
|
-
[
|
|
328
|
-
[1, '異形'],
|
|
329
|
-
[2, '武器'],
|
|
330
|
-
[3, '右腕部'],
|
|
331
|
-
[4, '左腕部'],
|
|
332
|
-
[5..7, '右脚部'],
|
|
333
|
-
[8..10, '左脚部'],
|
|
334
|
-
[11, '胴部'],
|
|
335
|
-
[12, '頭部'],
|
|
336
|
-
]
|
|
337
|
-
),
|
|
338
|
-
'IPT' => DiceTable::RangeTable.new(
|
|
339
|
-
'昆虫部位表',
|
|
340
|
-
'1D12',
|
|
341
|
-
[
|
|
342
|
-
[1..2, '異形'],
|
|
343
|
-
[3, '武器'],
|
|
344
|
-
[4, '右前脚部'],
|
|
345
|
-
[5, '左前脚部'],
|
|
346
|
-
[6, '右中脚部'],
|
|
347
|
-
[7, '左中脚部'],
|
|
348
|
-
[8, '右後脚部'],
|
|
349
|
-
[9, '左後脚部'],
|
|
350
|
-
[10..11, '胴部'],
|
|
351
|
-
[12, '頭部'],
|
|
352
|
-
]
|
|
353
|
-
),
|
|
354
|
-
'SPT' => DiceTable::RangeTable.new(
|
|
355
|
-
'蜘蛛部位表',
|
|
356
|
-
'1D12',
|
|
357
|
-
[
|
|
358
|
-
[1, '異形'],
|
|
359
|
-
[2, '武器'],
|
|
360
|
-
[3, '右第一脚部'],
|
|
361
|
-
[4, '左第一脚部'],
|
|
362
|
-
[5, '右第二脚部'],
|
|
363
|
-
[6, '左第二脚部'],
|
|
364
|
-
[7, '右第三脚部'],
|
|
365
|
-
[8, '左第三脚部'],
|
|
366
|
-
[9, '右第四脚部'],
|
|
367
|
-
[10, '左第四脚部'],
|
|
368
|
-
[11, '胴部'],
|
|
369
|
-
[12, '頭部'],
|
|
370
|
-
]
|
|
371
|
-
),
|
|
372
|
-
}.freeze
|
|
111
|
+
class << self
|
|
112
|
+
private
|
|
113
|
+
|
|
114
|
+
def translate_tables(locale)
|
|
115
|
+
general_tables(locale)
|
|
116
|
+
.merge(field_tables(locale))
|
|
117
|
+
.merge(body_part_tables(locale))
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def general_tables(locale)
|
|
121
|
+
{
|
|
122
|
+
'FT' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.FT', locale),
|
|
123
|
+
'RST' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.RST', locale),
|
|
124
|
+
'RTT' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.RTT', locale),
|
|
125
|
+
'RET' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.RET', locale),
|
|
126
|
+
'RWT' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.RWT', locale),
|
|
127
|
+
'RWDT' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.RWDT', locale),
|
|
128
|
+
'ROMT' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.ROMT', locale),
|
|
129
|
+
'RIMT' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.RIMT', locale),
|
|
130
|
+
'EET' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.EET', locale),
|
|
131
|
+
'GFT' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.GFT', locale),
|
|
132
|
+
'GWT' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.GWT', locale),
|
|
133
|
+
'WST' => DiceTable::Table.from_i18n('KemonoNoMori.table.WST', locale),
|
|
134
|
+
}
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def field_tables(locale)
|
|
138
|
+
{
|
|
139
|
+
'ROMT' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.ROMT', locale),
|
|
140
|
+
'RIMT' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.RIMT', locale),
|
|
141
|
+
'EET' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.EET', locale),
|
|
142
|
+
'GFT' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.GFT', locale),
|
|
143
|
+
'GWT' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.GWT', locale),
|
|
144
|
+
'WST' => DiceTable::Table.from_i18n('KemonoNoMori.table.WST', locale),
|
|
145
|
+
}
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def body_part_tables(locale)
|
|
149
|
+
{
|
|
150
|
+
'HPT' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.HPT', locale),
|
|
151
|
+
'PDT' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.PDT', locale),
|
|
152
|
+
'QPT' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.QPT', locale),
|
|
153
|
+
'APT' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.APT', locale),
|
|
154
|
+
'TPT' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.TPT', locale),
|
|
155
|
+
'BPT' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.BPT', locale),
|
|
156
|
+
'CPT' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.CPT', locale),
|
|
157
|
+
'IPT' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.IPT', locale),
|
|
158
|
+
'SPT' => DiceTable::RangeTable.from_i18n('KemonoNoMori.table.SPT', locale),
|
|
159
|
+
}
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
TABLES = translate_tables(:ja_jp).freeze
|
|
373
164
|
|
|
374
165
|
register_prefix('K[AC]', 'CTR', TABLES.keys)
|
|
375
166
|
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'bcdice/game_system/KemonoNoMori'
|
|
4
|
+
|
|
5
|
+
module BCDice
|
|
6
|
+
module GameSystem
|
|
7
|
+
class KemonoNoMori_Korean < KemonoNoMori
|
|
8
|
+
# ゲームシステムの識別子
|
|
9
|
+
ID = 'KemonoNoMori:Korean'
|
|
10
|
+
|
|
11
|
+
# ゲームシステム名
|
|
12
|
+
NAME = '짐승의 숲'
|
|
13
|
+
|
|
14
|
+
# ゲームシステム名の読みがな
|
|
15
|
+
SORT_KEY = '国際化:Korean:짐승의 숲'
|
|
16
|
+
|
|
17
|
+
# ダイスボットの使い方
|
|
18
|
+
HELP_MESSAGE = <<~MESSAGETEXT
|
|
19
|
+
・행위 판정(성공도 자동 산출)(P119): KAx[±y]
|
|
20
|
+
・지속 판정(성공도+1 고정): KCx[±y]
|
|
21
|
+
x=목표치
|
|
22
|
+
y=목표치에 대한 수정(임의) x+y-z 처럼 여러 개 지정 가능
|
|
23
|
+
예1)KA7+3 → 목표치7에 +3 수정을 더한 행위 판정
|
|
24
|
+
예2)KC6 → 목표치6의 지속 판정
|
|
25
|
+
・함정 작동 체크+먹잇감표(P163): CTR
|
|
26
|
+
함정마다 1D12를 굴려, 12가 나온 경우 생물이 함정을 작동시켜 그 영향을 받고 있다.
|
|
27
|
+
・각종 표(기본 룰북)
|
|
28
|
+
・대실패표(P120): FT
|
|
29
|
+
・능력치 무작위 결정표(P121): RST
|
|
30
|
+
・무작위 소요 시간표(P122): RTT
|
|
31
|
+
・무작위 소모표(P122): RET
|
|
32
|
+
・무작위 날씨표(P128): RWT
|
|
33
|
+
・무작위 날씨 지속표(P128): RWDT
|
|
34
|
+
・무작위 엄폐물표(야외)(P140): ROMT
|
|
35
|
+
・무작위 엄폐물표(실내)(P140): RIMT
|
|
36
|
+
・도주 체험표(P144): EET
|
|
37
|
+
・식재료 채집표(P157): GFT
|
|
38
|
+
・물 채집표(P157): GWT
|
|
39
|
+
・백색 마석 효과표(P186): WST
|
|
40
|
+
・부위 피해 관련 표(참조 페이지는 리플레이&데이터북 「가미신의 연회」 기준)
|
|
41
|
+
・인간 부위표(P216): HPT
|
|
42
|
+
・부위 피해 단계표(P217): PDT
|
|
43
|
+
・네발 동물 부위표(P225): QPT
|
|
44
|
+
・무족류 부위표(P225): APT
|
|
45
|
+
・두발 동물 부위표(P226): TPT
|
|
46
|
+
・새 부위표(P226): BPT
|
|
47
|
+
・두족류 부위표(P227): CPT
|
|
48
|
+
・곤충 부위표(P227): IPT
|
|
49
|
+
・거미 부위표(P228): SPT
|
|
50
|
+
MESSAGETEXT
|
|
51
|
+
|
|
52
|
+
def initialize(command)
|
|
53
|
+
super(command)
|
|
54
|
+
@locale = :ko_kr
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
TABLES = translate_tables(:ko_kr).freeze
|
|
58
|
+
|
|
59
|
+
register_prefix_from_super_class()
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module BCDice
|
|
4
|
+
module GameSystem
|
|
5
|
+
class KinAriel < Base
|
|
6
|
+
# ゲームシステムの識別子
|
|
7
|
+
ID = 'KinAriel'
|
|
8
|
+
|
|
9
|
+
# ゲームシステム名
|
|
10
|
+
NAME = 'キナリエル'
|
|
11
|
+
|
|
12
|
+
# ゲームシステム名の読みがな
|
|
13
|
+
SORT_KEY = 'きなりえる'
|
|
14
|
+
|
|
15
|
+
# ダイスボットの使い方
|
|
16
|
+
HELP_MESSAGE = <<~INFO_MESSAGETEXT
|
|
17
|
+
■判定 KA<=t t: 目標値
|
|
18
|
+
|
|
19
|
+
例)KA<=50: 目標値50で結果を表示(クリティカル、ファンブル、成功、失敗)
|
|
20
|
+
|
|
21
|
+
■対抗判定 VS<=t t: 目標値
|
|
22
|
+
|
|
23
|
+
例)VS<=50: 目標値50で最大5回振って、その結果を表示。
|
|
24
|
+
INFO_MESSAGETEXT
|
|
25
|
+
|
|
26
|
+
register_prefix('KA', 'VS')
|
|
27
|
+
|
|
28
|
+
def eval_game_system_specific_command(command)
|
|
29
|
+
resolute_action(command) || resolute_competition(command)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
# 通常判定
|
|
35
|
+
# @param [String] command
|
|
36
|
+
# @return [Result]
|
|
37
|
+
def resolute_action(command)
|
|
38
|
+
m = /KA<=(\d+)/.match(command)
|
|
39
|
+
return nil unless m
|
|
40
|
+
|
|
41
|
+
target = m[1].to_i
|
|
42
|
+
dice = @randomizer.roll_once(100)
|
|
43
|
+
|
|
44
|
+
output = "(KA<=#{target}) > [#{dice}]"
|
|
45
|
+
|
|
46
|
+
if dice <= target
|
|
47
|
+
if dice <= 5
|
|
48
|
+
output += " > クリティカル"
|
|
49
|
+
return Result.critical(output)
|
|
50
|
+
else
|
|
51
|
+
output += " > 成功"
|
|
52
|
+
return Result.success(output)
|
|
53
|
+
end
|
|
54
|
+
else
|
|
55
|
+
if dice >= 96
|
|
56
|
+
output += " > ファンブル"
|
|
57
|
+
return Result.fumble(output)
|
|
58
|
+
else
|
|
59
|
+
output += " > 失敗"
|
|
60
|
+
return Result.failure(output)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# 対抗判定用出力
|
|
66
|
+
# @param [String] command
|
|
67
|
+
# @return [Result]
|
|
68
|
+
def resolute_competition(command)
|
|
69
|
+
m = /VS<=(\d+)/.match(command)
|
|
70
|
+
return nil unless m
|
|
71
|
+
|
|
72
|
+
target = m[1].to_i
|
|
73
|
+
output = "(VS<=#{target}) > "
|
|
74
|
+
dice_arr = []
|
|
75
|
+
result = Result.new
|
|
76
|
+
|
|
77
|
+
5.times do
|
|
78
|
+
dice = @randomizer.roll_once(100)
|
|
79
|
+
dice_arr.push(dice)
|
|
80
|
+
result = get_roll_result(dice, target)
|
|
81
|
+
if result.critical?
|
|
82
|
+
output += '[' + dice_arr.join(",") + "] > #{dice_arr.length}回目でクリティカル"
|
|
83
|
+
result.text = output
|
|
84
|
+
return result
|
|
85
|
+
elsif result.fumble?
|
|
86
|
+
output += '[' + dice_arr.join(",") + "] > #{dice_arr.length}回目でファンブル"
|
|
87
|
+
result.text = output
|
|
88
|
+
return result
|
|
89
|
+
elsif result.failure?
|
|
90
|
+
output += '[' + dice_arr.join(",") + "] > #{dice_arr.length}回目で失敗"
|
|
91
|
+
result.text = output
|
|
92
|
+
return result
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
output += '[' + dice_arr.join(",") + "] > #{dice_arr.length}回成功"
|
|
96
|
+
result.text = output
|
|
97
|
+
return result
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def get_roll_result(dice, target)
|
|
101
|
+
if dice <= target
|
|
102
|
+
if dice <= 5
|
|
103
|
+
return Result.critical("")
|
|
104
|
+
else
|
|
105
|
+
return Result.success("")
|
|
106
|
+
end
|
|
107
|
+
else
|
|
108
|
+
if dice >= 96
|
|
109
|
+
return Result.fumble("")
|
|
110
|
+
else
|
|
111
|
+
return Result.failure("")
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'bcdice/game_system/KizunaBullet'
|
|
4
|
+
require 'bcdice/game_system/kizuna_bullet/tables'
|
|
5
|
+
|
|
6
|
+
module BCDice
|
|
7
|
+
module GameSystem
|
|
8
|
+
class KizunaBullet_Korean < KizunaBullet
|
|
9
|
+
# ゲームシステムの識別子
|
|
10
|
+
ID = 'KizunaBullet:Korean'
|
|
11
|
+
|
|
12
|
+
# ゲームシステム名
|
|
13
|
+
NAME = '키즈나 불릿'
|
|
14
|
+
|
|
15
|
+
# ゲームシステム名の読みがな
|
|
16
|
+
SORT_KEY = '国際化:Korean:키즈나 불릿'
|
|
17
|
+
|
|
18
|
+
# ダイスボットの使い方
|
|
19
|
+
HELP_MESSAGE = <<~MESSAGETEXT
|
|
20
|
+
・다이스 롤
|
|
21
|
+
nDM...n개의 6면 다이스를 굴려 가장 높은 값을 사용합니다.
|
|
22
|
+
・[조사 판정]
|
|
23
|
+
nIN…n개의 6면 다이스를 굴려 가장 높은 값이 5 이상이면 성공합니다. ([파트너의 헬프] 사용가능)
|
|
24
|
+
・[진정 판정]
|
|
25
|
+
SEn…2개의 6면 다이스를 굴려 합계치가 n([균열]상태의 [키즈나]의 개수)보다 높으면 성공합니다. ([강제 진정]사용가능)
|
|
26
|
+
・[해결] [액션]의 대미지와[액시던트]의 대미지 경감
|
|
27
|
+
nSO…2+n개의 6면 다이스를 굴려 결과값을 모두 합산합니다. (n은 줄인 【여기치】. 생략 가능)
|
|
28
|
+
|
|
29
|
+
・각종표
|
|
30
|
+
일상 표・장소 OP
|
|
31
|
+
일상 표・내용 OC
|
|
32
|
+
일상 표・장소 및 내용 OPC
|
|
33
|
+
일상 표(일)・장소 OWP
|
|
34
|
+
일상 표(일)・내용 OWC
|
|
35
|
+
일상 표(일)・장소 및 내용 OWPC
|
|
36
|
+
일상 표(휴가)・장소 OHP
|
|
37
|
+
일상 표(휴가)・내용 OHC
|
|
38
|
+
일상 표(휴가)・장소 및 내용 OHPC
|
|
39
|
+
일상 표(출장)・장소 OTP
|
|
40
|
+
일상 표(출장)・내용 OTC
|
|
41
|
+
일상 표(출장)・장소 및 내용 OTPC
|
|
42
|
+
|
|
43
|
+
턴 테마표 TT
|
|
44
|
+
턴 테마표・친밀 TTI
|
|
45
|
+
턴 테마표・쿨 TTC
|
|
46
|
+
턴 테마표・주종 TTH
|
|
47
|
+
|
|
48
|
+
조우 표・장소 EP
|
|
49
|
+
조우 표・출현 순서 EO
|
|
50
|
+
조우 표・상황(첫대면) EF
|
|
51
|
+
조우 표・상황(아는 사이) EA
|
|
52
|
+
조우 표・결착 EE
|
|
53
|
+
조우 표·장소와 등장 순서와 상황(첫대면)과 결착 EFA
|
|
54
|
+
조우 표·장소와 등장순서와 상황(아는 사이)과 결판 EAA
|
|
55
|
+
|
|
56
|
+
교류 표·장소 CP
|
|
57
|
+
교류 표·내용 CC
|
|
58
|
+
교류 표·장소 및 내용 CPC
|
|
59
|
+
|
|
60
|
+
조사 표 · 베이직 IB
|
|
61
|
+
조사 표・다이나믹 ID
|
|
62
|
+
조사 표・베이직과 다이나믹 IBD
|
|
63
|
+
|
|
64
|
+
해저드 표 HA
|
|
65
|
+
|
|
66
|
+
통상 다이제스트: 당신들에게 새로운 명령이 떨어졌다(조사가 의뢰되었다).
|
|
67
|
+
1:그 사건의 내용은……. NI1
|
|
68
|
+
2:조사하러 향한 장소는…… NI2
|
|
69
|
+
3:범인인 기적사는…… NI3
|
|
70
|
+
4:일어난 일은……. NI4
|
|
71
|
+
5:불릿 사이에서는…… NI5
|
|
72
|
+
6:싸움의 결말은…… NI6
|
|
73
|
+
|
|
74
|
+
통상 다이제스트: 당신들은 여행(출장)으로 어느 장소를 찾았다.
|
|
75
|
+
1:그 장소란…… NT1
|
|
76
|
+
2:그곳에서 시작한 것은…… NT2
|
|
77
|
+
3:극한의 상황 속에서…… NT3
|
|
78
|
+
4:범인인 기적사는…… NT4
|
|
79
|
+
5:불릿 사이에서는…… NT5
|
|
80
|
+
6:싸움의 결말은…… NT6
|
|
81
|
+
|
|
82
|
+
홀리데이 다이제스트: 당신들은 휴일에 나가기로 했다.
|
|
83
|
+
1:그 장소란…… HH1
|
|
84
|
+
2:약속하고 만나면…… HH2
|
|
85
|
+
3:그리고 무려……… HH3
|
|
86
|
+
4:두 사람이 결정한 것은…… HH4
|
|
87
|
+
5:결과적으로…… HH5
|
|
88
|
+
6:불릿은 마지막으로…… HH6
|
|
89
|
+
|
|
90
|
+
홀리데이 다이제스트: 당신들은 기묘한 사건을 마주했다.
|
|
91
|
+
1:그 장소란…… HC1
|
|
92
|
+
2:일어난 사건은……. HC2
|
|
93
|
+
3:범인인 시적사는…… HC3
|
|
94
|
+
4:범인을 몰아붙이기 위해…… HC4
|
|
95
|
+
5:싸움의 결과는…… HC5
|
|
96
|
+
6:불릿은 마지막으로……HC6
|
|
97
|
+
MESSAGETEXT
|
|
98
|
+
|
|
99
|
+
def initialize(command)
|
|
100
|
+
super(command)
|
|
101
|
+
@locale = :ko_kr
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
TABLES = translate_tables(:ko_kr)
|
|
105
|
+
|
|
106
|
+
register_prefix_from_super_class()
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|