bcdice 3.14.0 → 3.15.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 (60) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +59 -0
  3. data/i18n/Cthulhu/zh_hant.yml +1 -1
  4. data/i18n/CyberpunkRed/ko_kr.yml +389 -0
  5. data/i18n/DoubleCross/ja_jp.yml +53 -0
  6. data/i18n/DoubleCross/ko_kr.yml +52 -0
  7. data/i18n/FutariSousa/ja_jp.yml +138 -138
  8. data/i18n/KillDeathBusiness/ja_jp.yml +198 -0
  9. data/i18n/MagicaLogia/ko_kr.yml +2 -2
  10. data/i18n/MonotoneMuseum/ko_kr.yml +227 -0
  11. data/i18n/SkynautsBouken/ko_kr.yml +114 -0
  12. data/i18n/StratoShout/ko_kr.yml +102 -102
  13. data/i18n/zh_hant.yml +5 -0
  14. data/lib/bcdice/game_system/Aionia.rb +131 -0
  15. data/lib/bcdice/game_system/Arianrhod_Korean.rb +2 -0
  16. data/lib/bcdice/game_system/ArknightsFan.rb +245 -87
  17. data/lib/bcdice/game_system/BlackJacket_Korean.rb +244 -0
  18. data/lib/bcdice/game_system/CharonSanctions.rb +112 -0
  19. data/lib/bcdice/game_system/Cthulhu7th.rb +1 -1
  20. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional/full_auto.rb +293 -0
  21. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional/rollable.rb +43 -0
  22. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +470 -306
  23. data/lib/bcdice/game_system/CyberpunkRed.rb +1 -2
  24. data/lib/bcdice/game_system/CyberpunkRed_Korean.rb +66 -0
  25. data/lib/bcdice/game_system/DoubleCross.rb +18 -1
  26. data/lib/bcdice/game_system/DoubleCross_Korean.rb +5 -1
  27. data/lib/bcdice/game_system/FullFace.rb +25 -3
  28. data/lib/bcdice/game_system/FutariSousa.rb +17 -5
  29. data/lib/bcdice/game_system/Garactier.rb +479 -0
  30. data/lib/bcdice/game_system/GardenOrder.rb +390 -9
  31. data/lib/bcdice/game_system/GundogRevised.rb +8 -8
  32. data/lib/bcdice/game_system/KillDeathBusiness.rb +155 -3
  33. data/lib/bcdice/game_system/KimitoYell.rb +568 -0
  34. data/lib/bcdice/game_system/Magius.rb +125 -0
  35. data/lib/bcdice/game_system/Magius_3rdNewTokyoCity.rb +62 -0
  36. data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +4 -4
  37. data/lib/bcdice/game_system/NSSQ.rb +17 -9
  38. data/lib/bcdice/game_system/NervWhitePaper.rb +129 -0
  39. data/lib/bcdice/game_system/RogueLikeHalf.rb +198 -0
  40. data/lib/bcdice/game_system/RuneQuestRoleplayingInGlorantha.rb +16 -13
  41. data/lib/bcdice/game_system/ShinobiGami.rb +73 -43
  42. data/lib/bcdice/game_system/SkynautsBouken.rb +4 -4
  43. data/lib/bcdice/game_system/SkynautsBouken_Korean.rb +57 -0
  44. data/lib/bcdice/game_system/StratoShout_Korean.rb +1 -1
  45. data/lib/bcdice/game_system/SwordWorld.rb +4 -0
  46. data/lib/bcdice/game_system/SwordWorld2_5.rb +3 -2
  47. data/lib/bcdice/game_system/TensaiGunshiNiNaro.rb +51 -17
  48. data/lib/bcdice/game_system/TheIndieHack.rb +82 -0
  49. data/lib/bcdice/game_system/TorgEternity.rb +35 -6
  50. data/lib/bcdice/game_system/WoW.rb +161 -0
  51. data/lib/bcdice/game_system/YankeeMustDie.rb +192 -0
  52. data/lib/bcdice/game_system/YearZeroEngine.rb +225 -28
  53. data/lib/bcdice/game_system/YuMyoKishi.rb +141 -0
  54. data/lib/bcdice/game_system/sword_world/rating_lexer.rb +1 -0
  55. data/lib/bcdice/game_system/sword_world/rating_options.rb +4 -1
  56. data/lib/bcdice/game_system/sword_world/rating_parsed.rb +5 -0
  57. data/lib/bcdice/game_system/sword_world/rating_parser.rb +129 -115
  58. data/lib/bcdice/game_system.rb +15 -0
  59. data/lib/bcdice/version.rb +1 -1
  60. metadata +22 -6
@@ -68,8 +68,7 @@ module BCDice
68
68
 
69
69
  def eval_game_system_specific_command(command)
70
70
  debug("eval_game_system_specific_command begin string", command)
71
-
72
- cp_roll_result(command) || roll_tables(command, TABLES)
71
+ cp_roll_result(command) || roll_tables(command, self.class::TABLES)
73
72
  end
74
73
 
75
74
  private_constant :CP_RE
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bcdice/game_system/CyberpunkRed"
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class CyberpunkRed_Korean < CyberpunkRed
8
+ # ゲームシステムの識別子
9
+ ID = 'CyberpunkRed:Korean'
10
+
11
+ # ゲームシステム名
12
+ NAME = '사이버펑크 RED'
13
+
14
+ # ゲームシステム名の読みがな
15
+ SORT_KEY = '国際化:Korean:사이버펑크'
16
+
17
+ # ダイスボットの使い方
18
+ HELP_MESSAGE = <<~HELP
19
+ ・판정 CPx+y>z
20
+  (x=능력치와 기능치의 합(base)、y=수정치(mod)、z=난이도(DV) or 방어자의 값 x、y、z는 생략 가능)
21
+  예시)CP12, CP10+2>12, CP7-1, CP8+4, CP7>12, CP, CP>9
22
+
23
+ 각종 표
24
+ ・치명적인 손상표
25
+  FFD :신체에 치명적 손상
26
+  HFD :머리에 치명적 손상
27
+ ・조우 표
28
+  NCDT :나이트시티(낮)
29
+  NCMT :나이트 시티(심야)
30
+ ・스크림 시트(신문)
31
+  SCSR :스크림 시트(랜덤)
32
+  SCST :스크림 시트 카테고리
33
+  SCSA :헤드 라인A
34
+  SCSB :헤드 라인B
35
+  SCSC :헤드 라인C
36
+ ・가장 가까운 자판기
37
+  VMCR :가장 가까운 자판기표
38
+  VMCT :자판기 유형 결정표
39
+  VMCE :식품
40
+  VMCF :패션
41
+  VMCS :이상한 물건
42
+ ・보데가(상점) 손님
43
+  STORE :상점 손님과 점원
44
+  STOREA :점주 또는 계산원
45
+  STOREB :별난 손님 1
46
+  STOREC :별난 손님 2
47
+ ・야시장
48
+  NMCT :상품의 분야
49
+  NMCFO :음식과 약물
50
+  NMCME :개인용 전자기기
51
+  NMCWE :무기와 갑옷
52
+  NMCCY :사이버웨어
53
+  NMCFA :의류 및 패션웨어
54
+  NMCSU :생존 장비(servival gear)
55
+ HELP
56
+
57
+ def initialize(command)
58
+ super(command)
59
+ @locale = :ko_kr
60
+ end
61
+
62
+ register_prefix_from_super_class()
63
+ TABLES = translate_tables(:ko_kr)
64
+ end
65
+ end
66
+ end
@@ -27,6 +27,9 @@ module BCDice
27
27
    ポジティブとネガティブの両方を振って、表になっている側に○を付けて表示します。
28
28
    もちろん任意で選ぶ部分は変更して構いません。
29
29
 
30
+ ・ハプニングチャート(HC)
31
+ ・RWプロローグチャート ポジティブ (PCP)
32
+ ・RWプロローグチャート ネガティブ (PCN)
30
33
  ・D66ダイスあり
31
34
  INFO_MESSAGE_TEXT
32
35
 
@@ -213,6 +216,10 @@ module BCDice
213
216
  return dx.execute(@randomizer)
214
217
  end
215
218
 
219
+ if self.class::TABLES.key?(command)
220
+ return roll_tables(command, self.class::TABLES)
221
+ end
222
+
216
223
  if command == 'ET'
217
224
  return roll_emotion_table()
218
225
  end
@@ -356,13 +363,23 @@ module BCDice
356
363
  ]
357
364
  ).freeze
358
365
  end
359
- end
360
366
 
367
+ def translate_tables(locale)
368
+ {
369
+ "HC" => DiceTable::RangeTable.from_i18n("DoubleCross.HC", locale),
370
+ "PCP" => DiceTable::Table.from_i18n("DoubleCross.PCP", locale),
371
+ "PCN" => DiceTable::Table.from_i18n("DoubleCross.PCN", locale),
372
+ }
373
+ end
374
+ end
361
375
  # 感情表(ポジティブ)
362
376
  POSITIVE_EMOTION_TABLE = positive_emotion_table(:ja_jp).freeze
363
377
 
364
378
  # 感情表(ネガティブ)
365
379
  NEGATIVE_EMOTION_TABLE = negative_emotion_table(:ja_jp).freeze
380
+
381
+ TABLES = translate_tables(:ja_jp).freeze
382
+ register_prefix('\d+DX', TABLES.keys)
366
383
  end
367
384
  end
368
385
  end
@@ -24,6 +24,9 @@ module BCDice
24
24
   ・감정표(ET)
25
25
    포지티브와 네거티브 양쪽을 굴려, 겉으로 나타는 쪽에 O를 붙여 표시합니다.
26
26
    물론 임의로 정하는 부분을 변경해도 괜찮습니다.
27
+ ・해프닝차트(HC)
28
+ ・RW프롤로그차트 포지티브(PCP)
29
+ ・RW프롤로그차트 네거티브(PCN)
27
30
  ・D66다이스 있음
28
31
  INFO_MESSAGE_TEXT
29
32
 
@@ -46,9 +49,10 @@ module BCDice
46
49
 
47
50
  # 感情表(ポジティブ)
48
51
  POSITIVE_EMOTION_TABLE = positive_emotion_table(:ko_kr).freeze
49
-
50
52
  # 感情表(ネガティブ)
51
53
  NEGATIVE_EMOTION_TABLE = negative_emotion_table(:ko_kr).freeze
54
+ TABLES = translate_tables(:ko_kr).freeze
55
+ register_prefix('\d+DX', TABLES.keys)
52
56
  end
53
57
  end
54
58
  end
@@ -22,9 +22,9 @@ module BCDice
22
22
  FF<=2,1: 能力値2,難易度1で判定し、その結果(成功数,1の目の数,6の目の数,成功・失敗,バースト)を表示。
23
23
  6FF<=3,2&1:ヒート6,能力値3,難易度2,基本ダメージ1で戦闘判定し、その結果(成功数,1の目の数,6の目の数,ダメージ,バースト)を表示。
24
24
 
25
- INFO_MESSAGETEXT
25
+ ■ジャンク表 JKT
26
26
 
27
- register_prefix('([+\d]+)*FF')
27
+ INFO_MESSAGETEXT
28
28
 
29
29
  def initialize(command)
30
30
  super(command)
@@ -33,7 +33,8 @@ module BCDice
33
33
  end
34
34
 
35
35
  def eval_game_system_specific_command(command)
36
- resolute_action(command)
36
+ resolute_action(command) ||
37
+ roll_tables(command, TABLES)
37
38
  end
38
39
 
39
40
  private
@@ -116,6 +117,27 @@ module BCDice
116
117
  result.text = sequence.join(" > ")
117
118
  end
118
119
  end
120
+
121
+ TABLES = {
122
+ "JKT" => DiceTable::Table.new(
123
+ "ジャンク表",
124
+ "2D6",
125
+ [
126
+ "命欲しさに重要な情報を吐いた。セッションのボスに関する情報を得る。",
127
+ "ユニットの機密文書だ。この戦闘で獲得したユニットがあるなら、そのうち好きなユニット1つを経験点を消費せずに常備化できる。",
128
+ "違法アップロードされた個人情報のデータだ。このセッション中、エネミーと出会ったとき、詳細なデータが即座に公開される(GMはできるだけ拒否しないこと)。",
129
+ "鍵を持っていた。近くに施錠された扉や箱などがあるなら、そのうちの1つを開けることができる。",
130
+ "何も見つけられなかったが、敵を倒したことによって自信を得た。このセッション中のみ、1回だけ自身の判定で出た6の目を1つ消すことができる。",
131
+ "自爆装置だ。何も残らなかった。",
132
+ "使い捨ての武器を手に入れた。このセッション中のみ、1回だけ「近接攻撃5『本能』」の攻撃アクションを行える。",
133
+ "敵が改心した。倒されたキャラクターがまだ生きているなら、そのうちの一人が君たちに協力を申し込んでくる(このセッション限定の恩恵「人脈:協力者」を得る)。",
134
+ "金を手に入れた。キャラクター全員、アフターフェイズに配布される経験点が1増加する。",
135
+ "強力なユニットを隠し持っていた。好きな組織専用ユニットを1つ獲得する。",
136
+ "大金を手に入れた。キャラクター全員、アフターフェイズに配布される経験点が3増加する。",
137
+ ]
138
+ ),
139
+ }.freeze
140
+ register_prefix('([+\d]+)*FF', TABLES.keys)
119
141
  end
120
142
  end
121
143
  end
@@ -16,7 +16,9 @@ module BCDice
16
16
  HELP_MESSAGE = <<~MESSAGETEXT
17
17
  ・判定用コマンド
18
18
  探偵用:【DT】…10面ダイスを2つ振って判定します。『有利』なら【3DT】、『不利』なら【1DT】を使います。
19
+     【DT6】…6面ダイスを2つ振って判定します。『有利』なら【3DT6】、『不利』なら【1DT6】を使います。
19
20
  助手用:【AS】…6面ダイスを2つ振って判定します。『有利』なら【3AS】、『不利』なら【1AS】を使います。
21
+     【AS10】…10面ダイスを2つ振って判定します。『有利』なら【3AS10】、『不利』なら【1AS10】を使います。
20
22
  ・各種表
21
23
  【セッション時】
22
24
  異常な癖決定表      SHRD/新・異常な癖決定表   SHND
@@ -67,13 +69,13 @@ module BCDice
67
69
  @d66_sort_type = D66SortType::ASC
68
70
  end
69
71
 
70
- register_prefix('(\d+)?DT', '(\d+)?AS')
72
+ register_prefix('(\d+)?DT(?:6)?', '(\d+)?AS(?:10)?')
71
73
 
72
74
  def eval_game_system_specific_command(command)
73
- if (m = /^(\d+)?DT$/i.match(command))
75
+ if (m = /^(\d+)?DT(?:6)?$/i.match(command))
74
76
  count = m[1]&.to_i || 2
75
77
  return roll_dt(command, count)
76
- elsif (m = /^(\d+)?AS$/i.match(command))
78
+ elsif (m = /^(\d+)?AS(?:10)?$/i.match(command))
77
79
  count = m[1]&.to_i || 2
78
80
  return roll_as(command, count)
79
81
  end
@@ -91,7 +93,12 @@ module BCDice
91
93
 
92
94
  # 探偵用判定コマンド DT
93
95
  def roll_dt(command, count)
94
- dice_list = @randomizer.roll_barabara(count, 10)
96
+ dice_list =
97
+ if command =~ /^(\d*)DT6$/i
98
+ @randomizer.roll_barabara(count, 6)
99
+ else
100
+ @randomizer.roll_barabara(count, 10)
101
+ end
95
102
  max = dice_list.max
96
103
 
97
104
  result =
@@ -111,7 +118,12 @@ module BCDice
111
118
 
112
119
  # 助手用判定コマンド AS
113
120
  def roll_as(command, count)
114
- dice_list = @randomizer.roll_barabara(count, 6)
121
+ dice_list =
122
+ if command =~ /^(\d*)AS10$/i
123
+ @randomizer.roll_barabara(count, 10)
124
+ else
125
+ @randomizer.roll_barabara(count, 6)
126
+ end
115
127
  max = dice_list.max
116
128
 
117
129
  result =