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
@@ -0,0 +1,333 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class WorldEndScrapyard < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'WorldEndScrapyard'
8
+
9
+ # ゲームシステム名
10
+ NAME = 'World End scrapyard'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'わあるとえんとすくらつふやあと'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGETEXT
17
+ ■判定 WES<=t t:成功率({能力値}+{悪運})
18
+ 能力値は(筋力・敏捷・器用・知識・魅力)のいずれか。
19
+ 成功・失敗・差分値を表示する。
20
+
21
+ 例)WES<=20+10:能力値20,悪運10で判定し、その結果を表示する。
22
+ WES<=30: 悪運30で判定し、その結果を表示する。
23
+
24
+ ■各種表
25
+ ・《変異表》 HEN HENC(任意選択,RoCのC)
26
+ ・《発掘表》 HAK HAKC( 同上 )
27
+ ・《PC/NPC関係性表》 KAN
28
+ ・《シナリオの目的表》 MOK
29
+ ・《シナリオの場所表》 BAS
30
+ ・《登場NPC表》 TOJ
31
+ ・《探索表》 TANx+b (x:レベル,1~5 b:修正+5)
32
+ INFO_MESSAGETEXT
33
+
34
+ register_prefix("WES", "HEN", "HAK", "KAN", "MOK", "BAS", "TOJ", "TAN")
35
+
36
+ def initialize(command)
37
+ super(command)
38
+
39
+ @round_type = RoundType::CEIL
40
+ end
41
+
42
+ def eval_game_system_specific_command(command)
43
+ resolute_action(command) ||
44
+ roll_roc_table(command) ||
45
+ roll_search_table(command) ||
46
+ roll_tables(command, TABLES)
47
+ end
48
+
49
+ private
50
+
51
+ # 技能判定
52
+ # @param [String] command
53
+ # @return [Result]
54
+ def resolute_action(command)
55
+ m = /^WES<=((\d+)([+]\d+)?)/.match(command)
56
+ return nil unless m
57
+
58
+ target =
59
+ if m[1].empty?
60
+ nil
61
+ else
62
+ Arithmetic.eval(m[1], @round_type)
63
+ end
64
+
65
+ if target.nil?
66
+ return nil
67
+ end
68
+
69
+ dice = @randomizer.roll_once(100)
70
+
71
+ return Result.new.tap do |result|
72
+ result.condition = (dice <= target)
73
+ diff = target - dice
74
+
75
+ sequence = [
76
+ "(WES<=#{target})",
77
+ dice.to_s,
78
+ result.success? ? "成功" : "失敗",
79
+ "差分値#{diff}"
80
+ ].compact
81
+
82
+ result.text = sequence.join(" > ")
83
+ end
84
+ end
85
+
86
+ # 変異表
87
+ VARIATION_TABLE = [
88
+ "0:[回復不能]状態になります。",
89
+ "1:[異形]状態になります。",
90
+ "2:[大型]状態になります([小柄]状態だった場合でも)",
91
+ "3: 特に効果はありませんが『外見』を自由に変更させても構いません。",
92
+ "4:《悪運》以外の《能力値》を【2つ】を『ランダム』で選んで、その《能力値》の数値を入れ替えます。",
93
+ "5:《悪運》以外の《能力値》を【2つ】を『任意』で選んで、その《能力値》の数値を入れ替えます。",
94
+ "6: 特に効果はありません。",
95
+ "7:[小柄]状態になります([大型]状態だった場合でも)",
96
+ "8:《悪運》以外の《能力値》【5つ】の数値を【10点単位】で再分配します。",
97
+ "9:[異形]状態を打ち消します。",
98
+ ].freeze
99
+
100
+ # 発掘表
101
+ EXCAVATION_TABLE = [
102
+ "0: なにも発見できなかった。",
103
+ "1:《悪運》を【レベル×3点】減少させる。",
104
+ "2: なにも発見できなかった。",
105
+ "3:《悪運》を【レベル×3点】上昇させる。",
106
+ "4: 何かの『物資・材料?』を発見する(内容はGM/PCで相談する)",
107
+ "5:《煙草》3本分、または《弾薬》3発分のどちらか【1つ】を得る。",
108
+ "6: 壊れた『日用品?』を発見する(内容はGM/PCの相談で決める)",
109
+ "7:《消費アイテム》をランダムで【1つ】を得る。",
110
+ "8: 壊れた『家具類?』を発見する(内容はGM/PCの相談で決める)",
111
+ "9:《装備アイテム》をランダムで【1つ】を得る。",
112
+ ].freeze
113
+
114
+ # 探索表
115
+ SEARCH_TABLE = [
116
+ "06:エネミー:レベル1『スカベンジャー』PC数×1体と遭遇する。",
117
+ "07:なにもなし。",
118
+ "08:エネミー:レベル1『下水ネズミの群れ』PC数×2体と遭遇する。",
119
+ "09:なにもなし。",
120
+ "10:《対抗判定:魅力/成功率35》を行い、勝利時に《発掘表》を1回振る。",
121
+ "11:なにもなし。",
122
+ "12:《行為判定:魅力》の成功時、次回《探索表》の結果に【+5】を加える。",
123
+ "13:なにもなし。",
124
+ "14:《悪運》を【PCのレベル×3点】上昇させる。",
125
+ "15:行商人から【1レベル】までの《消費/装備アイテム》を交換・購入できる。",
126
+ "16:エネミー:レベル2『粗暴な自警団』PC数×1体と遭遇する。",
127
+ "17:なにもなし。",
128
+ "18:エネミー:レベル2『バイオゾンビ』PC数×2体と遭遇する。",
129
+ "19:なにもなし。",
130
+ "20:《対抗判定:知識/成功率40》を行い、勝利時に《発掘表》を1回振る。",
131
+ "21:なにもなし。",
132
+ "22:《行為判定:知識》の成功時、次回《探索表》の結果に【+5】を加える。",
133
+ "23:なにもなし。",
134
+ "24:《悪運》を【PCのレベル×3点】上昇させる。",
135
+ "25:行商人から【3レベル】までの《消費/装備アイテム》を交換・購入できる。",
136
+ "26:エネミー:レベル3『ピットスパイダー』PC数×1体と遭遇する。",
137
+ "27:なにもなし。",
138
+ "28:エネミー:レベル3『バイオグール』PC数×2体と遭遇する。",
139
+ "29:なにもなし。",
140
+ "30:《対抗判定:器用/成功率45》を行い、勝利時に《発掘表》を1回振る。",
141
+ "31:なにもなし。",
142
+ "32:《行為判定:器用》の成功時、次回《探索表》の結果に【+5】を加える。",
143
+ "33:なにもなし。",
144
+ "34:《悪運》を【PCのレベル×3点】上昇させる。",
145
+ "35:行商人から【5レベル】までの《消費/装備アイテム》を交換・購入できる。",
146
+ "36:エネミー:レベル4『暴走オートマトン』PC数×1体と遭遇する。",
147
+ "37:なにもなし。",
148
+ "38:エネミー:レベル4『ネクロソルジャー』PC数×2体と遭遇する。",
149
+ "39:なにもなし。",
150
+ "40:《対抗判定:敏捷/成功率50》を行い、勝利時に《発掘表》を1回振る。",
151
+ ].freeze
152
+
153
+ def roll_roc_table(command)
154
+ m = /^(HEN|HAK)(C)?/.match(command)
155
+ return nil unless m
156
+
157
+ sequence = []
158
+ result_text = ""
159
+ cmd = m[1]
160
+
161
+ target_table = []
162
+ case cmd
163
+ when "HEN"
164
+ sequence.push("変異表")
165
+ target_table = VARIATION_TABLE
166
+ when "HAK"
167
+ sequence.push("発掘表")
168
+ target_table = EXCAVATION_TABLE
169
+ end
170
+
171
+ if m[2].nil?
172
+ result_text = target_table[@randomizer.roll_once(10) - 1]
173
+ else
174
+ roc_table_all = []
175
+ [0..9].each do |i|
176
+ roc_table_all.push(target_table[i])
177
+ end
178
+ result_text = roc_table_all.join("\n")
179
+ end
180
+
181
+ return Result.new.tap do |result|
182
+ sequence.push(result_text)
183
+ result.text = sequence.join(" > ")
184
+ end
185
+ end
186
+
187
+ def roll_search_table(command)
188
+ m = /^(TAN)([1-5])([+]5)?/.match(command)
189
+ return nil unless m
190
+
191
+ sequence = ["探索表"]
192
+ level = m[2].to_i
193
+ mod =
194
+ if m[3].nil?
195
+ 0
196
+ else
197
+ Arithmetic.eval(m[3], @round_type)
198
+ end
199
+ idx = level * 5 + @randomizer.roll_once(10) + mod
200
+ result_text = SEARCH_TABLE[idx - 6]
201
+
202
+ return Result.new.tap do |result|
203
+ sequence.push(result_text)
204
+ result.text = sequence.join(" > ")
205
+ end
206
+ end
207
+ TABLES = {
208
+ "KAN" => DiceTable::RangeTable.new(
209
+ "PC/NPC関係性表",
210
+ "1D10",
211
+ [
212
+ [1, '物心付いた時からの長い幼馴染'],
213
+ [2..3, '旅立った頃からの始まりの仲間'],
214
+ [4..5, 'なにかどうしようもない腐れ縁'],
215
+ [6..7, '既に互いの腕を信用できる同志'],
216
+ [8..9, '未だ相手を良く知らない同業者'],
217
+ [10, 'いま出会ったばかりの仕事相手'],
218
+ ]
219
+ ),
220
+ "MOK" => DiceTable::RangeTable.new(
221
+ "シナリオの目的表",
222
+ "1D100",
223
+ [
224
+ [1..6, '目的の物品を入手する'],
225
+ [7..12, '目的の情報を入手する'],
226
+ [13..18, '目的の人物と接触する'],
227
+ [19..24, '目的の人物を防衛する'],
228
+ [25..30, '目的の人物を救出する'],
229
+ [31..37, '場所を調査・探索する'],
230
+ [38..44, '場所を通過・突破する'],
231
+ [45..51, '場所を制圧・破壊する'],
232
+ [52..58, '場所から脱出する'],
233
+ [59..65, '場所を防衛する'],
234
+ [66..73, '敵目標を討伐する'],
235
+ [74..80, '敵目標を捕獲する'],
236
+ [81..87, '敵目標と和解する'],
237
+ [88..94, '敵目標を追跡する'],
238
+ [95..99, '敵目標から逃走する'],
239
+ [100, 'その他(GMの裁量で決めて良い)'],
240
+ ]
241
+ ),
242
+ "BAS" => DiceTable::RangeTable.new(
243
+ "シナリオの場所表",
244
+ "1D100",
245
+ [
246
+ [1..7, '小規模コミュニティ〈シヴィラツィオ〉が主体。'],
247
+ [8..9, '小規模コミュニティ〈ペルディトゥス〉小種族区分が混在している。'],
248
+ [10, '小規模コミュニティ〈ペルディトゥス:トロウル〉が主体。'],
249
+ [11, '小規模コミュニティ〈ペルディトゥス:オーガ〉が主体。'],
250
+ [12, '小規模コミュニティ〈ペルディトゥス:ゴブ〉が主体。'],
251
+ [13, '小規模コミュニティ〈ペルディトゥス:アドラー〉が主体。'],
252
+ [14, '小規模コミュニティ〈ペルディトゥス:ドヴェルク〉が主体。'],
253
+ [15..19, '小規模コミュニティ〈フラグメンテ・マキナ〉が主体。'],
254
+ [20..24, '小規模コミュニティ〈サバイバーズ〉が主体。'],
255
+ [25..29, '小規模コミュニティ〈チルドレンズ〉が主体。'],
256
+ [30..35, '大規模コミュニティ(すべての種族が混在している)'],
257
+ [36..38, '廃墟〈シヴィラツィオ〉の住居跡など。'],
258
+ [39..41, '廃墟〈ペルディトゥス〉の森林や洞窟。'],
259
+ [42..44, '廃墟〈フラグメンテ・マキナ〉の機械施設。'],
260
+ [45..47, '廃墟〈サバイバーズ〉のバラックやキャンプ跡。'],
261
+ [48..50, '廃墟〈チルドレンズ〉のスラム跡や下水道など。'],
262
+ [51, '遺跡《テックレベル》2(神域の神殿など)'],
263
+ [52..56, '遺跡《テックレベル》3(古代の城塞など)'],
264
+ [57..64, '遺跡《テックレベル》5(廃ビルや研究所など)'],
265
+ [65..69, '遺跡《テックレベル》7(壊れた軌道エレベータなど)'],
266
+ [70, '遺跡《テックレベル》8(墜された恒星間宇宙艦など)'],
267
+ [71..80, '荒野'],
268
+ [81..86, '森林'],
269
+ [87..92, '沼沢'],
270
+ [93..99, '汚染領域(放射能や高密度魔力や生物汚染で汚染されている)'],
271
+ [100, 'その他(GMの裁量で決めて良い)'],
272
+ ]
273
+ ),
274
+ "TOJ" => DiceTable::RangeTable.new(
275
+ "登場NPC表",
276
+ "1D100",
277
+ [
278
+ [1..2, '勇敢な小動物(子犬など)'],
279
+ [3..4, '温厚な乗輓用生物(ロバなど)'],
280
+ [5..6, '何もかも諦めた無気力な孤児'],
281
+ [7..8, '汚染で奇病を抱える賢い子供'],
282
+ [9..10, 'トラウマで言葉を失った無口な子供'],
283
+ [11..12, '暴力しか知らない戦闘狂の野生少年'],
284
+ [13..14, '昔の歌を歌い続ける夢見がちな少女'],
285
+ [15..16, '仲間を守るために戦う熱血漢の少年'],
286
+ [17..18, '物資を溜め込む利己主義な銭ゲバ少女'],
287
+ [19..20, '盗みが得意で小生意気なスラムの少年'],
288
+ [21..22, '人を裏切ることに躊躇しない狡猾な少女'],
289
+ [23..24, '機械いじりが得意な天才メカニック少年'],
290
+ [25..26, '大人を信用せず一人で生き延びる孤独な少女'],
291
+ [27..28, '早く大人にならざるを得なかった冷徹な少年兵'],
292
+ [29..30, '過去の文明に憧れ、古い本を読み漁る知識少女'],
293
+ [31..32, '復讐に燃える元軍人'],
294
+ [33..34, '薬物中毒の荒くれ戦士'],
295
+ [35..36, '冷酷だが仲間思いの傭兵'],
296
+ [37..38, '汚染地帯に潜む孤独な狩人'],
297
+ [39..40, 'カルト教団の狂信な宣教師'],
298
+ [41..42, '医術を独学で身につけた流れ者'],
299
+ [43..44, '金儲けと裏切りが得意な詐欺師'],
300
+ [45..46, '植物栽培に没頭する農業主義者'],
301
+ [47..48, '家族を探し続ける高潔な放浪者'],
302
+ [49..50, '話題を売りさばく胡散臭い情報屋'],
303
+ [51..52, 'コミュニティを守る厳格すぎる保安官'],
304
+ [53..54, '機械やロボットを操る天才エンジニア'],
305
+ [55..56, '奴隷売買を生業とする冷血な奴隷商人'],
306
+ [57..58, '倫理を失ったマッドサイエンティスト'],
307
+ [59..60, 'ロックで人々を鼓舞する放浪の演奏者'],
308
+ [61..62, '酒とギャンブルに溺れる自暴自棄な中年'],
309
+ [63..64, '汚染地帯を探索するトレジャーハンター'],
310
+ [65..66, '美しい外見で人を操るサイコパスな美女'],
311
+ [67..68, '過去の罪に苛まれる贖罪意識の強い戦士'],
312
+ [69..70, 'コミュニティ周辺を操る豪腕フィクサー'],
313
+ [71..72, '戦争の記憶を引きずる老兵'],
314
+ [73..74, '何も信じず虚無的な哲学者'],
315
+ [75..76, '権力欲が強く独裁的な集落支配者'],
316
+ [77..78, '過去の文明の知識を伝える語り部'],
317
+ [79..80, '薬草や民間療法に詳しい薬師の老婆'],
318
+ [81..82, '隠し物資を山ほど持つ強欲な蓄財家'],
319
+ [83..84, '落ちぶれたかつてのカリスマ的預言者'],
320
+ [85..86, '最後の正義を信じる老いた保安官代理'],
321
+ [87..88, 'コミュニティの厳しくも公正な指導者'],
322
+ [89..90, '疲れ果てたが諦めきれない不屈の老婆'],
323
+ [91..92, '汚染に体を蝕まれながらも戦う頑固親父'],
324
+ [93..94, '最高の銃を作る頑固なガンスミスの職人'],
325
+ [95..96, '交易路を熟知した熟練のキャラバン隊長'],
326
+ [97..98, '情報データベースの無機質な対話型AI'],
327
+ [99..100, '古い時空に存在していた高慢な魔法知性'],
328
+ ]
329
+ ),
330
+ }.freeze
331
+ end
332
+ end
333
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bcdice/game_system/WorldsEndFrontline'
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class WorldsEndFrontline_Korean < WorldsEndFrontline
8
+ # ゲームシステムの識別子
9
+ ID = 'WorldsEndFrontline:Korean'
10
+
11
+ # ゲームシステム名
12
+ NAME = '월드 엔드 프론트라인'
13
+
14
+ # ゲームシステム名の読みがな
15
+ SORT_KEY = '国際化:Korean:월드 엔드 프론트라인'
16
+
17
+ register_prefix_from_super_class()
18
+
19
+ def initialize(command)
20
+ super(command)
21
+
22
+ @locale = :ko_kr
23
+ end
24
+ end
25
+ end
26
+ end
@@ -196,26 +196,26 @@ module BCDice
196
196
  end
197
197
 
198
198
  def make_result_with_yze(dice_count_text, dice_text)
199
- result_text = "#{dice_count_text} > #{dice_text} 成功数:#{@total_success_dice}"
199
+ result_text = "#{dice_count_text} > #{dice_text} #{translate('YearZeroEngine.success_count')}:#{@total_success_dice}"
200
200
  if @difficulty > 0
201
201
  if @total_success_dice >= @difficulty
202
- return Result.success("#{result_text} 難易度=#{@difficulty}:判定成功!")
202
+ return Result.success("#{result_text} #{translate('YearZeroEngine.difficulty')}=#{@difficulty}:#{translate('YearZeroEngine.success_msg')}")
203
203
  else
204
- return Result.failure("#{result_text} 難易度=#{@difficulty}:判定失敗!")
204
+ return Result.failure("#{result_text} #{translate('YearZeroEngine.difficulty')}=#{@difficulty}:#{translate('YearZeroEngine.failure_msg')}")
205
205
  end
206
206
  end
207
207
  return result_text
208
208
  end
209
209
 
210
210
  def make_result_with_myz(dice_count_text, dice_text)
211
- result_text = "#{dice_count_text} > #{dice_text} 成功数:#{@total_success_dice}"
212
- atter_text = "\n出目1:[能力:#{@base_botch_dice},技能:#{@skill_botch_dice},アイテム:#{@gear_botch_dice}) プッシュ可能=#{@push_dice}ダイス"
211
+ result_text = "#{dice_count_text} > #{dice_text} #{translate('YearZeroEngine.success_count')}:#{@total_success_dice}"
212
+ atter_text = "\n#{translate('YearZeroEngine.roll_one')}:[#{translate('YearZeroEngine.ability')}:#{@base_botch_dice},#{translate('YearZeroEngine.skill')}:#{@skill_botch_dice},#{translate('YearZeroEngine.item')}:#{@gear_botch_dice}) #{translate('YearZeroEngine.pushable')}=#{@push_dice}#{translate('YearZeroEngine.dice')}"
213
213
 
214
214
  if @difficulty > 0
215
215
  if @total_success_dice >= @difficulty
216
- return Result.success("#{result_text} 難易度=#{@difficulty}:判定成功!#{atter_text}")
216
+ return Result.success("#{result_text} #{translate('YearZeroEngine.difficulty')}=#{@difficulty}:#{translate('YearZeroEngine.success_msg')}#{atter_text}")
217
217
  else
218
- return Result.failure("#{result_text} 難易度=#{@difficulty}:判定失敗!#{atter_text}")
218
+ return Result.failure("#{result_text} #{translate('YearZeroEngine.difficulty')}=#{@difficulty}:#{translate('YearZeroEngine.failure_msg')}#{atter_text}")
219
219
  end
220
220
  end
221
221
 
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bcdice/game_system/YearZeroEngine'
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class YearZeroEngine_Korean < YearZeroEngine
8
+ # ゲームシステムの識別
9
+ ID = 'YearZeroEngine:Korean'
10
+
11
+ # ゲームシステム名
12
+ NAME = '이어 제로 엔진(Year Zero Engine)'
13
+
14
+ # ゲームシステム名の読みがな
15
+ SORT_KEY = '国際化:Korean:이어 제로 엔진(Year Zero Engine)'
16
+
17
+ # ダイスボットの使い方
18
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
19
+ ・다이스 풀 판정 커맨드(nYZEx+x+x+m)
20
+ (난이도)YZE(능력 주사위 수)+(기능 주사위 수)+(아이템 주사위 수)+(수정치) # (6만 셈함)
21
+ (난이도)YZE(능력 주사위 수)+(기능 주사위 수)+(아이템 주사위 수)-(수정치) # (6만 셈함)
22
+
23
+ ・다이스 풀 판정 커맨드(nMYZx+x+x)
24
+ (난이도)MYZ(능력 주사위 수)+(기능 주사위 수)+(아이템 주사위 수) # (1과 6을 세어 푸시 가능 수 표시)
25
+ (난이도)MYZ(능력 주사위 수)-(기능 주사위 수)+(아이템 주사위 수) # (1과 6을 세어 푸시 가능 수 표시, 기능 마이너스 지정)
26
+
27
+ ※ 난이도, 기능 주사위 수, 아이템 주사위 수는 생략 가능
28
+
29
+ ・스텝 다이스 판정 커맨드(nYZSx+x+m+f)
30
+ (난이도)YZS(능력 주사위 면 수)+(기능 주사위 면 수)+(수정치) # (1, 6을 세어 푸시 가능 수 표시)
31
+ (난이도)YZS(능력 주사위 면 수)+(기능 주사위 면 수)-(수정치) # (1, 6을 세어 푸시 가능 수 표시)
32
+ (난이도)YZS(능력 주사위 면 수)+(기능 주사위 면 수)+(수정치)A # (1, 6을 세어 푸시 가능 수 표시, 유리)
33
+ (난이도)YZS(능력 주사위 면 수)+(기능 주사위 면 수)-(수정치)A # (1, 6을 세어 푸시 가능 수 표시, 유리)
34
+ (난이도)YZS(능력 주사위 면 수)+(기능 주사위 면 수)+(수정치)D # (1, 6을 세어 푸시 가능 수 표시, 불리)
35
+ (난이도)YZS(능력 주사위 면 수)+(기능 주사위 면 수)-(수정치)D # (1, 6을 세어 푸시 가능 수 표시, 불리)
36
+ INFO_MESSAGE_TEXT
37
+
38
+ register_prefix_from_super_class()
39
+
40
+ def initialize(command)
41
+ super(command)
42
+ @locale = :ko_kr
43
+ end
44
+ end
45
+ end
46
+ end
@@ -28,7 +28,7 @@ module BCDice
28
28
  end
29
29
 
30
30
  def eval_game_system_specific_command(command)
31
- return check_action(command) || roll_tables(command, TABLES)
31
+ return check_action(command) || roll_tables(command, self.class::TABLES)
32
32
  end
33
33
 
34
34
  def check_action(command)
@@ -37,9 +37,7 @@ module BCDice
37
37
  .disable_modifier
38
38
  .restrict_cmp_op_to(:<=)
39
39
  parsed = parser.parse(command)
40
- unless parsed
41
- return nil
42
- end
40
+ return nil unless parsed
43
41
 
44
42
  dice_count = parsed.prefix_number || 1
45
43
  target_num = parsed.target_number
@@ -50,6 +48,7 @@ module BCDice
50
48
  is_success = dice_list.any? { |i| i <= target_num }
51
49
  is_critical = dice_list.any? { |i| i <= 5 }
52
50
  is_fumble = dice_list.any? { |i| i >= 96 && i > target_num }
51
+
53
52
  if is_critical && is_fumble
54
53
  is_critical = false
55
54
  is_fumble = false
@@ -57,16 +56,17 @@ module BCDice
57
56
 
58
57
  success_message =
59
58
  if is_success && is_critical
60
- "成功(クリティカル)"
59
+ translate("ZombiLine.success_critical")
61
60
  elsif is_success && is_fumble
62
- "成功(ファンブル)"
61
+ translate("ZombiLine.success_fumble")
63
62
  elsif is_success
64
- "成功"
63
+ translate("ZombiLine.success")
65
64
  elsif is_fumble
66
- "失敗(ファンブル)"
65
+ translate("ZombiLine.failure_fumble")
67
66
  else
68
- "失敗"
67
+ translate("ZombiLine.failure")
69
68
  end
69
+
70
70
  sequence = [
71
71
  "(#{parsed})",
72
72
  "[#{dice_list.join(',')}]",
@@ -81,33 +81,26 @@ module BCDice
81
81
  end
82
82
  end
83
83
 
84
- TABLES = {
85
- 'SST' => DiceTable::Table.new(
86
- 'ストレス症状表',
87
- '1D10',
88
- [
89
- '憤怒:一番近い敵を攻撃(成功率+20%)しにいきます。近くに敵がいない場合、誰かのストレスを+1させます。 頭に血が上り、誰かに怒りをぶつけます。',
90
- '逃避:落下してでも敵から逃げるように移動します。周囲に敵が居ない場合、現実逃避します。 耐えられなくなり、逃げ出します。',
91
- '幻覚:戦闘中は、「行動放棄(全AP)」します。戦闘以外なら、幻覚を見て笑います。 自分が望む幻覚が見えます。',
92
- '絶叫:戦闘中は、「注目を集める(2AP)」をします。戦闘以外なら、無意味に叫びます。 思わず叫んでしまいます。',
93
- '自傷:自ら【怪我】を負います。戦闘中は「自傷行為(1AP)」をして自分が【怪我】します。 思わず自分を傷つけます。',
94
- '不安:誰かのストレスを1上げます。近くに誰も居ない場合、泣き出します。 不安にかられて余計なことを言います。',
95
- '忌避:その場から一番近い対象に「石(1AP)」を投げます。それができない場合、【転倒】してうずくまります。 嫌悪感から全てを拒みます。',
96
- '暴走:一番近い敵を攻撃しにいきます。近くに敵がいない場合、周りの意見も聞かずに安直な行動をします。 冷静でいられなくなり、直情的になります。',
97
- '混乱:近くにいるランダムな対象に格闘で攻撃しにいきます。それができない場合、「行動放棄(全 AP)」します。 世界全てが敵に見えて攻撃します。',
98
- '開眼:ストレスは0まで下がります。あなたは教祖となって教義をひとつつくって「布教」できます。次の症状が出るまで効果は続きます。 ゾンビだらけの世界の真理を見つけます。',
99
- ]
100
- ),
101
- 'IT' => DiceTable::RangeTable.new(
102
- '食材表',
103
- '1d100',
104
- [
105
- [1..50, '生モノ食材'],
106
- [51..80, '怪しい食材'],
107
- [81..100, '危ない食材']
108
- ]
109
- )
110
- }.freeze
84
+ class << self
85
+ private
86
+
87
+ def translate_tables(locale)
88
+ {
89
+ 'SST' => DiceTable::Table.from_i18n("ZombiLine.SST", locale),
90
+ 'IT' => DiceTable::RangeTable.new(
91
+ I18n.t("ZombiLine.IT.name", locale: locale),
92
+ '1d100',
93
+ [
94
+ [1..50, I18n.t("ZombiLine.IT.items.raw", locale: locale)],
95
+ [51..80, I18n.t("ZombiLine.IT.items.suspicious", locale: locale)],
96
+ [81..100, I18n.t("ZombiLine.IT.items.dangerous", locale: locale)]
97
+ ]
98
+ )
99
+ }
100
+ end
101
+ end
102
+
103
+ TABLES = translate_tables(:ja_jp).freeze
111
104
 
112
105
  register_prefix('\d*ZL', TABLES.keys)
113
106
  end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bcdice/game_system/ZombiLine'
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class ZombiLine_Korean < ZombiLine
8
+ # ゲームシステムの識別子
9
+ ID = "ZombiLine:Korean"
10
+
11
+ # ゲームシステム名
12
+ NAME = "좀비 라인"
13
+
14
+ # ゲームシステム名の読みがな
15
+ SORT_KEY = "国際化:Korean:좀비 라인"
16
+
17
+ HELP_MESSAGE = <<~TEXT
18
+ ■ 판정 (xZL<=y)
19
+  x:주사위 개수(생략 시 1)
20
+  y:성공률
21
+
22
+ ■ 각종 표
23
+  스트레스 증상표 SST
24
+  식재료 표 IT
25
+ TEXT
26
+
27
+ register_prefix_from_super_class()
28
+
29
+ def initialize(command)
30
+ super(command)
31
+ @locale = :ko_kr
32
+ end
33
+
34
+ TABLES = translate_tables(:ko_kr).freeze
35
+ end
36
+ end
37
+ end