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.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +140 -0
  3. data/i18n/Airgetlamh/ja_jp.yml +5 -0
  4. data/i18n/Airgetlamh/ko_kr.yml +5 -0
  5. data/i18n/Alsetto/ja_jp.yml +5 -0
  6. data/i18n/Alsetto/ko_kr.yml +5 -0
  7. data/i18n/AnimaAnimus/ja_jp.yml +28 -0
  8. data/i18n/AnimaAnimus/ko_kr.yml +28 -0
  9. data/i18n/BlackJacket/ja_jp.yml +79 -0
  10. data/i18n/BlackJacket/ko_kr.yml +79 -0
  11. data/i18n/Bloodorium/ja_jp.yml +3 -0
  12. data/i18n/Bloodorium/ko_kr.yml +3 -0
  13. data/i18n/Cthulhu/ko_kr.yml +1 -1
  14. data/i18n/DoubleCross/ja_jp.yml +2 -2
  15. data/i18n/Dracurouge/ko_kr.yml +1284 -205
  16. data/i18n/Emoklore/ja_jp.yml +1 -0
  17. data/i18n/Emoklore/ko_kr.yml +8 -0
  18. data/i18n/FutariSousa/ja_jp.yml +70 -0
  19. data/i18n/FutariSousa/ko_kr.yml +157 -0
  20. data/i18n/HatsuneMiku/ja_jp.yml +579 -0
  21. data/i18n/HatsuneMiku/ko_kr.yml +579 -0
  22. data/i18n/Irisbane/ja_jp.yml +27 -0
  23. data/i18n/Irisbane/ko_kr.yml +27 -0
  24. data/i18n/JuinKansen/ja_jp.yml +168 -0
  25. data/i18n/JuinKansen/ko_kr.yml +168 -0
  26. data/i18n/KemonoNoMori/ja_jp.yml +229 -0
  27. data/i18n/KemonoNoMori/ko_kr.yml +229 -0
  28. data/i18n/KizunaBullet/ko_kr.yml +653 -0
  29. data/i18n/MagicPunk/ja_jp.yml +5 -0
  30. data/i18n/MagicPunk/ko_kr.yml +5 -0
  31. data/i18n/MorkBorg/ja_jp.yml +34 -0
  32. data/i18n/MorkBorg/ko_kr.yml +34 -0
  33. data/i18n/Nechronica/ko_kr.yml +43 -0
  34. data/i18n/NegikureNegimaki/ja_jp.yml +6 -0
  35. data/i18n/NegikureNegimaki/ko_kr.yml +6 -0
  36. data/i18n/Nuekagami/ja_jp.yml +219 -0
  37. data/i18n/Nuekagami/ko_kr.yml +219 -0
  38. data/i18n/Revulture/ja_jp.yml +8 -0
  39. data/i18n/Revulture/ko_kr.yml +8 -0
  40. data/i18n/SRS/ja_jp.yml +4 -0
  41. data/i18n/SRS/ko_kr.yml +4 -0
  42. data/i18n/ShinobiGami/ja_jp.yml +879 -0
  43. data/i18n/ShinobiGami/ko_kr.yml +876 -0
  44. data/i18n/SkynautsBouken/ja_jp.yml +28 -28
  45. data/i18n/StarryDolls/ja_jp.yml +456 -0
  46. data/i18n/StarryDolls/ko_kr.yml +456 -0
  47. data/i18n/StratoShout/ja_jp.yml +8 -8
  48. data/i18n/SwordWorld2_5/ja_jp.yml +48 -0
  49. data/i18n/Ventangle/ja_jp.yml +4 -0
  50. data/i18n/Ventangle/ko_kr.yml +4 -0
  51. data/i18n/YearZeroEngine/ja_jp.yml +12 -0
  52. data/i18n/YearZeroEngine/ko_kr.yml +12 -0
  53. data/i18n/ZombiLine/ja_jp.yml +27 -0
  54. data/i18n/ZombiLine/ko_kr.yml +27 -0
  55. data/i18n/ko_kr.yml +2 -0
  56. data/i18n/zh_hant.yml +2 -2
  57. data/lib/bcdice/dice_table/d66_left_range_table.rb +21 -0
  58. data/lib/bcdice/game_system/Aionia.rb +68 -19
  59. data/lib/bcdice/game_system/Airgetlamh.rb +64 -41
  60. data/lib/bcdice/game_system/Airgetlamh_Korean.rb +53 -0
  61. data/lib/bcdice/game_system/Alsetto.rb +63 -50
  62. data/lib/bcdice/game_system/Alsetto_Korean.rb +51 -0
  63. data/lib/bcdice/game_system/AnimaAnimus.rb +15 -32
  64. data/lib/bcdice/game_system/AnimaAnimus_Korean.rb +39 -0
  65. data/lib/bcdice/game_system/BlackJacket.rb +57 -113
  66. data/lib/bcdice/game_system/BlackJacket_Korean.rb +8 -206
  67. data/lib/bcdice/game_system/Bloodorium.rb +1 -1
  68. data/lib/bcdice/game_system/Bloodorium_Korean.rb +34 -0
  69. data/lib/bcdice/game_system/ChroniclesOfDarkness2e.rb +163 -0
  70. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +471 -300
  71. data/lib/bcdice/game_system/DeadlineHeroes_Korean.rb +273 -0
  72. data/lib/bcdice/game_system/Dracurouge_Korean.rb +25 -19
  73. data/lib/bcdice/game_system/DungeonsAndDragons5.rb +106 -73
  74. data/lib/bcdice/game_system/DungeonsAndDragons5_Korean.rb +53 -0
  75. data/lib/bcdice/game_system/DungeonsAndDragons_Korean.rb +61 -0
  76. data/lib/bcdice/game_system/EdgeFlippers.rb +315 -0
  77. data/lib/bcdice/game_system/Emoklore.rb +34 -9
  78. data/lib/bcdice/game_system/Emoklore_Korean.rb +50 -0
  79. data/lib/bcdice/game_system/FateCoreSystem.rb +10 -6
  80. data/lib/bcdice/game_system/FullMetalPanic_Korean.rb +28 -0
  81. data/lib/bcdice/game_system/FutariSousa.rb +37 -12
  82. data/lib/bcdice/game_system/FutariSousa_Korean.rb +25 -8
  83. data/lib/bcdice/game_system/GaiaCare.rb +40 -0
  84. data/lib/bcdice/game_system/Garactier.rb +1 -1
  85. data/lib/bcdice/game_system/GardenOrder.rb +2 -2
  86. data/lib/bcdice/game_system/GardenOrderReEdit.rb +849 -0
  87. data/lib/bcdice/game_system/GardenOrder_Korean.rb +839 -0
  88. data/lib/bcdice/game_system/HatsuneMiku.rb +51 -605
  89. data/lib/bcdice/game_system/HatsuneMiku_Korean.rb +56 -0
  90. data/lib/bcdice/game_system/HunterTheReckoning5th.rb +15 -11
  91. data/lib/bcdice/game_system/Irisbane.rb +17 -30
  92. data/lib/bcdice/game_system/Irisbane_Korean.rb +52 -0
  93. data/lib/bcdice/game_system/JuinKansen.rb +41 -208
  94. data/lib/bcdice/game_system/JuinKansen_Korean.rb +46 -0
  95. data/lib/bcdice/game_system/KemonoNoMori.rb +67 -276
  96. data/lib/bcdice/game_system/KemonoNoMori_Korean.rb +62 -0
  97. data/lib/bcdice/game_system/KinAriel.rb +117 -0
  98. data/lib/bcdice/game_system/KizunaBullet_Korean.rb +109 -0
  99. data/lib/bcdice/game_system/KutuluRevised.rb +94 -0
  100. data/lib/bcdice/game_system/LiverLabyrinth.rb +321 -0
  101. data/lib/bcdice/game_system/Lost.rb +89 -0
  102. data/lib/bcdice/game_system/MagicPunk.rb +85 -0
  103. data/lib/bcdice/game_system/MagicPunk_Korean.rb +39 -0
  104. data/lib/bcdice/game_system/MarvelHeroicRoleplaying.rb +144 -0
  105. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +122 -2
  106. data/lib/bcdice/game_system/MetallicGuardian_Korean.rb +28 -0
  107. data/lib/bcdice/game_system/MorkBorg.rb +170 -0
  108. data/lib/bcdice/game_system/MorkBorg_Korean.rb +49 -0
  109. data/lib/bcdice/game_system/NanimonaiMura.rb +112 -0
  110. data/lib/bcdice/game_system/Nechronica_Korean.rb +6 -6
  111. data/lib/bcdice/game_system/NegikureNegimaki.rb +140 -0
  112. data/lib/bcdice/game_system/NegikureNegimaki_Korean.rb +48 -0
  113. data/lib/bcdice/game_system/NeonUnderRealm.rb +122 -0
  114. data/lib/bcdice/game_system/NinjaSlayer2.rb +170 -49
  115. data/lib/bcdice/game_system/Nuekagami.rb +19 -261
  116. data/lib/bcdice/game_system/Nuekagami_Korean.rb +43 -0
  117. data/lib/bcdice/game_system/ParanoiaPerfect.rb +74 -0
  118. data/lib/bcdice/game_system/PastFutureParadox.rb +2245 -55
  119. data/lib/bcdice/game_system/PreciousDays.rb +170 -0
  120. data/lib/bcdice/game_system/Revulture.rb +8 -5
  121. data/lib/bcdice/game_system/Revulture_Korean.rb +51 -0
  122. data/lib/bcdice/game_system/Ryutama.rb +46 -46
  123. data/lib/bcdice/game_system/SRS.rb +4 -4
  124. data/lib/bcdice/game_system/SRS_Korean.rb +67 -0
  125. data/lib/bcdice/game_system/ShinobiGami.rb +154 -1047
  126. data/lib/bcdice/game_system/ShinobiGami_Korean.rb +102 -0
  127. data/lib/bcdice/game_system/StarryDolls.rb +70 -508
  128. data/lib/bcdice/game_system/StarryDolls_Korean.rb +80 -0
  129. data/lib/bcdice/game_system/StratoShout.rb +1 -1
  130. data/lib/bcdice/game_system/SwordWorld.rb +28 -2
  131. data/lib/bcdice/game_system/SwordWorld2_0.rb +1 -1
  132. data/lib/bcdice/game_system/SwordWorld2_5.rb +67 -3
  133. data/lib/bcdice/game_system/TacticalExorcist.rb +222 -0
  134. data/lib/bcdice/game_system/TenkaRyouran_Korean.rb +30 -0
  135. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +38 -33
  136. data/lib/bcdice/game_system/Ventangle.rb +8 -7
  137. data/lib/bcdice/game_system/Ventangle_Korean.rb +41 -0
  138. data/lib/bcdice/game_system/Warhammer4.rb +202 -6
  139. data/lib/bcdice/game_system/WerewolfTheApocalypse5th.rb +20 -15
  140. data/lib/bcdice/game_system/WorldEndScrapyard.rb +333 -0
  141. data/lib/bcdice/game_system/WorldsEndFrontline_Korean.rb +26 -0
  142. data/lib/bcdice/game_system/YearZeroEngine.rb +7 -7
  143. data/lib/bcdice/game_system/YearZeroEngine_Korean.rb +46 -0
  144. data/lib/bcdice/game_system/ZombiLine.rb +29 -36
  145. data/lib/bcdice/game_system/ZombiLine_Korean.rb +37 -0
  146. data/lib/bcdice/game_system/cthulhu7th_Korean/full_auto.rb +294 -0
  147. data/lib/bcdice/game_system/cthulhu7th_Korean/rollable.rb +43 -0
  148. data/lib/bcdice/game_system/meikyu_kingdom_basic/atoz_table.rb +1184 -0
  149. data/lib/bcdice/game_system/meikyu_kingdom_basic/randr236_table.rb +254 -0
  150. data/lib/bcdice/game_system/meikyu_kingdom_basic/table.rb +54 -0
  151. data/lib/bcdice/game_system/meikyu_kingdom_basic/tk_table.rb +755 -0
  152. data/lib/bcdice/game_system/sword_world/rating_options.rb +9 -0
  153. data/lib/bcdice/game_system/sword_world/rating_parsed.rb +19 -0
  154. data/lib/bcdice/game_system/sword_world/rating_parser.rb +229 -149
  155. data/lib/bcdice/game_system/sword_world/transcendent_test.rb +1 -0
  156. data/lib/bcdice/game_system.rb +47 -0
  157. data/lib/bcdice/version.rb +1 -1
  158. 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} > 大成功(成功度+#{success_degree}, 次の継続判定の目標値を10に変更)")
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} > 成功(成功度+#{success_degree}")
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("罠動作チェック(1D12) #{tra_check_num} > 罠は動作していなかった")
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
- chase = case chase_num
98
- when 1, 2, 3, 4 then '小型動物'
99
- when 5, 6, 7, 8 then '大型動物'
100
- when 9, 10, 11, 12 then '人間の放浪者'
101
- end
102
- Result.new("罠動作チェック(1D12) #{tra_check_num} 罠が動作していた! > 獲物表(#{chase_num}) > #{chase}が罠にかかっていた")
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} (再登場: #{escape_duration}時間後)")
108
+ Result.new("#{escape_experience} (#{translate('KemonoNoMori.reappear', hours: escape_duration)})")
109
109
  end
110
110
 
111
- TABLES = {
112
- 'FT' => DiceTable::RangeTable.new(
113
- '大失敗表',
114
- '1D12',
115
- [
116
- [1..3, '【余裕】が3点減少する(最低0まで)'],
117
- [4..5, 'ランダムな荷物1個が落ちて行方不明になる(大失敗したエリアのアイテム調査で見つけることが可能)'],
118
- [6..7, 'ランダムな荷物1個が破壊される'],
119
- [8..9, 'ランダム天気表(RWT)を使用し、結果をターンの終了まで適用する'],
120
- [10, 'ランダムな準備している小道具1個が破壊される'],
121
- [11, '着装している防具が破壊される'],
122
- [12, '準備している武器が破壊される'],
123
- ]
124
- ),
125
- 'RST' => DiceTable::RangeTable.new(
126
- '能力値ランダム決定表',
127
- '1D12',
128
- [
129
- [1..2, '【移動】'],
130
- [3..4, '【格闘】'],
131
- [5..6, '【射撃】'],
132
- [7..8, '【製作】'],
133
- [9..10, '【察知】'],
134
- [11..12, '【自制】'],
135
- ]
136
- ),
137
- 'RTT' => DiceTable::RangeTable.new(
138
- 'ランダム所要時間表',
139
- '1D12',
140
- [
141
- [1..3, '2'],
142
- [4..6, '3'],
143
- [7..9, '4'],
144
- [10..12, '5'],
145
- ]
146
- ),
147
- 'RET' => DiceTable::RangeTable.new(
148
- 'ランダム消耗表',
149
- '1D12',
150
- [
151
- [1..3, '0'],
152
- [4..6, '1'],
153
- [7..9, '2'],
154
- [10..12, '4'],
155
- ]
156
- ),
157
- 'RWT' => DiceTable::RangeTable.new(
158
- 'ランダム天気表',
159
- '1D12',
160
- [
161
- [1..2, '濃霧'],
162
- [3..4, '大雨'],
163
- [5..6, '雷雨'],
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