bcdice 3.16.1 → 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 (149) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +111 -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/Dracurouge/ko_kr.yml +1284 -205
  15. data/i18n/Emoklore/ja_jp.yml +1 -0
  16. data/i18n/Emoklore/ko_kr.yml +1 -0
  17. data/i18n/FutariSousa/ja_jp.yml +70 -0
  18. data/i18n/FutariSousa/ko_kr.yml +157 -0
  19. data/i18n/HatsuneMiku/ja_jp.yml +579 -0
  20. data/i18n/HatsuneMiku/ko_kr.yml +579 -0
  21. data/i18n/Irisbane/ja_jp.yml +27 -0
  22. data/i18n/Irisbane/ko_kr.yml +27 -0
  23. data/i18n/JuinKansen/ja_jp.yml +168 -0
  24. data/i18n/JuinKansen/ko_kr.yml +168 -0
  25. data/i18n/KemonoNoMori/ja_jp.yml +229 -0
  26. data/i18n/KemonoNoMori/ko_kr.yml +229 -0
  27. data/i18n/KizunaBullet/ko_kr.yml +653 -0
  28. data/i18n/MagicPunk/ja_jp.yml +5 -0
  29. data/i18n/MagicPunk/ko_kr.yml +5 -0
  30. data/i18n/MorkBorg/ja_jp.yml +34 -0
  31. data/i18n/MorkBorg/ko_kr.yml +34 -0
  32. data/i18n/Nechronica/ko_kr.yml +43 -0
  33. data/i18n/NegikureNegimaki/ja_jp.yml +6 -0
  34. data/i18n/NegikureNegimaki/ko_kr.yml +6 -0
  35. data/i18n/Nuekagami/ja_jp.yml +219 -0
  36. data/i18n/Nuekagami/ko_kr.yml +219 -0
  37. data/i18n/Revulture/ja_jp.yml +8 -0
  38. data/i18n/Revulture/ko_kr.yml +8 -0
  39. data/i18n/SRS/ja_jp.yml +4 -0
  40. data/i18n/SRS/ko_kr.yml +4 -0
  41. data/i18n/ShinobiGami/ja_jp.yml +879 -0
  42. data/i18n/ShinobiGami/ko_kr.yml +876 -0
  43. data/i18n/StarryDolls/ja_jp.yml +456 -0
  44. data/i18n/StarryDolls/ko_kr.yml +456 -0
  45. data/i18n/StratoShout/ja_jp.yml +8 -8
  46. data/i18n/SwordWorld2_5/ja_jp.yml +48 -0
  47. data/i18n/Ventangle/ja_jp.yml +4 -0
  48. data/i18n/Ventangle/ko_kr.yml +4 -0
  49. data/i18n/YearZeroEngine/ja_jp.yml +12 -0
  50. data/i18n/YearZeroEngine/ko_kr.yml +12 -0
  51. data/i18n/ZombiLine/ja_jp.yml +27 -0
  52. data/i18n/ZombiLine/ko_kr.yml +27 -0
  53. data/i18n/ko_kr.yml +2 -0
  54. data/i18n/zh_hant.yml +2 -2
  55. data/lib/bcdice/dice_table/d66_left_range_table.rb +21 -0
  56. data/lib/bcdice/game_system/Aionia.rb +68 -19
  57. data/lib/bcdice/game_system/Airgetlamh.rb +64 -41
  58. data/lib/bcdice/game_system/Airgetlamh_Korean.rb +53 -0
  59. data/lib/bcdice/game_system/Alsetto.rb +63 -50
  60. data/lib/bcdice/game_system/Alsetto_Korean.rb +51 -0
  61. data/lib/bcdice/game_system/AnimaAnimus.rb +15 -32
  62. data/lib/bcdice/game_system/AnimaAnimus_Korean.rb +39 -0
  63. data/lib/bcdice/game_system/BlackJacket.rb +57 -113
  64. data/lib/bcdice/game_system/BlackJacket_Korean.rb +8 -206
  65. data/lib/bcdice/game_system/Bloodorium.rb +1 -1
  66. data/lib/bcdice/game_system/Bloodorium_Korean.rb +34 -0
  67. data/lib/bcdice/game_system/ChroniclesOfDarkness2e.rb +163 -0
  68. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +471 -300
  69. data/lib/bcdice/game_system/DeadlineHeroes_Korean.rb +273 -0
  70. data/lib/bcdice/game_system/Dracurouge_Korean.rb +25 -19
  71. data/lib/bcdice/game_system/DungeonsAndDragons5.rb +106 -73
  72. data/lib/bcdice/game_system/DungeonsAndDragons5_Korean.rb +53 -0
  73. data/lib/bcdice/game_system/DungeonsAndDragons_Korean.rb +61 -0
  74. data/lib/bcdice/game_system/Emoklore.rb +34 -9
  75. data/lib/bcdice/game_system/Emoklore_Korean.rb +10 -2
  76. data/lib/bcdice/game_system/FateCoreSystem.rb +10 -6
  77. data/lib/bcdice/game_system/FullMetalPanic_Korean.rb +28 -0
  78. data/lib/bcdice/game_system/FutariSousa.rb +37 -12
  79. data/lib/bcdice/game_system/FutariSousa_Korean.rb +25 -8
  80. data/lib/bcdice/game_system/GaiaCare.rb +40 -0
  81. data/lib/bcdice/game_system/GardenOrder.rb +2 -2
  82. data/lib/bcdice/game_system/GardenOrderReEdit.rb +849 -0
  83. data/lib/bcdice/game_system/GardenOrder_Korean.rb +839 -0
  84. data/lib/bcdice/game_system/HatsuneMiku.rb +51 -605
  85. data/lib/bcdice/game_system/HatsuneMiku_Korean.rb +56 -0
  86. data/lib/bcdice/game_system/HunterTheReckoning5th.rb +15 -11
  87. data/lib/bcdice/game_system/Irisbane.rb +17 -30
  88. data/lib/bcdice/game_system/Irisbane_Korean.rb +52 -0
  89. data/lib/bcdice/game_system/JuinKansen.rb +41 -208
  90. data/lib/bcdice/game_system/JuinKansen_Korean.rb +8 -213
  91. data/lib/bcdice/game_system/KemonoNoMori.rb +67 -276
  92. data/lib/bcdice/game_system/KemonoNoMori_Korean.rb +62 -0
  93. data/lib/bcdice/game_system/KinAriel.rb +117 -0
  94. data/lib/bcdice/game_system/KizunaBullet_Korean.rb +109 -0
  95. data/lib/bcdice/game_system/KutuluRevised.rb +94 -0
  96. data/lib/bcdice/game_system/LiverLabyrinth.rb +321 -0
  97. data/lib/bcdice/game_system/Lost.rb +89 -0
  98. data/lib/bcdice/game_system/MagicPunk.rb +85 -0
  99. data/lib/bcdice/game_system/MagicPunk_Korean.rb +39 -0
  100. data/lib/bcdice/game_system/MarvelHeroicRoleplaying.rb +144 -0
  101. data/lib/bcdice/game_system/MetallicGuardian_Korean.rb +28 -0
  102. data/lib/bcdice/game_system/MorkBorg.rb +170 -0
  103. data/lib/bcdice/game_system/MorkBorg_Korean.rb +49 -0
  104. data/lib/bcdice/game_system/NanimonaiMura.rb +112 -0
  105. data/lib/bcdice/game_system/Nechronica_Korean.rb +6 -6
  106. data/lib/bcdice/game_system/NegikureNegimaki.rb +140 -0
  107. data/lib/bcdice/game_system/NegikureNegimaki_Korean.rb +48 -0
  108. data/lib/bcdice/game_system/NeonUnderRealm.rb +122 -0
  109. data/lib/bcdice/game_system/NinjaSlayer2.rb +170 -49
  110. data/lib/bcdice/game_system/Nuekagami.rb +19 -261
  111. data/lib/bcdice/game_system/Nuekagami_Korean.rb +43 -0
  112. data/lib/bcdice/game_system/ParanoiaPerfect.rb +74 -0
  113. data/lib/bcdice/game_system/PastFutureParadox.rb +2245 -55
  114. data/lib/bcdice/game_system/PreciousDays.rb +170 -0
  115. data/lib/bcdice/game_system/Revulture.rb +8 -5
  116. data/lib/bcdice/game_system/Revulture_Korean.rb +7 -81
  117. data/lib/bcdice/game_system/Ryutama.rb +46 -46
  118. data/lib/bcdice/game_system/SRS.rb +4 -4
  119. data/lib/bcdice/game_system/SRS_Korean.rb +67 -0
  120. data/lib/bcdice/game_system/ShinobiGami.rb +154 -1047
  121. data/lib/bcdice/game_system/ShinobiGami_Korean.rb +102 -0
  122. data/lib/bcdice/game_system/StarryDolls.rb +70 -508
  123. data/lib/bcdice/game_system/StarryDolls_Korean.rb +80 -0
  124. data/lib/bcdice/game_system/StratoShout.rb +1 -1
  125. data/lib/bcdice/game_system/SwordWorld.rb +28 -2
  126. data/lib/bcdice/game_system/SwordWorld2_0.rb +1 -1
  127. data/lib/bcdice/game_system/SwordWorld2_5.rb +67 -3
  128. data/lib/bcdice/game_system/TacticalExorcist.rb +222 -0
  129. data/lib/bcdice/game_system/TenkaRyouran_Korean.rb +30 -0
  130. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +38 -33
  131. data/lib/bcdice/game_system/Ventangle.rb +8 -7
  132. data/lib/bcdice/game_system/Ventangle_Korean.rb +6 -95
  133. data/lib/bcdice/game_system/Warhammer4.rb +202 -6
  134. data/lib/bcdice/game_system/WerewolfTheApocalypse5th.rb +20 -15
  135. data/lib/bcdice/game_system/WorldEndScrapyard.rb +333 -0
  136. data/lib/bcdice/game_system/WorldsEndFrontline_Korean.rb +26 -0
  137. data/lib/bcdice/game_system/YearZeroEngine.rb +7 -7
  138. data/lib/bcdice/game_system/YearZeroEngine_Korean.rb +46 -0
  139. data/lib/bcdice/game_system/ZombiLine.rb +29 -36
  140. data/lib/bcdice/game_system/ZombiLine_Korean.rb +37 -0
  141. data/lib/bcdice/game_system/cthulhu7th_Korean/full_auto.rb +294 -0
  142. data/lib/bcdice/game_system/cthulhu7th_Korean/rollable.rb +43 -0
  143. data/lib/bcdice/game_system/sword_world/rating_options.rb +9 -0
  144. data/lib/bcdice/game_system/sword_world/rating_parsed.rb +19 -0
  145. data/lib/bcdice/game_system/sword_world/rating_parser.rb +229 -149
  146. data/lib/bcdice/game_system/sword_world/transcendent_test.rb +1 -0
  147. data/lib/bcdice/game_system.rb +42 -0
  148. data/lib/bcdice/version.rb +1 -1
  149. metadata +87 -2
@@ -0,0 +1,163 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class ChroniclesOfDarkness2e < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'ChroniclesOfDarkness2e'
8
+
9
+ # ゲームシステム名
10
+ NAME = 'Chronicles of Darkness 2nd Edtion'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'くろにくるすおふたあくねす2'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~MESSAGETEXT
17
+ ・判定コマンド(CDx@cWdAs)
18
+ x:ダイスプール(0以下でChance Roll)
19
+ c:振り足し値(省略可、省略時は10)。8-10の値を取る。Chance Rollには適用されない。
20
+ d:武器ダメージ修正(省略可)。判定による成功数が1以上のときにダメージとして修正値を加算。
21
+ s:自動成功数(省略可)。成功数に加算される。
22
+
23
+ 例1:6ダイスプール、10 again
24
+ CD6
25
+ CD6@10
26
+
27
+ 例2:9ダイスプール、9の振り足し(9 again)、自動成功1
28
+ CD9@9A1
29
+
30
+ 例3:0ダイスプール(Chance Roll)、8の振り足し(8 again, 適用されない)、自動成功1、武器修正+2
31
+ CD0@8W2A1
32
+
33
+ 例4:-1ダイスプール(Chance Roll)
34
+ CD(4-5)
35
+
36
+ MESSAGETEXT
37
+
38
+ DICE_POOL_INDEX = 2
39
+ AGAIN_NUMBER_INDEX = 4
40
+ WEAPON_MODIFIER_INDEX = 6
41
+ AUTO_SUCCESS_INDEX = 8
42
+
43
+ EXCEPTIONAL_SUCCESS_THRESHOLD = 5 # Exceptional Successの閾値
44
+
45
+ register_prefix('(CD\d*)')
46
+
47
+ def eval_game_system_specific_command(command)
48
+ m = /\A(CD)(-?\d+)(@([8-9]|10))?(W(\d+))?(A(\d+))?$/.match(command)
49
+ unless m
50
+ return ''
51
+ end
52
+
53
+ # 引数分解
54
+ dice_pool, again_number, weapon_modifier, auto_success = get_arguments(m)
55
+
56
+ # ダイスロール
57
+ success_number, dice_text, dramatic_failure = make_dice_roll(dice_pool, again_number)
58
+
59
+ # 結果判定
60
+ get_roll_result(dice_pool, dice_text, success_number, weapon_modifier, auto_success, dramatic_failure)
61
+ end
62
+
63
+ private
64
+
65
+ def get_roll_result(dice_pool, dice_text, success_number, weapon_modifier, auto_success, dramatic_failure)
66
+ if dice_pool <= 0
67
+ result_text = "Chance Roll(1D10) > "
68
+ else
69
+ result_text = "(#{dice_pool}D10) > "
70
+ end
71
+ result_text = "#{result_text}#{dice_text}success=#{success_number} "
72
+
73
+ total_success = success_number + auto_success
74
+
75
+ # CofD2e rulebook p21:
76
+ # "A result of 1 on a chance roll causes a dramatic failure, a catastrophe worse than a normal failure."
77
+ # なので、チャンスダイスで"1"が出ていたら自動成功の有無に関わらず Dramatic Failure 発生。
78
+ if dramatic_failure
79
+ Result.fumble("#{result_text}Dramatic Failure!")
80
+ elsif total_success > 0
81
+ if auto_success > 0
82
+ # 成功数の合算が発生するときだけトータル成功数を表示
83
+ result_text = "#{result_text}auto_success=#{auto_success} total_success=#{total_success} "
84
+ end
85
+ if weapon_modifier != 0
86
+ # 成功数が1でもあれば、武器修正とダメージを表示
87
+ result_text = "#{result_text}weapon_modifier=#{weapon_modifier} damage=#{total_success + weapon_modifier} "
88
+ end
89
+ # M:tAw2e rulebook p213:
90
+ # "Several powers and Merits allow exceptional success with three or more successes instead of five."
91
+ # とあり、判定の基本は同じであるM:tAw2eで長所等で Exceptional Success に修正が入るため、CofDの自動成功でも同様と判断した。
92
+ # また、p214に下記のような文言があり、
93
+ # "Note that you count the total number of successes rolled when working out if you scored an exceptional success
94
+ # — don’t subtract the other party’s successes from yours."
95
+ # 合計数で Exceptional Success を判定すること、相手の成功数を差し引いた値で判定するわけではないことが記されている。
96
+ # 将来、Contested Action の実装として、相手の成功数と自分の成功数の差分で判定を行うなら留意されたし。
97
+ if total_success >= EXCEPTIONAL_SUCCESS_THRESHOLD
98
+ # 5成功以上は Exceptional Success
99
+ Result.critical("#{result_text}Exceptional Success!")
100
+ else
101
+ Result.success("#{result_text}Success!")
102
+ end
103
+ else
104
+ Result.failure("#{result_text}Failure!")
105
+ end
106
+ end
107
+
108
+ def get_arguments(m)
109
+ dice_pool = m[DICE_POOL_INDEX].to_i # 0以下のダイスプールはチャンスダイス対応
110
+ again_number = m[AGAIN_NUMBER_INDEX].nil? ? 10 : m[AGAIN_NUMBER_INDEX].to_i # 未指定は10
111
+ weapon_modifier = m[WEAPON_MODIFIER_INDEX].nil? ? 0 : m[WEAPON_MODIFIER_INDEX].to_i
112
+ auto_success = m[AUTO_SUCCESS_INDEX].nil? ? 0 : m[AUTO_SUCCESS_INDEX].to_i
113
+
114
+ return dice_pool, again_number, weapon_modifier, auto_success
115
+ end
116
+
117
+ def make_dice_roll(dice_pool, again_number)
118
+ if dice_pool <= 0
119
+ # ダイスプールが0以下になるなら、チャンスロール判定
120
+ roll_dice_pool(1, again_number, true)
121
+ else
122
+ roll_dice_pool(dice_pool, again_number, false)
123
+ end
124
+ end
125
+
126
+ # make_dice_rollの内部処理
127
+ def roll_dice_pool(dice_pool, again_number, chance_roll)
128
+ success_number = 0
129
+ again_dice = 0
130
+ dice_text = ""
131
+
132
+ loop do
133
+ dice_list = @randomizer.roll_barabara(dice_pool, 10)
134
+ dice_text = "#{dice_text}[#{dice_list.join(',')}] "
135
+
136
+ if chance_roll # チャンスロール
137
+ if dice_list.count(1) > 0
138
+ return 0, dice_text, true # Dramatic Failure発生
139
+ elsif dice_list.count(10) > 0 # チャンスダイスは10のみ成功
140
+ success_number = 1
141
+ else
142
+ success_number = 0
143
+ end
144
+ else
145
+ success_number += dice_list.count { |x| x >= 8 }
146
+ again_dice = dice_list.count { |x| x >= again_number }
147
+ end
148
+
149
+ # CofD2e rulebook p69:
150
+ # "The chance die only counts as a success if you roll a 10, which you do not reroll."
151
+ # のため、chance dieではagain処理を行わない
152
+ if again_dice > 0
153
+ dice_pool = again_dice # 振り足しが存在するなら再判定
154
+ else
155
+ break # 振り足しが存在しないなら抜ける
156
+ end
157
+ end
158
+
159
+ return success_number, dice_text, false
160
+ end
161
+ end
162
+ end
163
+ end