bcdice 3.0.0.pre.alpha.1 → 3.0.0.pre.alpha.2

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 (255) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +1 -1
  3. data/.rubocop.yml +12 -0
  4. data/.rubocop_todo.yml +1 -0
  5. data/CHANGELOG.md +34 -0
  6. data/Gemfile +6 -3
  7. data/Rakefile +52 -18
  8. data/bcdice.gemspec +2 -0
  9. data/i18n/Amadeus/ja_jp.yml +386 -0
  10. data/i18n/Amadeus/ko_kr.yml +148 -0
  11. data/i18n/Cthulhu/ja_jp.yml +11 -0
  12. data/i18n/Cthulhu/ko_kr.yml +11 -0
  13. data/i18n/Cthulhu/zh_hant.yml +11 -0
  14. data/i18n/DetatokoSaga/ja_jp.yml +74 -0
  15. data/i18n/DetatokoSaga/ko_kr.yml +74 -0
  16. data/i18n/DoubleCross/ja_jp.yml +53 -0
  17. data/i18n/DoubleCross/ko_kr.yml +53 -0
  18. data/i18n/Dracurouge/ja_jp.yml +1374 -0
  19. data/i18n/Dracurouge/ko_kr.yml +295 -0
  20. data/i18n/Fiasco/ja_jp.yml +10 -0
  21. data/i18n/Fiasco/ko_kr.yml +10 -0
  22. data/i18n/FutariSousa/ja_jp.yml +720 -0
  23. data/i18n/FutariSousa/ko_kr.yml +746 -0
  24. data/i18n/Insane/ja_jp.yml +454 -0
  25. data/i18n/Insane/ko_kr.yml +502 -0
  26. data/i18n/Kamigakari/ja_jp.yml +276 -0
  27. data/i18n/Kamigakari/ko_kr.yml +204 -0
  28. data/i18n/KillDeathBusiness/ja_jp.yml +1092 -0
  29. data/i18n/KillDeathBusiness/ko_kr.yml +1062 -0
  30. data/i18n/LogHorizon/ja_jp.yml +3082 -0
  31. data/i18n/LogHorizon/ko_kr.yml +923 -0
  32. data/i18n/MagicaLogia/ja_jp.yml +564 -0
  33. data/i18n/MonotoneMuseum/ja_jp.yml +525 -0
  34. data/i18n/MonotoneMuseum/ko_kr.yml +89 -0
  35. data/i18n/Nechronica/ja_jp.yml +57 -0
  36. data/i18n/Nechronica/ko_kr.yml +14 -0
  37. data/i18n/StratoShout/ja_jp.yml +160 -0
  38. data/i18n/StratoShout/ko_kr.yml +160 -0
  39. data/i18n/ja_jp.yml +5 -0
  40. data/i18n/ko_kr.yml +7 -0
  41. data/i18n/zh_hant.yml +3 -0
  42. data/lib/bcdice/arithmetic/node.rb +154 -0
  43. data/lib/bcdice/base.rb +87 -101
  44. data/lib/bcdice/common_command.rb +2 -0
  45. data/lib/bcdice/common_command/add_dice.rb +5 -41
  46. data/lib/bcdice/common_command/add_dice/node.rb +92 -16
  47. data/lib/bcdice/common_command/add_dice/parser.rb +374 -274
  48. data/lib/bcdice/common_command/add_dice/parser.y +153 -0
  49. data/lib/bcdice/common_command/add_dice/randomizer.rb +25 -33
  50. data/lib/bcdice/common_command/barabara_dice.rb +6 -47
  51. data/lib/bcdice/common_command/barabara_dice/node.rb +84 -0
  52. data/lib/bcdice/common_command/barabara_dice/parser.rb +336 -0
  53. data/lib/bcdice/common_command/barabara_dice/parser.y +107 -0
  54. data/lib/bcdice/common_command/calc.rb +7 -30
  55. data/lib/bcdice/common_command/calc/node.rb +30 -0
  56. data/lib/bcdice/common_command/calc/parser.rb +271 -0
  57. data/lib/bcdice/common_command/calc/parser.y +79 -0
  58. data/lib/bcdice/common_command/choice.rb +137 -19
  59. data/lib/bcdice/common_command/d66_dice.rb +48 -34
  60. data/lib/bcdice/common_command/lexer.rb +46 -0
  61. data/lib/bcdice/common_command/repeat.rb +102 -0
  62. data/lib/bcdice/common_command/reroll_dice.rb +8 -158
  63. data/lib/bcdice/common_command/reroll_dice/node.rb +198 -0
  64. data/lib/bcdice/common_command/reroll_dice/parser.rb +421 -0
  65. data/lib/bcdice/common_command/reroll_dice/parser.y +158 -0
  66. data/lib/bcdice/common_command/upper_dice.rb +10 -129
  67. data/lib/bcdice/common_command/upper_dice/node.rb +181 -0
  68. data/lib/bcdice/common_command/upper_dice/parser.rb +412 -0
  69. data/lib/bcdice/common_command/upper_dice/parser.y +143 -0
  70. data/lib/bcdice/common_command/version.rb +9 -17
  71. data/lib/bcdice/deprecated/checker.rb +78 -0
  72. data/lib/bcdice/dice_table/d66_grid_table.rb +8 -0
  73. data/lib/bcdice/dice_table/d66_table.rb +10 -0
  74. data/lib/bcdice/dice_table/sai_fic_skill_table.rb +75 -17
  75. data/lib/bcdice/dice_table/sai_fic_skill_table/category.rb +25 -0
  76. data/lib/bcdice/dice_table/sai_fic_skill_table/skill.rb +23 -0
  77. data/lib/bcdice/dice_table/table.rb +8 -0
  78. data/lib/bcdice/game_system.rb +7 -1
  79. data/lib/bcdice/game_system/AFF2e.rb +1 -1
  80. data/lib/bcdice/game_system/AceKillerGene.rb +2 -2
  81. data/lib/bcdice/game_system/Airgetlamh.rb +3 -3
  82. data/lib/bcdice/game_system/Alsetto.rb +1 -1
  83. data/lib/bcdice/game_system/Alshard.rb +1 -1
  84. data/lib/bcdice/game_system/AlterRaise.rb +2 -2
  85. data/lib/bcdice/game_system/Amadeus.rb +46 -507
  86. data/lib/bcdice/game_system/Amadeus_Korean.rb +12 -456
  87. data/lib/bcdice/game_system/AnimaAnimus.rb +1 -1
  88. data/lib/bcdice/game_system/Arianrhod.rb +0 -1
  89. data/lib/bcdice/game_system/ArsMagica.rb +1 -1
  90. data/lib/bcdice/game_system/Avandner.rb +1 -1
  91. data/lib/bcdice/game_system/BBN.rb +1 -1
  92. data/lib/bcdice/game_system/BadLife.rb +1 -1
  93. data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
  94. data/lib/bcdice/game_system/BeastBindTrinity.rb +1 -2
  95. data/lib/bcdice/game_system/BeginningIdol.rb +2 -3
  96. data/lib/bcdice/game_system/BeginningIdol_Korean.rb +2 -3
  97. data/lib/bcdice/game_system/BladeOfArcana.rb +2 -2
  98. data/lib/bcdice/game_system/BlindMythos.rb +1 -1
  99. data/lib/bcdice/game_system/BloodCrusade.rb +0 -1
  100. data/lib/bcdice/game_system/BloodMoon.rb +0 -1
  101. data/lib/bcdice/game_system/CardRanker.rb +1 -2
  102. data/lib/bcdice/game_system/ChaosFlare.rb +1 -1
  103. data/lib/bcdice/game_system/Chill.rb +1 -1
  104. data/lib/bcdice/game_system/CodeLayerd.rb +1 -1
  105. data/lib/bcdice/game_system/ColossalHunter.rb +1 -2
  106. data/lib/bcdice/game_system/Comes.rb +50 -0
  107. data/lib/bcdice/game_system/CrashWorld.rb +1 -1
  108. data/lib/bcdice/game_system/Cthulhu.rb +94 -97
  109. data/lib/bcdice/game_system/Cthulhu7th.rb +108 -67
  110. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
  111. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
  112. data/lib/bcdice/game_system/CthulhuTech.rb +8 -14
  113. data/lib/bcdice/game_system/Cthulhu_ChineseTraditional.rb +7 -190
  114. data/lib/bcdice/game_system/Cthulhu_Korean.rb +5 -186
  115. data/lib/bcdice/game_system/DarkBlaze.rb +9 -5
  116. data/lib/bcdice/game_system/DarkDaysDrive.rb +17 -15
  117. data/lib/bcdice/game_system/DarkSouls.rb +1 -1
  118. data/lib/bcdice/game_system/DeadlineHeroes.rb +2 -2
  119. data/lib/bcdice/game_system/DemonParasite.rb +1 -2
  120. data/lib/bcdice/game_system/DetatokoSaga.rb +48 -149
  121. data/lib/bcdice/game_system/DetatokoSaga_Korean.rb +6 -274
  122. data/lib/bcdice/game_system/DiceOfTheDead.rb +9 -6
  123. data/lib/bcdice/game_system/DoubleCross.rb +102 -81
  124. data/lib/bcdice/game_system/DoubleCross_Korean.rb +13 -330
  125. data/lib/bcdice/game_system/Dracurouge.rb +376 -1678
  126. data/lib/bcdice/game_system/Dracurouge_Korean.rb +16 -271
  127. data/lib/bcdice/game_system/EarthDawn.rb +1 -1
  128. data/lib/bcdice/game_system/EarthDawn3.rb +1 -1
  129. data/lib/bcdice/game_system/EarthDawn4.rb +1 -1
  130. data/lib/bcdice/game_system/Elysion.rb +3 -4
  131. data/lib/bcdice/game_system/EmbryoMachine.rb +1 -1
  132. data/lib/bcdice/game_system/Emoklore.rb +131 -0
  133. data/lib/bcdice/game_system/EndBreaker.rb +1 -2
  134. data/lib/bcdice/game_system/EtrianOdysseySRS.rb +1 -1
  135. data/lib/bcdice/game_system/Fiasco.rb +87 -70
  136. data/lib/bcdice/game_system/Fiasco_Korean.rb +7 -95
  137. data/lib/bcdice/game_system/FilledWith.rb +462 -566
  138. data/lib/bcdice/game_system/FullMetalPanic.rb +1 -1
  139. data/lib/bcdice/game_system/FutariSousa.rb +103 -938
  140. data/lib/bcdice/game_system/FutariSousa_Korean.rb +7 -948
  141. data/lib/bcdice/game_system/{Gurps.rb → GURPS.rb} +184 -217
  142. data/lib/bcdice/game_system/Garako.rb +131 -39
  143. data/lib/bcdice/game_system/GardenOrder.rb +2 -2
  144. data/lib/bcdice/game_system/GehennaAn.rb +1 -1
  145. data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +1 -1
  146. data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
  147. data/lib/bcdice/game_system/GoldenSkyStories.rb +1 -1
  148. data/lib/bcdice/game_system/Gorilla.rb +1 -1
  149. data/lib/bcdice/game_system/GranCrest.rb +2 -3
  150. data/lib/bcdice/game_system/GundogRevised.rb +1 -1
  151. data/lib/bcdice/game_system/GundogZero.rb +1 -1
  152. data/lib/bcdice/game_system/GurpsFW.rb +2 -3
  153. data/lib/bcdice/game_system/HarnMaster.rb +2 -2
  154. data/lib/bcdice/game_system/HatsuneMiku.rb +1 -2
  155. data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
  156. data/lib/bcdice/game_system/HuntersMoon.rb +1 -2
  157. data/lib/bcdice/game_system/Illusio.rb +2 -2
  158. data/lib/bcdice/game_system/Insane.rb +90 -717
  159. data/lib/bcdice/game_system/Insane_Korean.rb +7 -719
  160. data/lib/bcdice/game_system/Kamigakari.rb +47 -242
  161. data/lib/bcdice/game_system/Kamigakari_Korean.rb +6 -394
  162. data/lib/bcdice/game_system/KanColle.rb +3 -3
  163. data/lib/bcdice/game_system/KemonoNoMori.rb +1 -1
  164. data/lib/bcdice/game_system/KillDeathBusiness.rb +162 -1144
  165. data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +6 -1459
  166. data/lib/bcdice/game_system/KurayamiCrying.rb +1 -1
  167. data/lib/bcdice/game_system/LiveraDoll.rb +2 -2
  168. data/lib/bcdice/game_system/LogHorizon.rb +350 -3379
  169. data/lib/bcdice/game_system/LogHorizon_Korean.rb +55 -1357
  170. data/lib/bcdice/game_system/LostRecord.rb +0 -1
  171. data/lib/bcdice/game_system/LostRoyal.rb +1 -2
  172. data/lib/bcdice/game_system/MagicaLogia.rb +158 -1044
  173. data/lib/bcdice/game_system/MeikyuDays.rb +1 -2
  174. data/lib/bcdice/game_system/MeikyuKingdom.rb +4 -4
  175. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +4 -5
  176. data/lib/bcdice/game_system/MetalHead.rb +1 -1
  177. data/lib/bcdice/game_system/MetalHeadExtream.rb +2 -2
  178. data/lib/bcdice/game_system/MetallicGuardian.rb +1 -1
  179. data/lib/bcdice/game_system/MonotoneMuseum.rb +38 -239
  180. data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +10 -270
  181. data/lib/bcdice/game_system/NSSQ.rb +159 -0
  182. data/lib/bcdice/game_system/Nechronica.rb +34 -73
  183. data/lib/bcdice/game_system/Nechronica_Korean.rb +11 -128
  184. data/lib/bcdice/game_system/NeverCloud.rb +1 -1
  185. data/lib/bcdice/game_system/NightWizard.rb +1 -1
  186. data/lib/bcdice/game_system/NightWizard3rd.rb +1 -1
  187. data/lib/bcdice/game_system/NinjaSlayer.rb +12 -11
  188. data/lib/bcdice/game_system/NjslyrBattle.rb +1 -1
  189. data/lib/bcdice/game_system/OneWayHeroics.rb +1 -2
  190. data/lib/bcdice/game_system/OracleEngine.rb +1 -1
  191. data/lib/bcdice/game_system/OrgaRain.rb +2 -2
  192. data/lib/bcdice/game_system/Paradiso.rb +1 -1
  193. data/lib/bcdice/game_system/Paranoia.rb +1 -1
  194. data/lib/bcdice/game_system/ParanoiaRebooted.rb +1 -1
  195. data/lib/bcdice/game_system/ParasiteBlood.rb +1 -1
  196. data/lib/bcdice/game_system/Peekaboo.rb +22 -122
  197. data/lib/bcdice/game_system/Postman.rb +2 -2
  198. data/lib/bcdice/game_system/PulpCthulhu.rb +3 -3
  199. data/lib/bcdice/game_system/Raisondetre.rb +2 -2
  200. data/lib/bcdice/game_system/RecordOfLodossWar.rb +1 -1
  201. data/lib/bcdice/game_system/RecordOfSteam.rb +1 -1
  202. data/lib/bcdice/game_system/RokumonSekai2.rb +1 -1
  203. data/lib/bcdice/game_system/RuinBreakers.rb +296 -0
  204. data/lib/bcdice/game_system/Ryutama.rb +1 -1
  205. data/lib/bcdice/game_system/SRS.rb +1 -2
  206. data/lib/bcdice/game_system/SamsaraBallad.rb +1 -1
  207. data/lib/bcdice/game_system/Satasupe.rb +1 -2
  208. data/lib/bcdice/game_system/ScreamHighSchool.rb +2 -2
  209. data/lib/bcdice/game_system/SevenFortressMobius.rb +1 -1
  210. data/lib/bcdice/game_system/ShadowRun5.rb +2 -2
  211. data/lib/bcdice/game_system/SharedFantasia.rb +1 -1
  212. data/lib/bcdice/game_system/ShinMegamiTenseiKakuseihen.rb +1 -1
  213. data/lib/bcdice/game_system/ShinkuuGakuen.rb +2 -2
  214. data/lib/bcdice/game_system/ShinobiGami.rb +1 -2
  215. data/lib/bcdice/game_system/ShoujoTenrankai.rb +2 -2
  216. data/lib/bcdice/game_system/Skynauts.rb +1 -1
  217. data/lib/bcdice/game_system/SteamPunkers.rb +1 -1
  218. data/lib/bcdice/game_system/StellarKnights.rb +1 -2
  219. data/lib/bcdice/game_system/SterileLife.rb +1 -1
  220. data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -2
  221. data/lib/bcdice/game_system/StratoShout.rb +44 -247
  222. data/lib/bcdice/game_system/StratoShout_Korean.rb +6 -282
  223. data/lib/bcdice/game_system/Strave.rb +2 -2
  224. data/lib/bcdice/game_system/SwordWorld.rb +8 -9
  225. data/lib/bcdice/game_system/SwordWorld2_0.rb +2 -3
  226. data/lib/bcdice/game_system/SwordWorld2_5.rb +2 -3
  227. data/lib/bcdice/game_system/TherapieSein.rb +1 -1
  228. data/lib/bcdice/game_system/TokumeiTenkousei.rb +1 -1
  229. data/lib/bcdice/game_system/TokyoGhostResearch.rb +2 -2
  230. data/lib/bcdice/game_system/Torg.rb +2 -2
  231. data/lib/bcdice/game_system/Torg1_5.rb +1 -1
  232. data/lib/bcdice/game_system/TorgEternity.rb +1 -1
  233. data/lib/bcdice/game_system/TrinitySeven.rb +1 -1
  234. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +1 -1
  235. data/lib/bcdice/game_system/TwilightGunsmoke.rb +1 -2
  236. data/lib/bcdice/game_system/UnsungDuet.rb +139 -0
  237. data/lib/bcdice/game_system/Utakaze.rb +1 -1
  238. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +1 -1
  239. data/lib/bcdice/game_system/Villaciel.rb +1 -2
  240. data/lib/bcdice/game_system/Warhammer.rb +1 -1
  241. data/lib/bcdice/game_system/Warhammer4.rb +329 -0
  242. data/lib/bcdice/game_system/WitchQuest.rb +1 -1
  243. data/lib/bcdice/game_system/WorldOfDarkness.rb +1 -1
  244. data/lib/bcdice/game_system/YankeeYogSothoth.rb +15 -15
  245. data/lib/bcdice/game_system/YearZeroEngine.rb +1 -1
  246. data/lib/bcdice/game_system/ZettaiReido.rb +1 -1
  247. data/lib/bcdice/game_system/filled_with/cook_tables.rb +119 -0
  248. data/lib/bcdice/game_system/filled_with/lot_tables.rb +155 -0
  249. data/lib/bcdice/loader.rb +6 -8
  250. data/lib/bcdice/preprocessor.rb +15 -40
  251. data/lib/bcdice/repl.rb +1 -1
  252. data/lib/bcdice/result.rb +83 -0
  253. data/lib/bcdice/translate.rb +11 -0
  254. data/lib/bcdice/version.rb +1 -1
  255. metadata +80 -4
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "bcdice/game_system/DetatokoSaga"
4
+
3
5
  module BCDice
4
6
  module GameSystem
5
- class DetatokoSaga_Korean < Base
7
+ class DetatokoSaga_Korean < DetatokoSaga
6
8
  # ゲームシステムの識別子
7
9
  ID = 'DetatokoSaga:Korean'
8
10
 
@@ -26,285 +28,15 @@ module BCDice
26
28
  ・기력 배드엔딩표 WBET (WillBadEndTable)
27
29
  INFO_MESSAGE_TEXT
28
30
 
29
- register_prefix([
30
- '\d+DS.*', '\d+JD.*',
31
- 'SST', 'StrengthStigmaTable',
32
- 'WST', 'WillStigmaTable',
33
- 'SBET', 'StrengthBadEndTable',
34
- 'WBET', 'WillBadEndTable'
35
- ])
31
+ register_prefix_from_super_class()
36
32
 
37
33
  def initialize(command)
38
34
  super(command)
39
35
 
40
- @sort_add_dice = true
41
- @enabled_d66 = true
42
- @d66_sort_type = D66SortType::ASC
43
- end
44
-
45
- def eval_game_system_specific_command(command)
46
- debug("eval_game_system_specific_command begin string", command)
47
-
48
- result = checkRoll(command)
49
- return result unless result.empty?
50
-
51
- result = checkJudgeValue(command)
52
- return result unless result.empty?
53
-
54
- debug("각종표로서 처리")
55
- return rollTableCommand(command)
56
- end
57
-
58
- # 통상판정 xDS or xDSy or xDS>=z or xDSy>=z
59
- def checkRoll(string)
60
- debug("checkRoll begin string", string)
61
-
62
- return '' unless /^(\d+)DS(\d+)?((>=)(\d+))?$/i =~ string
63
-
64
- target = 8
65
-
66
- skill = Regexp.last_match(1).to_i
67
- flag = Regexp.last_match(2).to_i
68
- target = Regexp.last_match(5).to_i unless Regexp.last_match(5).nil?
69
-
70
- result = "판정! 스킬레벨:#{skill} 플래그:#{flag} 목표치:#{target}"
71
-
72
- total, rollText = getRollResult(skill)
73
- result += " > #{total}[#{rollText}] > 판정치:#{total}"
74
-
75
- success = getSuccess(total, target)
76
- result += " > #{success}"
77
-
78
- result += getCheckFlagResult(total, flag)
79
-
80
- return result
81
- end
82
-
83
- def getRollResult(skill)
84
- diceCount = skill + 1
85
- diceCount = 3 if skill == 0
86
-
87
- dice = @randomizer.roll_barabara(diceCount, 6)
88
- diceText = dice.join(',')
89
-
90
- dice = dice.sort
91
- dice = dice.reverse if skill != 0
92
-
93
- total = dice[0] + dice[1]
94
-
95
- return total, diceText
96
- end
97
-
98
- def getSuccess(check, target)
99
- if check >= target
100
- return "목표치 이상!【성공】"
101
- end
102
-
103
- return "목표치 미달… 【실패】"
104
- end
105
-
106
- def getCheckFlagResult(total, flag)
107
- if total > flag
108
- return ""
109
- end
110
-
111
- willText = getDownWill(flag)
112
- result = ", 플래그 이하! 【기력#{willText}점 감소】"
113
- result += " 【판정치 변경 불가】"
114
-
115
- return result
36
+ @locale = :ko_kr
116
37
  end
117
38
 
118
- def getDownWill(flag)
119
- if flag >= 10
120
- return "6"
121
- end
122
-
123
- dice = @randomizer.roll_once(6)
124
- return "1D6->#{dice}"
125
- end
126
-
127
- # 스킬판정치 xJD or xJDy or xJDy+z or xJDy-z or xJDy/z
128
- def checkJudgeValue(string)
129
- debug("checkJudgeValue begin string", string)
130
-
131
- return '' unless %r{^(\d+)JD(\d+)?(([+]|[-]|[/])(\d+))?$}i =~ string
132
-
133
- skill = Regexp.last_match(1).to_i
134
- flag = Regexp.last_match(2).to_i
135
- operator = Regexp.last_match(4)
136
- value = Regexp.last_match(5).to_i
137
-
138
- result = "판정! 스킬레벨:#{skill} 플래그:#{flag}"
139
-
140
- modifyText = getModifyText(operator, value)
141
- result += " 수정치:#{modifyText}" unless modifyText.empty?
142
-
143
- total, rollText = getRollResult(skill)
144
- result += " > #{total}[#{rollText}]#{modifyText}"
145
-
146
- totalResult = getTotalResultValue(total, value, operator)
147
- result += " > #{totalResult}"
148
-
149
- result += getCheckFlagResult(total, flag)
150
-
151
- return result
152
- end
153
-
154
- def getModifyText(operator, value)
155
- return '' if value == 0
156
-
157
- operatorText =
158
- case operator
159
- when "+"
160
- "+"
161
- when "-"
162
- "-"
163
- when "/"
164
- "÷"
165
- else
166
- return ""
167
- end
168
-
169
- return "#{operatorText}#{value}"
170
- end
171
-
172
- def getTotalResultValue(total, value, operator)
173
- case operator
174
- when "+"
175
- return "#{total}+#{value} > 판정치:#{total + value}"
176
- when "-"
177
- return "#{total}-#{value} > 판정치:#{total - value}"
178
- when "/"
179
- return getTotalResultValueWhenSlash(total, value)
180
- else
181
- return "판정치:#{total}"
182
- end
183
- end
184
-
185
- def getTotalResultValueWhenSlash(total, value)
186
- return "0으로는 나누어지지 않습니다" if value == 0
187
-
188
- quotient = ((1.0 * total) / value).ceil
189
-
190
- result = "#{total}÷#{value} > 판정치:#{quotient}"
191
- return result
192
- end
193
-
194
- ####################
195
- # 각종표
196
-
197
- def rollTableCommand(command)
198
- command = command.upcase
199
-
200
- debug("eval_game_system_specific_command command", command)
201
-
202
- name = ''
203
- text = ''
204
- total = 0
205
-
206
- case command.upcase
207
- when "SST", "StrengthStigmaTable".upcase
208
- name, text, total = choiceStrengthStigmaTable()
209
- when "WST", "WillStigmaTable".upcase
210
- name, text, total = choiceWillStigmaTable()
211
- when "SBET", "StrengthBadEndTable".upcase
212
- name, text, total = choiceStrengthBadEndTable()
213
- when "WBET", "WillBadEndTable".upcase
214
- name, text, total = choiceWillBadEndTable()
215
- else
216
- return
217
- end
218
-
219
- result = "#{name}(#{total}) > #{text}"
220
-
221
- return result
222
- end
223
-
224
- # ##표 목록
225
-
226
- def choiceStrengthStigmaTable()
227
- name = "체력 낙인표"
228
- table = [
229
- "당신은 【낙인】을 2개 받는다. 이 표를 다시 2번 굴려 받을 【낙인】을 정한다(그 경우, 다시 이 눈이 나와도 【낙인】은 늘어나지 않는다).",
230
- "【상처】 심한 상처를 입었다. 어떻게든 싸울 수는 있지만…….",
231
- "【출혈】 피가 흘러넘쳐, 눈이 흐릿하다…….",
232
- "【쇠약】 몸이 약해져, 그 마음마저도 시들어버릴 거 같다.",
233
- "【고통】 아픔과 괴로움, 한심함. 눈에서 눈물이 새어 나온다.",
234
- "【충격】 날려져서, 벽이나 나무에 부딪힌다. 빨리 일어서지 않으면.",
235
- "【피로】 당신의 얼굴에 피로의 색이 강해진다……이 싸움이 힘겨워졌다.",
236
- "【노호】 성가신 공격에 분노의 함성을 지른다. 분노가 싸움을 어렵게 할까?",
237
- "【부상】 상처를 입었다…….",
238
- "【경상】 당신의 피부에 상처가 남았다. 이것만이라면 아무렇지도 않다.",
239
- "기적적으로 당신은 【낙인】을 받지 않았다.",
240
- ]
241
-
242
- text, total = get_table_by_2d6(table)
243
- return name, text, total
244
- end
245
-
246
- def choiceWillStigmaTable()
247
- name = "기력 낙인표"
248
-
249
- table = [
250
- "당신은 【낙인】을 2개 받는다. 이 표를 다시 2번 굴려 받을 【낙인】을 정한다(그 경우, 다시 이 눈이 나와도 【낙인】은 늘어나지 않는다).",
251
- "【절망】 어떻게 하지 못하는 상황. 희망은 사라지고……무릎을 꿇을 수밖에 없다.",
252
- "【통곡】 너무도 부조리함에, 어린아이처럼 울음을 터트릴 수밖에 없다.",
253
- "【후회】 이럴 생각은 아니었는데. 하지만 현실은 비정했다.",
254
- "【공포】 공포에 사로잡혔다! 적이, 자신의 손이, 무서워서 참을 수 없다!",
255
- "【갈등】 정말로 이걸로 괜찮은 걸까? 몇 번이고 자신에게 의문이 일어난다…….",
256
- "【증오】 분노와 증오에 사로잡힌 당신은, 본래의 힘을 발휘할 수 있을까?",
257
- "【망연】 이것은 현실인가? 몽롱한 정신으로 당신은 생각한다.",
258
- "【주저】 망설임을 가졌다. 그것은 싸울 의지를 둔하게 할 것인가?",
259
- "【악몽】 이제부터 때때로, 당신은 이 순간을 악몽으로 볼 것이다.",
260
- "기적적으로 당신은 【낙인】을 받지 않았다.",
261
- ]
262
-
263
- text, total = get_table_by_2d6(table)
264
- return name, text, total
265
- end
266
-
267
- def choiceStrengthBadEndTable()
268
- name = "체력 배드엔딩표"
269
-
270
- table = [
271
- "【사망】 당신은 죽었다. 다음 세션에 참가하기 위해서는, 클래스 1개를 『몬스터』나 『암흑』으로 클래스 체인지해야만 한다.",
272
- "【목숨 구걸】 당신은 공포를 느껴, 목숨을 구걸했다! 다음 세션 개시 시에, 클래스 1개가 『자코』로 변경된다!",
273
- "【망각】 당신은 기억을 잃고, 우두커니 섰다. 다음 세션에 참가하기 위해서는, 클래스 1개를 변경해야만 한다.",
274
- "【비극】 당신의 공격은 적이 아니라 아군을 맞췄다! 모든 것이 끝날 때까지 당신은 우두커니 서 있게 된다. 임의의 아군의 【체력】을 1D6점 감소시킨다.",
275
- "【폭주】 당신은 이성을 잃고, 충동에 따라 폭주한다! 같은 씬에 있는 전원의 【체력】을 1D6점 감소시킨다.",
276
- "【전락】 당신은 단애절벽에서 떨어진다.",
277
- "【포로】 당신은 적에게 사로잡혔다.",
278
- "【도주】 당신은 겁에 질려, 동료를 버리고 도망쳤다.",
279
- "【중상】 당신은 어찌할 수 없는 상처를 입고, 쓰러졌다.",
280
- "【기절】 당신은 의식을 잃었다. 그리고 정신이 들면 모든 것이 끝나있었다.",
281
- "그래도 아직 일어선다! 당신은 배드엔드를 맞이하지 않았다. 체력의 【낙인】을 1개 지워도 좋다.",
282
- ]
283
-
284
- text, total = get_table_by_2d6(table)
285
- return name, text, total
286
- end
287
-
288
- def choiceWillBadEndTable()
289
- name = "기력 배드엔딩표"
290
-
291
- table = [
292
- "【자해】 당신은 스스로 죽음을 골랐다. 다음 세션에 참가하기 위해서는 클래스 1개를 『암흑』으로 클래스 체인지해야만 한다.",
293
- "【타락】 당신은 마음속의 어둠에 먹혔다. 다음 세션 개시 시에, 클래스 1개가 『암흑』이나 『몬스터』로 변경된다!",
294
- "【예속】 당신은 적의 말에 거스를 수 없다. 다음 세션에 당신의 스탠스는 『종속』이 된다.",
295
- "【배반】 배반의 충동. 임의의 아군의 【체력】을 1D6점 감소시키고, 그 자리에서 도망친다.",
296
- "【폭주】 당신은 이성을 잃고, 충동에 따라 폭주한다! 같은 씬에 있는 전원의 【체력】을 1D6점 감소시킨다.",
297
- "【저주】 마음의 어둠이 현재화한 것인가. 적의 원한인가. 저주에 삼켜진 당신은, 그저 고통에 몸부림칠 수밖에 없다.",
298
- "【포로】 당신은 적에게 사로잡혀, 그 자리에서 끌려갔다.",
299
- "【도주】 당신은 겁에 질려, 동료를 버리고 도망쳤다.",
300
- "【방심】 당신은 그저 멍하니 서 있을 수밖에 없다. 정신을 차렸을 때, 모든 것은 끝나있었다.",
301
- "【기절】 당신은 의식을 잃었다. 그리고 정신이 들면 모든 것이 끝나있었다.",
302
- "그래도 아직 포기하지 않아! 당신은 배드엔드를 맞이하지 않았다. 기력의 【낙인】을 1개 지워도 좋다.",
303
- ]
304
-
305
- text, total = get_table_by_2d6(table)
306
- return name, text, total
307
- end
39
+ TABLES = translate_tables(:ko_kr)
308
40
  end
309
41
  end
310
42
  end
@@ -21,13 +21,12 @@ module BCDice
21
21
  (上記二つは最初からシークレットダイスで行われます)
22
22
  INFO_MESSAGE_TEXT
23
23
 
24
- register_prefix(['(ZMB|BIO).*'])
24
+ register_prefix('(ZMB|BIO).*')
25
25
 
26
26
  def initialize(command)
27
27
  super(command)
28
28
 
29
29
  @sort_add_dice = true
30
- @enabled_d66 = true
31
30
  @d66_sort_type = D66SortType::ASC
32
31
  end
33
32
 
@@ -35,14 +34,18 @@ module BCDice
35
34
  case command
36
35
  when /^BIO(\d+)?$/
37
36
  roll_times = (Regexp.last_match(1) || 1).to_i
38
- @is_secret = true
39
37
 
40
- return checkInfection(roll_times)
38
+ Result.new.tap do |r|
39
+ r.secret = true
40
+ r.text = checkInfection(roll_times)
41
+ end
41
42
  when /^ZMB(\+(\d+))?$/
42
43
  value = Regexp.last_match(2).to_i
43
- @is_secret = true
44
44
 
45
- return rollZombie(value)
45
+ Result.new.tap do |r|
46
+ r.secret = true
47
+ r.text = rollZombie(value)
48
+ end
46
49
  end
47
50
  end
48
51
 
@@ -30,10 +30,12 @@ module BCDice
30
30
  ・D66ダイスあり
31
31
  INFO_MESSAGE_TEXT
32
32
 
33
- register_prefix(['\d+DX.*', 'ET'])
33
+ register_prefix('\d+DX.*', 'ET')
34
34
 
35
35
  # 成功判定コマンドのノード
36
36
  class DX
37
+ include Translate
38
+
37
39
  # ノードを初期化する
38
40
  # @param [Integer] num ダイス数
39
41
  # @param [Integer] critical_value クリティカル値
@@ -47,6 +49,8 @@ module BCDice
47
49
 
48
50
  @modifier_str = Format.modifier(@modifier)
49
51
  @expression = node_expression()
52
+
53
+ @locale = :ja_jp
50
54
  end
51
55
 
52
56
  # 成功判定を行う
@@ -54,11 +58,11 @@ module BCDice
54
58
  # @return [String] 判定結果
55
59
  def execute(randomizer)
56
60
  if @critical_value < 2
57
- return "(#{@expression}) > クリティカル値が低すぎます。2以上を指定してください。"
61
+ return "(#{@expression}) > #{translate('DoubleCross.DX.invalid_critical')}"
58
62
  end
59
63
 
60
64
  if @num < 1
61
- return "(#{@expression}) > 自動失敗"
65
+ return "(#{@expression}) > #{translate('DoubleCross.DX.auto_failure')}"
62
66
  end
63
67
 
64
68
  # 出目のグループの配列
@@ -99,8 +103,7 @@ module BCDice
99
103
  # @return [String]
100
104
  def result_str(value_groups)
101
105
  fumble = value_groups[0].values.all? { |value| value == 1 }
102
- # TODO: Ruby 2.4以降では Array#sum が使える
103
- sum = value_groups.map(&:max).reduce(0, &:+)
106
+ sum = value_groups.map(&:max).sum
104
107
  achieved_value = fumble ? 0 : (sum + @modifier)
105
108
 
106
109
  parts = [
@@ -118,7 +121,7 @@ module BCDice
118
121
  # @param [Boolean] fumble ファンブルしたか
119
122
  # @return [String]
120
123
  def achieved_value_with_if_fumble(achieved_value, fumble)
121
- fumble ? "#{achieved_value} (ファンブル)" : achieved_value.to_s
124
+ fumble ? "#{achieved_value} (#{translate('fumble')})" : achieved_value.to_s
122
125
  end
123
126
 
124
127
  # 達成値と目標値を比較した結果を返す
@@ -130,11 +133,11 @@ module BCDice
130
133
 
131
134
  # ファンブル時は自動失敗
132
135
  # [3rd ルールブック1 pp. 186-187]
133
- return '失敗' if fumble
136
+ return translate("failure") if fumble
134
137
 
135
138
  # 達成値が目標値以上ならば行為判定成功
136
139
  # [3rd ルールブック1 p. 187]
137
- return achieved_value >= @target_value ? '成功' : '失敗'
140
+ return achieved_value >= @target_value ? translate("success") : translate("failure")
138
141
  end
139
142
  end
140
143
 
@@ -173,9 +176,7 @@ module BCDice
173
176
  # クリティカルの発生数を返す
174
177
  # @return [Integer]
175
178
  def num_of_critical_occurrences
176
- @values
177
- .select { |value| critical?(value) }
178
- .length
179
+ @values.count { |value| critical?(value) }
179
180
  end
180
181
 
181
182
  private
@@ -195,13 +196,16 @@ module BCDice
195
196
  return '' if target == '?'
196
197
  return '' unless cmp_op == :>=
197
198
 
198
- if dice_list.count(1) == dice_list.size
199
- " ファンブル"
200
- elsif total >= target
201
- " 成功"
202
- else
203
- " > 失敗"
204
- end
199
+ result =
200
+ if dice_list.count(1) == dice_list.size
201
+ translate("fumble")
202
+ elsif total >= target
203
+ translate("success")
204
+ else
205
+ translate("failure")
206
+ end
207
+
208
+ return " > #{result}"
205
209
  end
206
210
 
207
211
  # ダイスボット固有コマンドの処理を行う
@@ -266,7 +270,7 @@ module BCDice
266
270
 
267
271
  target_value = m[4]&.to_i
268
272
 
269
- return DX.new(num, critical_value, modifier, target_value)
273
+ return self.class::DX.new(num, critical_value, modifier, target_value)
270
274
  end
271
275
 
272
276
  # 疾風怒濤式の成功判定コマンドの正規表現マッチ情報からノードを作る
@@ -279,7 +283,7 @@ module BCDice
279
283
 
280
284
  target_value = m[4]&.to_i
281
285
 
282
- return DX.new(num, critical_value, modifier, target_value)
286
+ return self.class::DX.new(num, critical_value, modifier, target_value)
283
287
  end
284
288
 
285
289
  # 感情表を振る
@@ -288,8 +292,8 @@ module BCDice
288
292
  #
289
293
  # @return [String]
290
294
  def roll_emotion_table
291
- pos_result = POSITIVE_EMOTION_TABLE.roll(@randomizer)
292
- neg_result = NEGATIVE_EMOTION_TABLE.roll(@randomizer)
295
+ pos_result = self.class::POSITIVE_EMOTION_TABLE.roll(@randomizer)
296
+ neg_result = self.class::NEGATIVE_EMOTION_TABLE.roll(@randomizer)
293
297
 
294
298
  positive = @randomizer.roll_once(2) == 1
295
299
  pos_neg_text =
@@ -299,75 +303,92 @@ module BCDice
299
303
  [pos_result.content, "○#{neg_result.content}"]
300
304
  end
301
305
 
306
+ name = translate("DoubleCross.ET.name")
302
307
  output_parts = [
303
- "感情表(#{pos_result.sum}-#{neg_result.sum})",
308
+ "#{name}(#{pos_result.sum}-#{neg_result.sum})",
304
309
  pos_neg_text.join(' - ')
305
310
  ]
306
311
 
307
312
  return output_parts.join(' > ')
308
313
  end
309
314
 
315
+ class << self
316
+ private
317
+
318
+ # @param locale [Symbol]
319
+ # @return [RangeTable]
320
+ def positive_emotion_table(locale)
321
+ DiceTable::RangeTable.new(
322
+ I18n.translate("DoubleCross.ET.positive.name", locale: locale),
323
+ "1D100",
324
+ [
325
+ # [0, '傾倒(けいとう)'],
326
+ [1..5, I18n.translate("DoubleCross.ET.positive.items.1_5", locale: locale)],
327
+ [6..10, I18n.translate("DoubleCross.ET.positive.items.6_10", locale: locale)],
328
+ [11..15, I18n.translate("DoubleCross.ET.positive.items.11_15", locale: locale)],
329
+ [16..20, I18n.translate("DoubleCross.ET.positive.items.16_20", locale: locale)],
330
+ [21..25, I18n.translate("DoubleCross.ET.positive.items.21_25", locale: locale)],
331
+ [26..30, I18n.translate("DoubleCross.ET.positive.items.26_30", locale: locale)],
332
+ [31..35, I18n.translate("DoubleCross.ET.positive.items.31_35", locale: locale)],
333
+ [36..40, I18n.translate("DoubleCross.ET.positive.items.36_40", locale: locale)],
334
+ [41..45, I18n.translate("DoubleCross.ET.positive.items.41_45", locale: locale)],
335
+ [46..50, I18n.translate("DoubleCross.ET.positive.items.46_50", locale: locale)],
336
+ [51..55, I18n.translate("DoubleCross.ET.positive.items.51_55", locale: locale)],
337
+ [56..60, I18n.translate("DoubleCross.ET.positive.items.56_60", locale: locale)],
338
+ [61..65, I18n.translate("DoubleCross.ET.positive.items.61_65", locale: locale)],
339
+ [66..70, I18n.translate("DoubleCross.ET.positive.items.66_70", locale: locale)],
340
+ [71..75, I18n.translate("DoubleCross.ET.positive.items.71_75", locale: locale)],
341
+ [76..80, I18n.translate("DoubleCross.ET.positive.items.76_80", locale: locale)],
342
+ [81..85, I18n.translate("DoubleCross.ET.positive.items.81_85", locale: locale)],
343
+ [86..90, I18n.translate("DoubleCross.ET.positive.items.86_90", locale: locale)],
344
+ [91..95, I18n.translate("DoubleCross.ET.positive.items.91_95", locale: locale)],
345
+ [96..100, I18n.translate("DoubleCross.ET.positive.items.96_100", locale: locale)],
346
+ # [101, '懐旧(かいきゅう)'],
347
+ # [102, '任意(にんい)'],
348
+ ]
349
+ )
350
+ end
351
+
352
+ # @param locale [Symbol]
353
+ # @return [RangeTable]
354
+ def negative_emotion_table(locale)
355
+ DiceTable::RangeTable.new(
356
+ I18n.translate("DoubleCross.ET.negative.name", locale: locale),
357
+ "1D100",
358
+ [
359
+ # [0, '侮蔑(ぶべつ)'],
360
+ [1..5, I18n.translate("DoubleCross.ET.negative.items.1_5", locale: locale)],
361
+ [6..10, I18n.translate("DoubleCross.ET.negative.items.6_10", locale: locale)],
362
+ [11..15, I18n.translate("DoubleCross.ET.negative.items.11_15", locale: locale)],
363
+ [16..20, I18n.translate("DoubleCross.ET.negative.items.16_20", locale: locale)],
364
+ [21..25, I18n.translate("DoubleCross.ET.negative.items.21_25", locale: locale)],
365
+ [26..30, I18n.translate("DoubleCross.ET.negative.items.26_30", locale: locale)],
366
+ [31..35, I18n.translate("DoubleCross.ET.negative.items.31_35", locale: locale)],
367
+ [36..40, I18n.translate("DoubleCross.ET.negative.items.36_40", locale: locale)],
368
+ [41..45, I18n.translate("DoubleCross.ET.negative.items.41_45", locale: locale)],
369
+ [46..50, I18n.translate("DoubleCross.ET.negative.items.46_50", locale: locale)],
370
+ [51..55, I18n.translate("DoubleCross.ET.negative.items.51_55", locale: locale)],
371
+ [56..60, I18n.translate("DoubleCross.ET.negative.items.56_60", locale: locale)],
372
+ [61..65, I18n.translate("DoubleCross.ET.negative.items.61_65", locale: locale)],
373
+ [66..70, I18n.translate("DoubleCross.ET.negative.items.66_70", locale: locale)],
374
+ [71..75, I18n.translate("DoubleCross.ET.negative.items.71_75", locale: locale)],
375
+ [76..80, I18n.translate("DoubleCross.ET.negative.items.76_80", locale: locale)],
376
+ [81..85, I18n.translate("DoubleCross.ET.negative.items.81_85", locale: locale)],
377
+ [86..90, I18n.translate("DoubleCross.ET.negative.items.86_90", locale: locale)],
378
+ [91..95, I18n.translate("DoubleCross.ET.negative.items.91_95", locale: locale)],
379
+ [96..100, I18n.translate("DoubleCross.ET.negative.items.96_100", locale: locale)],
380
+ # [101, '無関心(むかんしん)'],
381
+ # [102, '任意(にんい)'],
382
+ ]
383
+ ).freeze
384
+ end
385
+ end
386
+
310
387
  # 感情表(ポジティブ)
311
- POSITIVE_EMOTION_TABLE = DiceTable::RangeTable.new(
312
- '感情表(ポジティブ)',
313
- '1D100',
314
- [
315
- # [0, '傾倒(けいとう)'],
316
- [1..5, '好奇心(こうきしん)'],
317
- [6..10, '憧憬(どうけい)'],
318
- [11..15, '尊敬(そんけい)'],
319
- [16..20, '連帯感(れんたいかん)'],
320
- [21..25, '慈愛(じあい)'],
321
- [26..30, '感服(かんぷく)'],
322
- [31..35, '純愛(じゅんあい)'],
323
- [36..40, '友情(ゆうじょう)'],
324
- [41..45, '慕情(ぼじょう)'],
325
- [46..50, '同情(どうじょう)'],
326
- [51..55, '遺志(いし)'],
327
- [56..60, '庇護(ひご)'],
328
- [61..65, '幸福感(こうふくかん)'],
329
- [66..70, '信頼(しんらい)'],
330
- [71..75, '執着(しゅうちゃく)'],
331
- [76..80, '親近感(しんきんかん)'],
332
- [81..85, '誠意(せいい)'],
333
- [86..90, '好意(こうい)'],
334
- [91..95, '有為(ゆうい)'],
335
- [96..100, '尽力(じんりょく)'],
336
- # [101, '懐旧(かいきゅう)'],
337
- # [102, '任意(にんい)'],
338
- ]
339
- ).freeze
388
+ POSITIVE_EMOTION_TABLE = positive_emotion_table(:ja_jp).freeze
340
389
 
341
390
  # 感情表(ネガティブ)
342
- NEGATIVE_EMOTION_TABLE = DiceTable::RangeTable.new(
343
- '感情表(ネガティブ)',
344
- '1D100',
345
- [
346
- # [0, '侮蔑(ぶべつ)'],
347
- [1..5, '食傷(しょくしょう)'],
348
- [6..10, '脅威(きょうい)'],
349
- [11..15, '嫉妬(しっと)'],
350
- [16..20, '悔悟(かいご)'],
351
- [21..25, '恐怖(きょうふ)'],
352
- [26..30, '不安(ふあん)'],
353
- [31..35, '劣等感(れっとうかん)'],
354
- [36..40, '疎外感(そがいかん)'],
355
- [41..45, '恥辱(ちじょく)'],
356
- [46..50, '憐憫(れんびん)'],
357
- [51..55, '偏愛(へんあい)'],
358
- [56..60, '憎悪(ぞうお)'],
359
- [61..65, '隔意(かくい)'],
360
- [66..70, '嫌悪(けんお)'],
361
- [71..75, '猜疑心(さいぎしん)'],
362
- [76..80, '厭気(いやけ)'],
363
- [81..85, '不信感(ふしんかん)'],
364
- [86..90, '不快感(ふかいかん)'],
365
- [91..95, '憤懣(ふんまん)'],
366
- [96..100, '敵愾心(てきがいしん)'],
367
- # [101, '無関心(むかんしん)'],
368
- # [102, '任意(にんい)'],
369
- ]
370
- ).freeze
391
+ NEGATIVE_EMOTION_TABLE = negative_emotion_table(:ja_jp).freeze
371
392
  end
372
393
  end
373
394
  end