bcdice 3.12.0 → 3.14.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 (95) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +72 -0
  3. data/i18n/Arianrhod/ko_kr.yml +3 -0
  4. data/i18n/Cthulhu/en_us.yml +11 -0
  5. data/i18n/CyberpunkRed/ja_jp.yml +389 -0
  6. data/i18n/FinalFantasyXIV/en_us.yml +4 -0
  7. data/i18n/FinalFantasyXIV/ja_jp.yml +4 -0
  8. data/i18n/FutariSousa/ja_jp.yml +158 -1
  9. data/i18n/KizunaBullet/ja_jp.yml +653 -0
  10. data/i18n/MonotoneMuseum/ja_jp.yml +246 -14
  11. data/i18n/SkynautsBouken/ja_jp.yml +114 -0
  12. data/i18n/TensaiGunshiNiNaro/ja_jp.yml +126 -0
  13. data/i18n/UnsungDuet/ja_jp.yml +62 -0
  14. data/i18n/UnsungDuet/ko_kr.yml +62 -0
  15. data/i18n/en_us.yml +5 -0
  16. data/lib/bcdice/arithmetic/parser.rb +4 -2
  17. data/lib/bcdice/base.rb +1 -1
  18. data/lib/bcdice/command/parser.rb +4 -2
  19. data/lib/bcdice/common_command/add_dice/parser.rb +4 -2
  20. data/lib/bcdice/common_command/barabara_dice/parser.rb +4 -2
  21. data/lib/bcdice/common_command/calc/parser.rb +4 -2
  22. data/lib/bcdice/common_command/reroll_dice/parser.rb +4 -2
  23. data/lib/bcdice/common_command/tally_dice/parser.rb +4 -2
  24. data/lib/bcdice/common_command/upper_dice/parser.rb +4 -2
  25. data/lib/bcdice/dice_table/range_table.rb +24 -0
  26. data/lib/bcdice/game_system/Agnostos.rb +248 -0
  27. data/lib/bcdice/game_system/Airgetlamh.rb +1 -1
  28. data/lib/bcdice/game_system/Alsetto.rb +2 -2
  29. data/lib/bcdice/game_system/AniMalus.rb +261 -0
  30. data/lib/bcdice/game_system/Arianrhod_Korean.rb +30 -0
  31. data/lib/bcdice/game_system/ArknightsFan.rb +182 -0
  32. data/lib/bcdice/game_system/Avandner.rb +1 -1
  33. data/lib/bcdice/game_system/BBN.rb +1 -1
  34. data/lib/bcdice/game_system/BadLife.rb +3 -3
  35. data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
  36. data/lib/bcdice/game_system/BlackJacket.rb +244 -0
  37. data/lib/bcdice/game_system/Chill3.rb +6 -6
  38. data/lib/bcdice/game_system/ConvictorDrive.rb +5 -4
  39. data/lib/bcdice/game_system/Cthulhu_English.rb +59 -0
  40. data/lib/bcdice/game_system/CyberpunkRed.rb +14 -4
  41. data/lib/bcdice/game_system/DarkSouls.rb +1 -1
  42. data/lib/bcdice/game_system/DivineCharger.rb +841 -0
  43. data/lib/bcdice/game_system/Elric.rb +1 -1
  44. data/lib/bcdice/game_system/FinalFantasyXIV.rb +115 -0
  45. data/lib/bcdice/game_system/FinalFantasyXIV_English.rb +39 -0
  46. data/lib/bcdice/game_system/FullFace.rb +121 -0
  47. data/lib/bcdice/game_system/FutariSousa.rb +88 -8
  48. data/lib/bcdice/game_system/InfiniteFantasia.rb +4 -1
  49. data/lib/bcdice/game_system/Insane_Korean.rb +1 -1
  50. data/lib/bcdice/game_system/InvisibleLiar.rb +79 -0
  51. data/lib/bcdice/game_system/Irisbane.rb +1 -1
  52. data/lib/bcdice/game_system/KillDeathBusiness.rb +1 -1
  53. data/lib/bcdice/game_system/KizunaBullet.rb +240 -0
  54. data/lib/bcdice/game_system/KyokoShinshoku.rb +201 -0
  55. data/lib/bcdice/game_system/Liminal.rb +136 -0
  56. data/lib/bcdice/game_system/MetalHead.rb +1 -1
  57. data/lib/bcdice/game_system/MetalHeadExtream.rb +1 -1
  58. data/lib/bcdice/game_system/MonotoneMuseum.rb +14 -1
  59. data/lib/bcdice/game_system/NRR.rb +122 -0
  60. data/lib/bcdice/game_system/NSSQ.rb +1 -1
  61. data/lib/bcdice/game_system/NightWizard.rb +1 -1
  62. data/lib/bcdice/game_system/NightWizard3rd.rb +15 -2
  63. data/lib/bcdice/game_system/OneWayHeroics.rb +1 -1
  64. data/lib/bcdice/game_system/PastFutureParadox.rb +1238 -0
  65. data/lib/bcdice/game_system/Postman.rb +3 -3
  66. data/lib/bcdice/game_system/RecordOfSteam.rb +1 -1
  67. data/lib/bcdice/game_system/RuneQuestRoleplayingInGlorantha.rb +1 -1
  68. data/lib/bcdice/game_system/Ryutama.rb +4 -4
  69. data/lib/bcdice/game_system/ShuumatsuBargainWars.rb +203 -0
  70. data/lib/bcdice/game_system/Siren.rb +97 -0
  71. data/lib/bcdice/game_system/Skynauts.rb +1 -1
  72. data/lib/bcdice/game_system/SkynautsBouken.rb +45 -130
  73. data/lib/bcdice/game_system/Strave.rb +1 -1
  74. data/lib/bcdice/game_system/SwordWorld.rb +1 -1
  75. data/lib/bcdice/game_system/TensaiGunshiNiNaro.rb +228 -0
  76. data/lib/bcdice/game_system/TheOneRing2nd.rb +406 -0
  77. data/lib/bcdice/game_system/TheUnofficialHollowKnightRPG.rb +185 -0
  78. data/lib/bcdice/game_system/TherapieSein.rb +1 -1
  79. data/lib/bcdice/game_system/TrailOfCthulhu.rb +139 -0
  80. data/lib/bcdice/game_system/TrinitySeven.rb +1 -1
  81. data/lib/bcdice/game_system/UnsungDuet.rb +17 -75
  82. data/lib/bcdice/game_system/UnsungDuet_Korean.rb +41 -0
  83. data/lib/bcdice/game_system/Utakaze.rb +55 -2
  84. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +12 -6
  85. data/lib/bcdice/game_system/Warhammer4.rb +124 -3
  86. data/lib/bcdice/game_system/WerewolfTheApocalypse5th.rb +12 -6
  87. data/lib/bcdice/game_system/Yotabana.rb +62 -0
  88. data/lib/bcdice/game_system/cthulhu7th/full_auto.rb +1 -1
  89. data/lib/bcdice/game_system/cyberpunk_red/tables.rb +111 -473
  90. data/lib/bcdice/game_system/kizuna_bullet/tables.rb +171 -0
  91. data/lib/bcdice/game_system/sword_world/rating_parser.rb +4 -2
  92. data/lib/bcdice/game_system.rb +24 -0
  93. data/lib/bcdice/loader.rb +1 -1
  94. data/lib/bcdice/version.rb +1 -1
  95. metadata +55 -5
@@ -57,11 +57,11 @@ module BCDice
57
57
  diceCount = 2 if diceCount < 2
58
58
 
59
59
  modify = (Regexp.last_match(2) || 0).to_i
60
- modifyAddString = (Regexp.last_match(3) || '')
60
+ modifyAddString = Regexp.last_match(3) || ''
61
61
 
62
- type = (Regexp.last_match(6) || '')
62
+ type = Regexp.last_match(6) || ''
63
63
  target = (Regexp.last_match(7) || 0).to_i
64
- targetAddString = (Regexp.last_match(8) || '')
64
+ targetAddString = Regexp.last_match(8) || ''
65
65
 
66
66
  modify_list = modifyAddString.scan(/[+-]\d+/)
67
67
  modify_list.each { |i| modify += i.to_i }
@@ -118,7 +118,7 @@ module BCDice
118
118
  end
119
119
 
120
120
  def getRoundCountText(roundCount)
121
- if roundCount <= 0
121
+ if roundCount <= 0
122
122
  return ""
123
123
  end
124
124
 
@@ -7,7 +7,7 @@ module BCDice
7
7
  ID = 'RuneQuestRoleplayingInGlorantha'
8
8
 
9
9
  # ゲームシステム名
10
- NAME = 'RuneQuest:Roleplaying in Glorantha'
10
+ NAME = 'ルーンクエスト:ロールプレイング・イン・グローランサ'
11
11
 
12
12
  # ゲームシステム名の読みがな
13
13
  SORT_KEY = 'るうんくえすと4'
@@ -108,8 +108,8 @@ module BCDice
108
108
  end
109
109
 
110
110
  def isValidDice(dice1, dice2)
111
- return (isValidDiceOne(dice1) &&
112
- isValidDiceOne(dice2))
111
+ return isValidDiceOne(dice1) &&
112
+ isValidDiceOne(dice2)
113
113
  end
114
114
 
115
115
  def isValidDiceOne(dice)
@@ -144,7 +144,7 @@ module BCDice
144
144
  return ''
145
145
  end
146
146
 
147
- if total >= difficulty
147
+ if total >= difficulty
148
148
  return "成功"
149
149
  end
150
150
 
@@ -152,7 +152,7 @@ module BCDice
152
152
  end
153
153
 
154
154
  def isFamble(value1, value2)
155
- return ((value1 == 1) && (value2 == 1))
155
+ return (value1 == 1) && (value2 == 1)
156
156
  end
157
157
 
158
158
  def isCritical(value1, value2, dice1, dice2)
@@ -0,0 +1,203 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class ShuumatsuBargainWars < Base
6
+ # ゲームシステムの識別子
7
+ ID = "ShuumatsuBargainWars"
8
+
9
+ # ゲームシステム名
10
+ NAME = "終末買い物戦争"
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = "しゆうまつはあけんうおおす"
14
+
15
+ HELP_MESSAGE = <<~TEXT
16
+ ・行為判定 (nBGk+y>=t)n:ダイス数、k:心根、y:修正値(省略可)、t:目標値
17
+ 例)3BG1>=3 2BG3+1>=4 4BG5-1>=3
18
+ ・アイテム表
19
+ ・RT 回復系アイテム表
20
+ ・CT 便利系アイテム表
21
+ ・WT 武器系アイテム表
22
+ ・WG ワゴン(全アイテムランダム)
23
+ ・ET イベント表
24
+ ・TT トラブル表
25
+ TEXT
26
+
27
+ def initialize(command)
28
+ super(command)
29
+ @sort_barabara_dice = true
30
+ @d66_sort_type = D66SortType::ASC
31
+ end
32
+
33
+ RecoveryItemTable = DiceTable::D66Table.new(
34
+ '回復系アイテム表',
35
+ D66SortType::ASC,
36
+ {
37
+ 11 => '飴玉',
38
+ 12 => 'エナジードリンク',
39
+ 13 => 'せんべい',
40
+ 14 => '餅',
41
+ 15 => 'ロウソク',
42
+ 16 => '酒',
43
+ 22 => '寿司',
44
+ 23 => 'ばんそうこう',
45
+ 24 => 'お布団',
46
+ 25 => 'カレー',
47
+ 26 => '消毒液',
48
+ 33 => '缶詰',
49
+ 34 => 'みたらし団子',
50
+ 35 => '骨付き肉',
51
+ 36 => 'ステーキ',
52
+ 44 => 'うちわ',
53
+ 45 => 'ぬいぐるみ',
54
+ 46 => 'のり',
55
+ 55 => '美容液',
56
+ 56 => '黄色いハンカチ',
57
+ 66 => '洗剤',
58
+ }
59
+ )
60
+
61
+ ConvenienceItemTable = DiceTable::D66Table.new(
62
+ '便利系アイテム表',
63
+ D66SortType::ASC,
64
+ {
65
+ 11 => 'ちくわ',
66
+ 12 => '焼き芋',
67
+ 13 => 'トイレットペーパー',
68
+ 14 => '熊手',
69
+ 15 => '胡椒',
70
+ 16 => '鏡',
71
+ 22 => '割りばし',
72
+ 23 => '輪ゴム',
73
+ 24 => '塩の結晶',
74
+ 25 => 'プチプチマット',
75
+ 26 => '長靴',
76
+ 33 => 'バケツ',
77
+ 34 => 'アルミホイル',
78
+ 35 => '下敷き',
79
+ 36 => '長芋',
80
+ 44 => '鉛筆',
81
+ 45 => 'まな板',
82
+ 46 => 'フライパン',
83
+ 55 => 'ほうき',
84
+ 56 => 'クラッカー',
85
+ 66 => '消臭スプレー',
86
+ }
87
+ )
88
+
89
+ WeaponItemTable = DiceTable::D66Table.new(
90
+ '武器系アイテム表',
91
+ D66SortType::ASC,
92
+ {
93
+ 11 => 'アズキアイス',
94
+ 12 => 'スプーン',
95
+ 13 => 'フォーク',
96
+ 14 => 'カミソリ',
97
+ 15 => '電池',
98
+ 16 => 'デッキブラシ',
99
+ 22 => '傘',
100
+ 23 => '物干し竿',
101
+ 24 => '鉄パイプ',
102
+ 25 => 'くぎ打ち機',
103
+ 26 => 'モンキーレンチ',
104
+ 33 => 'ハエタタキ',
105
+ 34 => '鎌',
106
+ 35 => '蛍光灯',
107
+ 36 => '包丁',
108
+ 44 => 'ハサミ',
109
+ 45 => 'ショベル',
110
+ 46 => '釣り竿',
111
+ 55 => '芝刈り機',
112
+ 56 => 'ステッキ',
113
+ 66 => '小麦粉',
114
+ }
115
+ )
116
+
117
+ TABLES = {
118
+ "ET" => DiceTable::Table.new(
119
+ "イベント表",
120
+ "2D6",
121
+ [
122
+ "ドッキン!一目惚れ!好きなキャラクターを1人選ぶ。このセッション中その相手との関係の深度を互いに3以上にすることができた場合、シナリオの結末に関係なく貴方は完全無欠のハッピーエンドを迎え経験点を100点得る。達成できなかった場合、エンディングフェイズで目が覚める。",
123
+ "おや?こんな所にアイテムが転がっている。ランダムに選んだアイテムを獲得する。そのアイテムの種別が支援・計画ならば[技術]/5の判定に成功すれば手番を消費せずそのアイテムを使用しても良い。",
124
+ "チームメンバーと二人っきりになる。ちょっといい雰囲気かも。好きなキャラクターを目標に選び、『関係』のチェックを外す事ができる。",
125
+ "あぶな~い!チームメンバーに危機が襲い掛かる。PCの中からランダムに1人を選び[武力]/5の判定を行う。成功すると互いに『関係』を結ぶことができる。失敗すると2人とも体力に1d6点のダメージ。",
126
+ "ちょっとお食事でも如何?自身の体力3点と活力1点を回復させる。",
127
+ "穏やかな時が流れる。このメンバーならこれからも上手くやっていけそうだ。ランダムにPCを選び『関係』を獲得する。",
128
+ "チームメンバーの意外な一面を覗く、まさかアイツあんな趣味があったなんて!PCの中からランダムで1人を選び[精神]/6で判定を行う。成功すると互いに『関係』を獲得する。失敗すると互いに活力が1点減少する。",
129
+ "仲間と意見が対立する。アイツにだけは負けられない!関係を持つPCの中からランダムで1人を選び、対象との関係の深度を1下げてもよい(0未満にならない)。下げた場合、以降のセッション中任意の能力値が1上昇したものとして判定を行う事ができる。この効果で実際に能力値は上がらない。",
130
+ "何かお手伝いをしよう。好きなキャラクターを1人選ぶ。この休憩中次に相手が判定を行う場合、その判定に修正値+1を加える。その後、目標は自分に対し『関係』を獲得する。",
131
+ "酒を発見、宴だぁああ!!!PCは全員回復アイテムの「酒」の効果を使用できる。その後、自分の持つ全ての『関係』をランダムな相手に同じ《深度》で取り直す。",
132
+ "不味い!敵襲だ!バナナワニにキリミウオが戦闘を仕掛けに来る。戦闘に勝利した場合、好きなアイテムを1つ得る。この処理が面倒ならば戦闘を行う代わりにPC達全員の体力の値を半分にし戦闘に勝利したものとして扱っても良い。"
133
+ ]
134
+ ),
135
+ "TT" => DiceTable::Table.new(
136
+ "トラブル表",
137
+ "1D6",
138
+ [
139
+ "緊張感からか焦りが生じる。以降スポットフェイズに行くまでの間あらゆる判定の成功度が1減少する。",
140
+ "カートの操作が効かなくなった!このラウンドは操作表を全員ダイスを振りランダムで決定する事。",
141
+ "派手な振動が起き頭をぶつける。全員1d6点のダメージを受ける。",
142
+ "集中力が切れて来た……全員の活力を1 点減少させる",
143
+ "激しく揺さぶられ荷物が落下する。カート内にあるアイテムを1 つ選ぶ。そのアイテムを失う。",
144
+ "不気味な超市場の雰囲気がパッセンジャー達の不安を煽る。特に何も起こらない。",
145
+ ]
146
+ ),
147
+ "RT" => RecoveryItemTable,
148
+ "CT" => ConvenienceItemTable,
149
+ "WT" => WeaponItemTable,
150
+ "WG" => DiceTable::ChainTable.new(
151
+ "ワゴン",
152
+ "1D6",
153
+ [
154
+ RecoveryItemTable,
155
+ RecoveryItemTable,
156
+ ConvenienceItemTable,
157
+ ConvenienceItemTable,
158
+ WeaponItemTable,
159
+ WeaponItemTable,
160
+ ]
161
+ ),
162
+ }.freeze
163
+
164
+ register_prefix('\d+BG', TABLES.keys)
165
+
166
+ def eval_game_system_specific_command(command)
167
+ return roll_bg(command) || roll_tables(command, TABLES)
168
+ end
169
+
170
+ private
171
+
172
+ def roll_bg(command)
173
+ parser = Command::Parser.new("BG", round_type: @round_type)
174
+ .has_prefix_number
175
+ .has_suffix_number
176
+ .restrict_cmp_op_to(:>=)
177
+ parsed = parser.parse(command)
178
+ return nil unless parsed
179
+
180
+ times = parsed.prefix_number
181
+ kokorone = parsed.suffix_number
182
+ correction = parsed.modify_number
183
+ target = parsed.target_number
184
+ dice_list = @randomizer.roll_barabara(times, 6).sort
185
+ success = dice_list.count { |number| number >= target - correction }
186
+ get_vitality = dice_list.count(kokorone)
187
+
188
+ result =
189
+ if dice_list.count(6) >= 2
190
+ Result.critical("スペシャル! 成功度#{success + 1}、活力#{get_vitality}獲得")
191
+ elsif dice_list.all?(1)
192
+ Result.fumble("ファンブル 活力をすべて失う")
193
+ else
194
+ Result.new("成功度#{success}、活力#{get_vitality}獲得")
195
+ end
196
+
197
+ result.text = "(#{parsed}) > [#{dice_list.join(',')}] > #{result.text}"
198
+
199
+ return result
200
+ end
201
+ end
202
+ end
203
+ end
@@ -0,0 +1,97 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bcdice/command/parser'
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class Siren < Base
8
+ # ゲームシステムの識別子
9
+ ID = "Siren"
10
+
11
+ # ゲームシステム名
12
+ NAME = "終末アイドル育成TRPG セイレーン"
13
+
14
+ # ゲームシステム名の読みがな
15
+ SORT_KEY = "せいれえん"
16
+
17
+ HELP_MESSAGE = <<~TEXT
18
+ ・判定: SL+a<=b±c
19
+ a=達成値への修正(0の場合は省略)
20
+ b=能力値
21
+ c=判定への修正(0の場合は省略、複数可)
22
+ 例)判定修正-10の装備を装着しながら【技術:60】〈兵器:2〉で判定する場合。
23
+ SL+2<=60+40-10
24
+
25
+ ・育成: TR$a<=b
26
+ a=育成した回数
27
+ b=ヘルス
28
+ 例)ヘルスの現在値が60で2回目の【身体】の育成を行う場合。
29
+ TR$2<=60
30
+ TEXT
31
+
32
+ def eval_game_system_specific_command(command)
33
+ case command
34
+ when /^SL/ then check_action(command)
35
+ when /^TR/ then check_training(command)
36
+ else return nil
37
+ end
38
+ end
39
+
40
+ def check_action(command)
41
+ parser = Command::Parser.new('SL', round_type: @round_type).restrict_cmp_op_to(:<=)
42
+ parsed = parser.parse(command)
43
+ return nil if parsed.nil?
44
+
45
+ target = parsed.target_number
46
+
47
+ dice = @randomizer.roll_once(100)
48
+
49
+ if dice > target
50
+ return Result.failure("(1D100<=#{target}) > #{dice} > 失敗")
51
+ end
52
+
53
+ dig10 = dice / 10
54
+ dig1 = dice % 10
55
+ if dig10 == 0
56
+ dig10 = 10
57
+ end
58
+ if dig1 == 0
59
+ dig1 = 10
60
+ end
61
+ achievement_value = dig10 + dig1 + parsed.modify_number
62
+ return Result.success("(1D100<=#{target}) > #{dice} > 成功(達成値:#{achievement_value})")
63
+ end
64
+
65
+ def check_training(command)
66
+ parser = Command::Parser.new('TR', round_type: @round_type).restrict_cmp_op_to(:<=).enable_dollar.disable_modifier
67
+ parsed = parser.parse(command)
68
+ return nil if parsed.nil?
69
+
70
+ count = parsed.dollar
71
+ return nil if count.nil?
72
+
73
+ target = parsed.target_number
74
+
75
+ dice = @randomizer.roll_once(100)
76
+
77
+ dig10 = dice / 10
78
+ dig1 = dice % 10
79
+ if dig10 == 0
80
+ dig10 = 10
81
+ end
82
+ if dig1 == 0
83
+ dig1 = 10
84
+ end
85
+ achievement_value = dig10 + dig1
86
+
87
+ if dice > target
88
+ return Result.failure("(1D100<=#{target}) > #{dice} > 失敗(能力値減少:10 / ヘルス減少:#{achievement_value})")
89
+ end
90
+
91
+ return Result.success("(1D100<=#{target}) > #{dice} > 成功(能力値上昇:#{count * 5 + achievement_value} / ヘルス減少:#{achievement_value})")
92
+ end
93
+
94
+ register_prefix('SL', 'TR')
95
+ end
96
+ end
97
+ end
@@ -50,7 +50,7 @@ module BCDice
50
50
  private
51
51
 
52
52
  def get_judge_result(command)
53
- return nil unless (m = (/^2D6<=(\d)$/i.match(command) || /^SN(\d*)$/i.match(command)))
53
+ return nil unless (m = /^2D6<=(\d)$/i.match(command) || /^SN(\d*)$/i.match(command))
54
54
 
55
55
  debug("====get_judge_result====")
56
56
 
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "bcdice/base"
4
+
3
5
  module BCDice
4
6
  module GameSystem
5
7
  class SkynautsBouken < Base
@@ -41,116 +43,38 @@ module BCDice
41
43
    例)SN/D/4 3SN#2/D[大揺れ]/2
42
44
  MESSAGETEXT
43
45
 
44
- TABLES = {
45
- 'FT' => DiceTable::Table.new(
46
- 'ファンブル表',
47
- '1D6', [
48
- "なんとか大事にはいたらなかった。通常の失敗と同様の処理を行うこと。",
49
- "転んでしまった。キミは[転倒](p107)する。",
50
- "失敗にイライラしてしまった。キミは獲得している【キズナ】1つの「支援チェック」にチェックを入れる。",
51
- "自身のいるマスを[破損](p104)させる。この[破損]によって、キミの【生命点】は減少しない。",
52
- "頭をぶつけてしまった。キミの【生命点】を「1d6点」減少する。",
53
- "奇跡的な結果。 この行為判定は成功となる。",
54
- ]
55
- ),
56
- 'NV' => DiceTable::Table.new(
57
- '航海表',
58
- '1d6',
59
- [
60
- 'スポット1つ分進む',
61
- 'スポット1つ分進む',
62
- 'スポット1つ分進む',
63
- 'スポット2つ分進む',
64
- 'スポット2つ分進む',
65
- 'スポット3つ分進む',
66
- ]
67
- ),
68
- "NEN" => DiceTable::Table.new(
69
- "航行イベント表 航行系",
70
- "2D6",
71
- [
72
- "フナ酔い\nバッドステータス。キミは次のクエスト終了フェイズまで、【移動力】が「1点」なくなり、「ダッシュ」(p101)を行うことができない。\n 空の上で風に揺さぶられていると、まるで自分と世界が混ざったような感覚がするんだ。それを思い出すだけで……ウプッ。",
73
- "乱流\n次のシーンでは、航行表の結果にかかわらず、航行チェックで飛空艇駒が進む距離がスポット1つ分になる。\n このあたりの風の流れはデタラメだ。これじゃ、風に乗ってフネを進めることなんてできやしない。焦らず、慎重に進むべきだ。",
74
- "急変\nGMは、フライトエリア上の任意のスポット2つを選択する。そのスポットのイベントタイプは「困難系」に変更される。\n 空の天気はきまぐれだ。天気が変わることを止めることは出来ない。けれども、こういう変わり方はしてほしくなかったな……。",
75
- "シケ\n次のシーンでは、シーンプレイヤーは航行チェックを行うことができず、「操舵に専念する」を宣言することもできない。\n ぽつり、ぽつりと窓に雨粒が滴り落ちる。こうなってしまえば、フネを進めることはできない。この間に紅茶を1杯、というのもいいだろう。……ティータイムには生憎の空模様だがね。",
76
- "気流-1\n飛空艇コマを1スポット分戻す。\n 飛空艇に吹く気流は、常に探空士たちの味方をするとは限らない。誰かの追い風は、誰かの向かい風となってしまうこともあるだろう。",
77
- "穏やかな空\nこの航行イベントには、特に効果はない。\n 見通しのいい空域。風向きも安定しており、舵を取られるようなこともないだろう。気持ちのいい青空の中、白い雲の合間を縫うようにして、フネは進んでいく。",
78
- "気流+1\n飛空艇コマを+1スポット分進める。\n 他の空域よりも、比較的強い流れが一定の方向に吹き続けている空域。ときに探空士たちの手助けになり、ときに探空士たちに立ちはだかる。どの空域にどんな風が流れているかを見極めて進むのが、空の旅での基本だ。",
79
- "進路良好!\n飛空艇は【手がかり】を「1つ」得る。\n このあたりはとても見晴らしがいい。雲海から上には雲ひとつ見当たらず、邪魔な浮遊生物たちもいない。",
80
- "突風+1\n飛空艇コマを1スポット分進める。その後、飛空艇コマのいるスポットのイベントタイプを確認し、そのイベントタイプの航行表を振って、出たイベントの効果を適用する。\n 突然、フネに強風が吹き付ける。なんとか転覆することなく持ち直したけれども、予定していたコースを外れてしまったようだ。なにか起こるかもしれない。警戒を強めたほうがいいだろう。",
81
- "貿易風\n次のシーンの航行チェックでは、ダイスを振らずに、航行表の結果の中から好きなものを選んで適用することができる。\n 気流が吹く空域の中でも、特に風向きが安定していて、飛空艇乗りたちに空路として好まれている空域。飛翔イカ等の小さな浮遊生物なんかも、よく群がっている。",
82
- "気流+2\n飛空艇コマを2スポット分進める。\n うまい具合に気流に乗ることが出来れば、飛空艇はその性能以上の働きを見せてくれる。進路良好、この分なら、予定よりも早く目的地につくことができるだろう。"
83
- ]
84
- ),
85
- "NEE" => DiceTable::Table.new(
86
- "航行イベント表 遭遇系",
87
- "2D6",
88
- [
89
- "風邪\nバッドステータス。キミは次のクエストフェイズ終了時まで、すべての[得意]な【能力】が[得意]でないもとして扱われる。\n 寒空の中見張りをしたのが悪かったのだろうか。 それとも食事? せめて風邪を引くのなら、 旅立つ前にしておいてほしかったな。",
90
- "敵対的なソラクジラ\n飛空艇は「D46[大揺れ]/1」のダメージを受ける。\n 飛空艇乗りに人気のソラクジラにも、機嫌が悪いときがある。 こんなときに近づいてしまったのなら、運が悪かったとしか言いようがない。 ご愁傷さま。",
91
- "トラブルメーカー\nキミの【生命点】を「3点」減少させる。\n えへへ、 じゃないよ! なんてことしてくれたんだ!",
92
- "敵対的な浮遊生物\n飛空艇は「D/3」のダメージを受ける。\n 浮遊生物は 飛空艇に友好的とは限らない。 彼らの生態系に飛び込んでしまったフネには、 彼らなりの出迎え方があるというものだ。",
93
- "検問\nこのシーンでは、キミはアクションを行うことができない。\n キミたちのフネの上に巨大な影が落ちる。 キミたちのフネの数倍はあろうかという、 王立空軍の巡空 艦だ。「女王陛下万歳!」 赤い服の兵士たちが、 敬礼とともにキミたちの書類仕事を増やしていく。 ……やりたいことだってあったのに。",
94
- "風光明媚\n船内マップ上にいるすべてのキャラクターは、【生命点】を「1点」回復させる。\n 空を旅していると、 想像を絶するような絶景に恵まれることもある。夕日を受けて茜色に染まる雲海 や、雲を跳ねるソライルカの群れ。 そんな光景を目に焼き付けたとき、 探空士たちは、自分たちが空を旅する意味に気づくんだ。",
95
- "ソラクジラ\n船内マップ上にいるすべてのキャラクターは、【生命点】を「1D6点」回復させる。\n 雲の中から、 巨大なソラクジラが浮かび上がる。きゅうんという独特の鳴き声をあげて、ゆっくりと、落ちるように雲の下へ戻っていくソラクジラの雄大な姿は、なかなか見られるものじゃない。 息を呑む圧巻の光景に、しばし目を奪われよう。",
96
- "大漁\n船内マップ上にいるすべてのキャラクターの【生命点】の最大値を「2点」増加する。この効果は重複しない。\n 飛翔イカの群れだ! どうも、 窓から漏れる明かりにつられてやってきたらしい。網をはろう。今夜は新鮮なイカがたらふく食べられそうだ。",
97
- "気流+1\n飛空艇コマを1スポット分進める。\n 他の空域よりも、比較的強い流れが一定の方向に吹き続けている空域。ときに探空士たちの手助けになり、ときに探空士たちに立ちはだかる。どの空域にどんな風が流れているかを見極めて進むのが、空の旅での基本だ。",
98
- "ケセランパセラン\nキミは任意の船内マップ上に配置されてるパーツ1つを選択する。そのパーツが【快適度】のキーワード効果がある場合、このセッションの間、その数値は「1点」高いものとして扱う。\n ふわふわとした大きな綿毛のような浮遊生物。その毛のさわり心地は、上級階級のソファにも使われるほど柔らかい。捕まえて飼うことができれば、一服の癒やしをあたえてくれることだろう。",
99
- "うさこぷたー\nキミの【生命点】を「3点」回復する。\n ふたつの耳を回転させて空を飛ぶうさぎのような浮遊生物が、ずっとこちらを見つめている。かわいいはかわいいのだが、こいつは一体なんなんだろう……。"
100
- ]
101
- ),
102
- "NEO" => DiceTable::Table.new(
103
- "航行イベント表 船内系",
104
- "2D6",
105
- [
106
- "二日酔い\nバッドステータス。キミは次のクエストフェイズ終了時まで、すべての行為判定の【ファンブル値】が「1」高いものとして扱う。\n 仲間との楽しい時間、まだ見ぬ素晴らしい景色。空での旅路は、ビールを美味しくするものにあふれている。だからこれは、 空の旅で出くわす様々な危険のひとつだともいえるんだ。嵐や空賊みたいにさ。頭の痛い存在だよ。",
107
- "イメージダウン\n船内マップ上にいるすべてのキャラクターは、キミに対して獲得している【キズナ】の「支援チェック」にチェックを入れる。\n お前、本当に何したんだよ……。",
108
- "白熱\nキミは、任意の船内マップ上のキャラクターを1人選ぶ。その後、キミは船内マップ上の、キャラクターが居ない底面マスが2つ以上あるパーツを選び、そのパーツのキャラクターが居ない任意の底面マスにキミと選んだキャラクターを移動させる。このシーン、キミは「交流」以外のアクションを行うことはできない。(パーツを選ぶことができなかった場合、キャラクターの移動は行われず、キミはこのシーン中、アクションを行うことができない)\n ちょっとした暇つぶしのはずだった。キミがカードを取り出したから、相手も乗っただけだ。でも、勝ったほうは嬉しいし、負けた方は悔しい。それだけのことを、キミたちは忘れてはいけなかったんだ。",
109
- "見てしまった\nキミは、自身が獲得している任意の【キズナ】1つを選ぶ。その【キズナ】は失われる。\n 誰にだって、隠したい秘密のひとつやふたつはあるものだ。それを咎めるのはよくない。偶然それを目にしてしまったキミが悪いわけでもない。運が悪かっただけなんだ。な?",
110
- "ケンカ\nキミは、自身が獲得している任意の【キズナ】1つを選んで、その「支援チェック」にチェックを入れる。もし、キミが獲得しているすべての【キズナ】に「支援チェック」が入っている場合、かわりにキミの【生命点】を「1D6点」減少させる。\n 些細ないさかいで、チームワークにひびが入ってしまうことはよくあることだ。人の仲は、ときに人生に影を落とす。 もっとも、ケンカする相手もいないよりは、よっぽどましな人生だと思うけどね。",
111
- "おしゃべり\nこのシーン中、キミが「交流」のアクションを行うとき、キミのいるパーツ内のキャラクター以外のキャラクターも選ぶことができる。\n 船内に張り巡らされた伝声管を通せば、船内の誰とでも連絡をとることができる。いざというときのための設備だが、何気ないおしゃべりに花を咲かせるのもいいものだ。",
112
- "月が綺麗ですね\nキミは、任意の船内マップ上のキャラクター1人を選ぶ。キミは、そのキャラクターに対する【キズナ】を獲得する。\n 綺麗ですね 夜空に黄色い月が、まんまるな月が輝いている。フネの中はいつだって機関室の音で騒々しいが、月を眺めるときだけはなぜか、しぃんとした静けさを感じるんだ。",
113
- "プレゼント\nキミは、任意の船内マップ上のキャラクター1人を選ぶ。そのキャラクターは、キミに対する【キズナ】を獲得する。\n ちょっといい感じの包み紙に包まれたチョコレートや、普段は飲まない銘柄の茶葉。特段意味のあるわけでもない置物。幸福とはつまるところ、そういったものと、誰かの思いでできている。",
114
- "気流+1\n飛空艇コマを1スポット分進める。\n 他の空域よりも、比較的強い流れが一定の方向に吹き続けている空域。ときに探空士たちの手助けになり、ときに探空士たちに立ちはだかる。どの空域にどんな風が流れているかを見極めて進むのが、空の旅での基本だ。",
115
- "記念日\n船内マップ上にいるすべてのキャラクターは、キミに対して【キズナ】を獲得する。\n 今朝起きてから、みんながどこかよそよそしい。話しかけても要領を得ないし、自分だけのけものにして、なにかの話し合いをしているらしい。いやだな。なにかしたっけな。あれ、そういえば今日って……。",
116
- "パーティ\n船内マップ上にいるすべてのキャラクターは、それぞれ、任意のキャラクター1人を選ぶ。それぞれのキャラクターは、選んだキャラクターへの【キズナ】を獲得する。\n この日ばっかりは仕事はよそう! 樽いっぱいのビールに、船長秘蔵のワイン。テーブルの上にはとにかく、飲むものと、つまむものでいっぱいだ。"
117
- ]
118
- ),
119
- "NEH" => DiceTable::Table.new(
120
- "航行イベント表 困難系",
121
- "2D6",
122
- [
123
- "ケガ\nバッドステータス。キミは次のクエストフェイズ終了時まで、【生命点】の最大値が「5点」となる。すでに5点以上の【生命点】があった場合は、あわせて【生命点】が「5点」になる。\n ケガのひとつやふたつが、旅を終える理由になるわけがない。だが、何をするにしてもキミの身に走る激痛は、確実にキミの行く手を阻むだろう。これまで通りの穏やかな旅路とかいかなくなるはずだ。",
124
- "大災害\n飛空艇は「D/5」のダメージを受ける。このダメージに《回避運動》のスキル効果を使用することはできない。\n 空で旅を続けていれば、どうしようもない状況に出くわすなんてしょっちゅうだ。そんなときどうするのかって? どうしようもないからただ祈る? 決まってるさ。それでもなんとかするんだよ。",
125
- "自然の猛威\n飛空艇は「D/4」のダメージを受ける。このダメージに《回避運動》のスキル効果を使用することはできない。\n 『塔』の上の人間は、いつか自然を人間が支配するときが来ると思っている。自然の力を身を以て体感する探空士に、そんな考えをもっているヤツはいない。",
126
- "シケ\n次のシーンでは、シーンプレイヤーは航行チェックを行うことができず、「操舵に専念する」を宣言することもできない。\n ぽつり、ぽつりと窓に雨粒が滴り落ちる。こうなってしまえば、フネを進めることはできない。この間に紅茶を1杯、というのもいいだろう。……ティータイムには生憎の空模様だがね。",
127
- "落雷\n飛空艇は「D/3」のダメージを受ける。このダメージに《回避運動》のスキル効果を使用することはできない。\n 突如、飛空艇を轟音と、閃光が包む。何事か、とキミが周囲を確認するより先に、フネに稲妻がほとばしり、どこかが焼ける焦げ臭い匂いが、キミの鼻腔をつく。これはまずいぞ。はやくこの空域を抜けるんだ!",
128
- "ゲリラ豪雨\n飛空艇は「D/3」のダメージを受ける。\n 暴風に呑まれまいと、出力最大で風雨を振り切る。エンジンは赤熱し、吐き出す蒸気が機関室を白く染める。……もってくれよ。こんなところで空に放り出されるのはゴメンだ。",
129
- "嵐の前触れ\n次のシーンでは、スポットのイベントタイプや、「その場に留まる」を宣言したかどうかにかかわらず、航行イベントを「航行イベント表:困難系」を使用して決定する。\n 突然目の前に現れたどす黒い雲。気圧計の針がみるみるうちに下がっていき、キミたちに不穏な前触れを告げる。これは、覚悟を決めなければならないかもしれない……。",
130
- "シケ\n次のシーンでは、シーンプレイヤーは航行チェックを行うことができず、「操舵に専念する」を宣言することもできない。\n ぽつり、ぽつりと窓に雨粒が滴り落ちる。こうなってしまえば、フネを進めることはできない。この間に紅茶を1杯、というのもいいだろう。……ティータイムには生憎の空模様だがね。",
131
- "気流+2\n飛空艇コマを2スポット分進める。\n このあたりは危険な空域らしいが、このくらいの風を則こなせなければ、プロとは言えない。事実、キミはそれをやってのけた。これが、探空士の仕事ぶりというものさ。",
132
- "荒れ狂う空\nキミは「身体・感覚:7」の行為判定を3回行う。失敗した回数だけ、飛空艇は「D/3」のダメージを受ける。\n うっかりしてるにしても、これはひどすぎだ! 気づけばフネは暴風域のど真ん中。これを抜けるのは、ただの乱気流と避けるのとはワケが違うんだぞ!",
133
- "低気圧の中心\nキミは「身体・感覚:9」の行為判定を行う。この判定に成功しない限り、飛空艇コマはフライトエリア上を移動することできず、次のシーンの航行イベントも、自動的に「低気圧の中心」となる。行為判定に成功したかどうかにかかわらず、その後の飛空艇は「D/4」のダメージを受ける。このダメージに《回避運動》のスキル効果を使用することはできない。\n 巨大な渦巻きのような雲。近づくだけでフネは引き寄せられ、一瞬でも舵をはなせば呑み込まれてしまう。その圧倒的な力はさながら、巨大な竜に襲われているかのようだ。"
134
- ]
135
- ),
136
- "NEL" => DiceTable::Table.new(
137
- "航行イベント表 長旅系",
138
- "2D6",
139
- [
140
- "フィーバー\nバッドステータス。キミは次のクエストフェイズ終了時まで、何らかの行為判定を行うたびに、【生命点】を「1点」減少させる。\n 一周回って、というやつさ。なんだか楽しくなってきてしまった。今なら何をやってもうまくいく気がするし、うまくいかなくても気にならない気がするんだ。",
141
- "ギスギスした雰囲気\n船内マップ上のキャラクター全員は、自身が獲得している【キズナ】すべての「支援チェック」にチェックを入れなければならない。\n 誰のせいでもない。いうなれば全員のせいなんだ。でも、誰かのせいにせずにはいられなかったのさ。",
142
- "エンジントラブル\nキミは船内マップ上の、任意の「機関室」カテゴリのパーツ1つを選び、さらにそのパーツ内の任意の、[破損]していないマス1つを選ぶ。そのマスは[破損]する。\n ……ボンッ!",
143
- "食糧難\n船内マップ上のキャラクター全員の【生命点】が「2点」減少する。\n キミたちの前には、缶詰がひとつだけ。キミたちは顔を突き合わせ、お互いをにらみつける。どのみち、こんなものを奪いあっても、何にもならないというのに。",
144
- "老朽化\nキミのいるマスが[破損]する。この[破損]によって、キミの【生命点】は減少しない。\n 最近ミシミシというようになってきたな。とは思ったんだ。いつか修理しなきゃ、と思っていたさ。でも、こう、パキッといきなりいっちゃうとは思わなかったんだ。本当だよ。",
145
- "まだ大丈夫……\nこの航行イベントには、特に効果はない。\n 今の所、このフネにはまだ安全な空の旅を続けるだけの余裕はある。だが、キミたちの脳裏には不安がよぎる。安全はあっても、安心はできないのだ。",
146
- "先を急ぐ\nこのシーン中、キミはアクションを行うことができない。その代わりに、飛空艇コマを1スポット分移動させる。\n 先を急ごう。焦燥に苛まれる中、キミたち全員がそう思っていた。のんびりと旅を楽しんでいる時間はない。そんな時間は、とっくの昔に過ぎ去っている。",
147
- "パンデミック\nキミは「フナ酔い」(p91)、「二日酔い」(p93)、「ケガ」(p94)から1つを選ぶ。船内マップ上にいるキャラクター全員は、選ばれた航行イベントに記載されているバッドステータスを受ける。\n 悪いことに、病気というものはときとして人から人へと伝染する。地上の流行り病も大変だというのに、空の上でこうなってしまったらとんでもない。ああ、天はキミたちを見放したのだろうか。",
148
- "気流+1\n飛空艇コマを1スポット分移動させる。\n しめた!追い風となっている気流を見つける。一刻も早く目的地までたどり着かなければならないキミたちにとって、まさに願ってもないことだ。",
149
- "こんなときに\nシーンプレイヤーは、「航行イベント表:困難系」(p94)を振ること。振って出た航行イベント表の効果が適用される。\n いくらキミたちが困っていても、自然はそんなことかまいやしない。困難は見境なく訪れ、キミたちをさらに困らせる。",
150
- "遭難\nこの航行イベント表が発生した時点で、セッションは終了となる。お疲れ様。\n その後、キミたちが再び「塔」へと戻ってくることはなかった。嵐にのまれたのだろうか、空賊や、浮遊生物に襲われたのだろうか。それを知る者は、もうどこにもいない。"
151
- ]
152
- ),
153
- }.freeze
46
+ class << self
47
+ private
48
+
49
+ def translate_direction_infos(locale)
50
+ {
51
+ 0 => {name: "", position_diff: [0, 0]},
52
+ 1 => {name: I18n.translate('SkynautsBouken.directions.lower_left', locale: locale, raise: true), position_diff: [-1, +1]},
53
+ 2 => {name: I18n.translate('SkynautsBouken.directions.lower', locale: locale, raise: true), position_diff: [0, +1]},
54
+ 3 => {name: I18n.translate('SkynautsBouken.directions.lower_right', locale: locale, raise: true), position_diff: [+1, +1]},
55
+ 4 => {name: I18n.translate('SkynautsBouken.directions.left', locale: locale, raise: true), position_diff: [-1, 0]},
56
+ 5 => {name: "", position_diff: [0, 0]},
57
+ 6 => {name: I18n.translate('SkynautsBouken.directions.right', locale: locale, raise: true), position_diff: [+1, 0]},
58
+ 7 => {name: I18n.translate('SkynautsBouken.directions.upper_left', locale: locale, raise: true), position_diff: [-1, -1]},
59
+ 8 => {name: I18n.translate('SkynautsBouken.directions.upper', locale: locale, raise: true), position_diff: [0, -1]},
60
+ 9 => {name: I18n.translate('SkynautsBouken.directions.upper_right', locale: locale, raise: true), position_diff: [+1, -1]},
61
+ }.freeze
62
+ end
63
+
64
+ def translate_tables(locale)
65
+ {
66
+ 'FT' => DiceTable::Table.from_i18n('SkynautsBouken.FumbleTable', locale),
67
+ 'NV' => DiceTable::Table.from_i18n('SkynautsBouken.VoyageTable', locale),
68
+ "NEN" => DiceTable::Table.from_i18n('SkynautsBouken.NavigationEventNavigationTable', locale),
69
+ "NEE" => DiceTable::Table.from_i18n('SkynautsBouken.NavigationEventEncounterTable', locale),
70
+ "NEO" => DiceTable::Table.from_i18n('SkynautsBouken.NavigationEventOnBoardTable', locale),
71
+ "NEH" => DiceTable::Table.from_i18n('SkynautsBouken.NavigationEventHardTable', locale),
72
+ "NEL" => DiceTable::Table.from_i18n('SkynautsBouken.NavigationEventLongJourneyTable', locale),
73
+ }.freeze
74
+ end
75
+ end
76
+
77
+ TABLES = translate_tables(@locale)
154
78
 
155
79
  register_prefix('D', '\d?SN', 'AVO', TABLES.keys)
156
80
 
@@ -166,18 +90,7 @@ module BCDice
166
90
 
167
91
  private
168
92
 
169
- DIRECTION_INFOS = {
170
- 0 => {name: "", position_diff: [0, 0]},
171
- 1 => {name: "左下", position_diff: [-1, +1]},
172
- 2 => {name: "下", position_diff: [0, +1]},
173
- 3 => {name: "右下", position_diff: [+1, +1]},
174
- 4 => {name: "左", position_diff: [-1, 0]},
175
- 5 => {name: "", position_diff: [0, 0]},
176
- 6 => {name: "右", position_diff: [+1, 0]},
177
- 7 => {name: "左上", position_diff: [-1, -1]},
178
- 8 => {name: "上", position_diff: [0, -1]},
179
- 9 => {name: "右上", position_diff: [+1, -1]},
180
- }.freeze
93
+ DIRECTION_INFOS = translate_direction_infos(@locale)
181
94
 
182
95
  D_REGEXP = %r{^D([1-46-9]{0,8})(\[.+\]|S|F|SF|FS)?/(\d{1,2})(@([2468]))?$}.freeze
183
96
 
@@ -199,13 +112,13 @@ module BCDice
199
112
  dice_list = @randomizer.roll_barabara(dice_count, 6)
200
113
  dice_top_two = dice_list.sort[-2..-1]
201
114
  res = if dice_top_two == [6, 6]
202
- Result.critical("スペシャル(【生命点】1d6回復)")
115
+ Result.critical(translate('SkynautsBouken.special'))
203
116
  elsif dice_list.max <= fumble
204
- Result.fumble("ファンブル(ファンブル表FT)")
117
+ Result.fumble(translate('SkynautsBouken.fumble'))
205
118
  elsif dice_top_two.sum >= target
206
- Result.success("成功")
119
+ Result.success(translate('success'))
207
120
  else
208
- Result.failure("失敗")
121
+ Result.failure(translate('failure'))
209
122
  end
210
123
 
211
124
  if dice_count == 2
@@ -227,13 +140,15 @@ module BCDice
227
140
  ballistics = m[5].to_i # 《弾道学》
228
141
 
229
142
  points = get_fire_points(fire_count, fire_range)
230
- command = command.sub("SF/", "[大揺れ,火災]/").sub("FS/", "[火災,大揺れ]/").sub("F/", "[火災]/").sub("S/", "[大揺れ]/")
143
+ command = command.sub("SF/", "[#{translate('SkynautsBouken.big_shake')},#{translate('SkynautsBouken.fire')}]/")
144
+ .sub("FS/", "[#{translate('SkynautsBouken.fire')},#{translate('SkynautsBouken.big_shake')}]/")
145
+ .sub("F/", "[#{translate('SkynautsBouken.fire')}]/").sub("S/", "[#{translate('SkynautsBouken.big_shake')}]/")
231
146
  result = ["(#{command})", get_points_text(points, 0, 0)]
232
147
  if ballistics != 0
233
148
  dir = DIRECTION_INFOS[ballistics]
234
149
  diff_x, diff_y = dir[:position_diff]
235
150
  result[-1] += "\n"
236
- result << "《弾道学》#{dir[:name]}"
151
+ result << "《#{translate('SkynautsBouken.ballistics')}》#{dir[:name]}"
237
152
  result << get_points_text(points, diff_x, diff_y)
238
153
  end
239
154
 
@@ -247,7 +162,7 @@ module BCDice
247
162
 
248
163
  dir = DIRECTION_INFOS[dmg[1].to_i]
249
164
  diff_x, diff_y = dir[:position_diff]
250
- "《回避運動》#{dir[:name]} > " + dmg[2].gsub(/\(?\[(\d),(\d{1,2})\]\)?/) do
165
+ "《#{translate('SkynautsBouken.avoidance')}》#{dir[:name]} > " + dmg[2].gsub(/\(?\[(\d),(\d{1,2})\]\)?/) do
251
166
  y = Regexp.last_match(1).to_i + diff_y
252
167
  x = Regexp.last_match(2).to_i + diff_x
253
168
  get_xy_text(x, y)
@@ -285,7 +200,7 @@ module BCDice
285
200
  end
286
201
 
287
202
  def get_points_text(points, diff_x, diff_y)
288
- "[縦,横]=" + points.map do |list|
203
+ "[#{translate('SkynautsBouken.y')},#{translate('SkynautsBouken.x')}]=" + points.map do |list|
289
204
  list.map do |x, y|
290
205
  get_xy_text(x + diff_x, y + diff_y)
291
206
  end.join()
@@ -90,7 +90,7 @@ module BCDice
90
90
  result = "(#{diceCount}D10\<\=#{target}) > #{diceText} > Hits:#{successCount}*#{damage} > #{totalDamage}ダメージ"
91
91
  else
92
92
  result = "(#{diceCount}D10\<\=#{target}) > #{diceText}"
93
- if successCount > 0
93
+ if successCount > 0
94
94
  result += " > 【成功】"
95
95
  else
96
96
  result += " > 【失敗】"