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

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -28,7 +28,6 @@ module BCDice
28
28
  super(command)
29
29
 
30
30
  @sort_add_dice = true
31
- @enabled_d66 = true
32
31
  @d66_sort_type = D66SortType::NO_SORT
33
32
  end
34
33
 
@@ -39,94 +38,35 @@ module BCDice
39
38
  debug("eval_game_system_specific_command command", command)
40
39
 
41
40
  case command.upcase
42
-
43
- when "RT"
44
- tableName, result, number = getReimonCompensationTableResult
45
-
46
41
  when /^MT(\d*)$/
47
42
  rank = Regexp.last_match(1)
48
43
  rank ||= 1
49
44
  rank = rank.to_i
50
45
  tableName, result, number = getGetMaterialTableResult(rank)
51
-
52
46
  else
53
- return roll_tables(command, TABLES)
47
+ return roll_tables(command, self.class::TABLES)
54
48
  end
55
49
 
56
50
  if result.empty?
57
51
  return ""
58
52
  end
59
53
 
60
- text = "#{tableName}(#{number}):#{result}"
54
+ text = "#{tableName}(#{number}) > #{result}"
61
55
  return text
62
56
  end
63
57
 
64
- def getReimonCompensationTableResult
65
- tableName = "霊紋消費の代償表"
66
-
67
- table = [
68
- '邪神化:物理法則を超過しすぎた代償として、霊魂そのものが歪み、PCは即座にアラミタマへと変貌する。アラミタマ化したPCは、いずこかへと消え去る。',
69
- '存在消滅:アラミタマ化を最後の力で抑え込む。だがその結果、PCの霊魂は燃え尽きてしまい、この世界から消滅する。そのPCは[状態変化:死亡]となり死体も残らない。',
70
- '死亡:霊魂の歪みをかろうじて食い止めるが、霊魂が崩壊する。PCは[状態変化:死亡]となるが遺体は残る。',
71
- '霊魂半壊:霊魂の歪みを食い止めるものの、霊魂そのものに致命的な負傷を受け、全身に障害が残る。それに伴って霊紋も消滅し、一般人へと戻る。',
72
- '記憶消滅:奇跡的に霊魂の摩耗による身体的な悪影響を免れる。時間を置くことで霊紋も回復するが、精神的に影響を受け、すべての記憶を失ってしまう。',
73
- '影響なし:奇跡的に、霊魂の摩耗による悪影響を完全に退け、さらに霊紋の回復も早期を見込める。肉体や精神にも、特に影響はない。',
74
- ]
75
- result, number = get_table_by_1d6(table)
76
-
77
- return tableName, result, number
78
- end
79
-
80
58
  def getGetMaterialTableResult(rank)
81
- tableName = "獲得素材チャート"
82
- table = [
83
- '真紅の',
84
- 'ざらつく',
85
- '紺碧の',
86
- '鋭い',
87
- '黄金の',
88
- '柔らかな',
89
- '銀色の',
90
- '尖った',
91
- '純白の',
92
- '硬い',
93
- '漆黒の',
94
- '輝く',
95
- 'なめらかな',
96
- '濁った',
97
- 'ふさふさの',
98
- '邪悪な',
99
- '粘つく',
100
- '聖なる',
101
- '灼熱の',
102
- '炎の',
103
- '氷結の',
104
- '氷の',
105
- '熱い',
106
- '風の',
107
- '冷たい',
108
- '雷の',
109
- '土の',
110
- '幻の',
111
- '骨状の',
112
- '刻印の',
113
- '牙状の',
114
- '鱗状の',
115
- '石状の',
116
- '宝石状の',
117
- '毛皮状の',
118
- '羽根状の',
119
- ]
59
+ tableName = translate("Kamigakari.MT.name")
60
+ table = translate("Kamigakari.MT.items")
120
61
 
121
62
  result, number = get_table_by_d66(table)
122
- result += "断片"
123
63
 
124
64
  effect, number2 = getMaterialEffect(rank)
125
65
  number = "#{number},#{number2}"
126
66
 
127
67
  price = getPrice(effect)
128
68
 
129
- result = "#{result}。#{effect}"
69
+ result = translate("Kamigakari.MT.result_format", material: result, effect: effect)
130
70
  result += ":#{price}" unless price.nil?
131
71
 
132
72
  return tableName, result, number
@@ -139,10 +79,10 @@ module BCDice
139
79
  type = ""
140
80
  if number < 6
141
81
  result, number2 = getMaterialEffectNomal(rank)
142
- type = "よく見つかる素材"
82
+ type = translate("Kamigakari.MT.common_material.name")
143
83
  else
144
84
  result, number2 = getMaterialEffectRare()
145
- type = "珍しい素材"
85
+ type = translate("Kamigakari.MT.rare_material.name")
146
86
  end
147
87
 
148
88
  result = "#{type}:#{result}"
@@ -152,21 +92,7 @@ module BCDice
152
92
  end
153
93
 
154
94
  def getMaterialEffectNomal(rank)
155
- table = [
156
- [13, '体力+n'],
157
- [16, '敏捷+n'],
158
- [23, '知性+n'],
159
- [26, '精神+n'],
160
- [33, '幸運+n'],
161
- [35, '物D+n'],
162
- [41, '魔D+n'],
163
- [43, '行動+n'],
164
- [46, '生命+n×3'],
165
- [53, '装甲+n'],
166
- [56, '結界+n'],
167
- [63, '移動+nマス'],
168
- [66, '※PCの任意'],
169
- ]
95
+ table = translate("Kamigakari.MT.common_material.items")
170
96
 
171
97
  number = @randomizer.roll_d66(D66SortType::NO_SORT)
172
98
 
@@ -198,17 +124,19 @@ module BCDice
198
124
  end
199
125
 
200
126
  def getMaterialEffectRare()
201
- table = [[3, '**付与'],
202
- [5, '**半減'],
203
- [6, '※GMの任意'],]
127
+ table = [
128
+ [3, "**" + translate("Kamigakari.MT.rare_material.give_attribute")], # 付与
129
+ [5, "**" + translate("Kamigakari.MT.rare_material.halve_damage")], # 半減
130
+ [6, translate("Kamigakari.MT.rare_material.optional_by_GM")],
131
+ ]
204
132
 
205
133
  number = @randomizer.roll_once(6)
206
134
  result = get_table_by_number(number, table)
207
135
  debug('getMaterialEffectRare result', result)
208
136
 
209
- if result =~ /\*\*/
137
+ if result.include?("**")
210
138
  attribute, number2 = getAttribute()
211
- result = result.sub(/\*\*/, attribute.to_s)
139
+ result = result.sub("**", attribute.to_s)
212
140
  number = "#{number},#{number2}"
213
141
  end
214
142
 
@@ -216,16 +144,7 @@ module BCDice
216
144
  end
217
145
 
218
146
  def getAttribute()
219
- table = [
220
- [21, '[火炎]'],
221
- [33, '[冷気]'],
222
- [43, '[電撃]'],
223
- [53, '[風圧]'],
224
- [56, '[幻覚]'],
225
- [62, '[魔毒]'],
226
- [64, '[磁力]'],
227
- [66, '[閃光]'],
228
- ]
147
+ table = translate("Kamigakari.MT.attribute")
229
148
 
230
149
  number = @randomizer.roll_d66(D66SortType::NO_SORT)
231
150
 
@@ -235,160 +154,46 @@ module BCDice
235
154
  end
236
155
 
237
156
  def getPrice(effect)
238
- power = 0
239
-
240
- case effect
241
- when /\+(\d+)/
242
- power = Regexp.last_match(1).to_i
243
- when /付与/
244
- power = 3
245
- when /半減/
246
- power = 4
247
- else
248
- power = 0
249
- end
157
+ power =
158
+ if (m = effect.match(/\+(\d+)/))
159
+ m[1].to_i
160
+ elsif effect.include?(translate("Kamigakari.MT.rare_material.give_attribute")) # 付与
161
+ 3
162
+ elsif effect.include?(translate("Kamigakari.MT.rare_material.halve_damage")) # 半減
163
+ 4
164
+ else
165
+ 0
166
+ end
250
167
 
251
- table = [nil,
252
- '500G(効果値:1)',
253
- '1000G(効果値:2)',
254
- '1500G(効果値:3)',
255
- '2000G(効果値:4)',
256
- '3000G(効果値:5)',]
168
+ table = [
169
+ nil,
170
+ "500G(#{translate('Kamigakari.MT.effect_power')}:1)",
171
+ "1000G(#{translate('Kamigakari.MT.effect_power')}:2)",
172
+ "1500G(#{translate('Kamigakari.MT.effect_power')}:3)",
173
+ "2000G(#{translate('Kamigakari.MT.effect_power')}:4)",
174
+ "3000G(#{translate('Kamigakari.MT.effect_power')}:5)",
175
+ ]
257
176
  price = table[power]
258
177
 
259
178
  return price
260
179
  end
261
180
 
262
- TABLES = {
263
- "ET" => DiceTable::D66Table.new(
264
- "感情表",
265
- D66SortType::NO_SORT,
266
- {
267
- 11 => "運命/そのキャラクターに、運命的、あるいは宿命的なものを感じている。",
268
- 12 => "運命/そのキャラクターに、運命的、あるいは宿命的なものを感じている。",
269
- 13 => "家族/そのキャラクターに、家族のような親近感をいだいている。",
270
- 14 => "家族/そのキャラクターに、家族のような親近感をいだいている。",
271
- 15 => "腐れ縁/そのキャラクターに、腐れ縁を感じている。",
272
- 16 => "腐れ縁/そのキャラクターに、腐れ縁を感じている。",
273
- 21 => "師弟/そのキャラクターとは、まるで師弟のような関係だと感じている。どちらが弟子で、どちらが師匠かは相談して決定する。",
274
- 22 => "師弟/そのキャラクターとは、まるで師弟のような関係だと感じている。どちらが弟子で、どちらが師匠かは相談して決定する。",
275
- 23 => "好敵手/そのキャラクターを、好敵手だと感じている。",
276
- 24 => "好敵手/そのキャラクターを、好敵手だと感じている。",
277
- 25 => "親近感/そのキャラクターに、親近感をいだいている。",
278
- 26 => "親近感/そのキャラクターに、親近感をいだいている。",
279
- 31 => "誠意/そのキャラクターに、誠実さを感じている。",
280
- 32 => "誠意/そのキャラクターに、誠実さを感じている。",
281
- 33 => "友情/そのキャラクターに、友情をいだいている。",
282
- 34 => "友情/そのキャラクターに、友情をいだいている。",
283
- 35 => "尊敬/そのキャラクターに、尊敬をいだいている。",
284
- 36 => "尊敬/そのキャラクターに、尊敬をいだいている。",
285
- 41 => "庇護/そのキャラクターに、庇護の感情をいだいている。どちらが保護者で、どちらが被保護者かは相談して決定する。",
286
- 42 => "庇護/そのキャラクターに、庇護の感情をいだいている。どちらが保護者で、どちらが被保護者かは相談して決定する。",
287
- 43 => "好感/そのキャラクターに、好感をいだいている。",
288
- 44 => "好感/そのキャラクターに、好感をいだいている。",
289
- 45 => "興味/そのキャラクターに、興味をいだいている。",
290
- 46 => "興味/そのキャラクターに、興味をいだいている。",
291
- 51 => "感銘/そのキャラクターに、感銘をいだいている。",
292
- 52 => "感銘/そのキャラクターに、感銘をいだいている。",
293
- 53 => "畏怖/そのキャラクターに、畏怖をいだいている。",
294
- 54 => "畏怖/そのキャラクターに、畏怖をいだいている。",
295
- 55 => "お気に入り/そのキャラクターを、気に入っている。",
296
- 56 => "お気に入り/そのキャラクターを、気に入っている。",
297
- 61 => "愛情/そのキャラクターに愛情、またはそれに近い執着心をいだいている。",
298
- 62 => "愛情/そのキャラクターに愛情、またはそれに近い執着心をいだいている。",
299
- 63 => "信頼/そのキャラクターに、信頼を感じている。",
300
- 64 => "信頼/そのキャラクターに、信頼を感じている。",
301
- 65 => "*PCの任意/プレイヤー、またはGMが設定した任意の感情をいだいている。",
302
- 66 => "*PCの任意/プレイヤー、またはGMが設定した任意の感情をいだいている。"
303
- }
304
- ),
305
- "KT" => DiceTable::D66Table.new(
306
- "魔境臨界表",
307
- D66SortType::NO_SORT,
308
- {
309
- 11 => "時空の捻じれ\n現在地の時空が捻じれ、PC全員は即時に[侵入エリア]へと戻る。",
310
- 12 => "時空の捻じれ\n現在地の時空が捻じれ、PC全員は即時に[侵入エリア]へと戻る。",
311
- 13 => "強敵登場\n突如、<崇り神>化した[モノノケ]が出撃する。GMは、PCの[世界干渉LV]の平均+3の[LV]を持つ任意の[モノノケ]を1体選び任意の[探索エリア]に配置。そこでは[迂回]不可で[戦闘]が発生する。",
312
- 14 => "強敵登場\n突如、<崇り神>化した[モノノケ]が出撃する。GMは、PCの[世界干渉LV]の平均+3の[LV]を持つ任意の[モノノケ]を1体選び任意の[探索エリア]に配置。そこでは[迂回]不可で[戦闘]が発生する。",
313
- 15 => "影の手\n瘴気で形成された無数の手がPC達を握りつぶそうとする。PC全員は[効果種別:魔法攻撃/距離:戦闘地帯/対象:戦闘地帯/達成値:20+PCの[世界干渉LV]の平均/魔法ダメージ:20×PCの[世界干渉LV]の平均/抵抗[半減]]を受ける。",
314
- 16 => "影の手\n瘴気で形成された無数の手がPC達を握りつぶそうとする。PC全員は[効果種別:魔法攻撃/距離:戦闘地帯/対象:戦闘地帯/達成値:20+PCの[世界干渉LV]の平均/魔法ダメージ:20×PCの[世界干渉LV]の平均/抵抗[半減]]を受ける。",
315
- 21 => "無数の邪眼\n空間全体に恐ろしい邪眼が出現する。PC全員は、[大休止]するまで[状態変化:暗闇・苦痛]となる。",
316
- 22 => "無数の邪眼\n空間全体に恐ろしい邪眼が出現する。PC全員は、[大休止]するまで[状態変化:暗闇・苦痛]となる。",
317
- 23 => "空間崩壊\n突如として、魔境の空間が崩壊する。PC全員は[効果種別:物理攻撃/距離:戦闘地帯/対象:戦闘地帯/達成値:30+PCの[世界干渉LV]の平均/物理ダメージ:30×PCの[世界干渉LV]の平均]]を受ける。",
318
- 24 => "空間崩壊\n突如として、魔境の空間が崩壊する。PC全員は[効果種別:物理攻撃/距離:戦闘地帯/対象:戦闘地帯/達成値:30+PCの[世界干渉LV]の平均/物理ダメージ:30×PCの[世界干渉LV]の平均]]を受ける。",
319
- 25 => "防具腐食\n周辺から異様な霧が立ち込め、防具を腐食する。PC全員は、[所持・装備]中の任意の[アイテム:防具]1つを失う。",
320
- 26 => "防具腐食\n周辺から異様な霧が立ち込め、防具を腐食する。PC全員は、[所持・装備]中の任意の[アイテム:防具]1つを失う。",
321
- 31 => "素材消失\n周囲から異様な光が零れ、所持中の[素材]を消失させる。PC全員が[所持]中の[素材]が、すべて消滅する。",
322
- 32 => "素材消失\n周囲から異様な光が零れ、所持中の[素材]を消失させる。PC全員が[所持]中の[素材]が、すべて消滅する。",
323
- 33 => "なし\n特に何も起こらない。",
324
- 34 => "なし\n特に何も起こらない。",
325
- 35 => "モノノケ強襲\n突如として<崇り神>化した[モノノケ]が出現し、PCたちに襲いかかる。GMはPCの[世界干渉LV]の平均+2の[LV]を持つ任意の[モノノケ]を2体選び、PC達の前に出現させ、即座に[戦闘]を開始する。",
326
- 36 => "モノノケ強襲\n突如として<崇り神>化した[モノノケ]が出現し、PCたちに襲いかかる。GMはPCの[世界干渉LV]の平均+2の[LV]を持つ任意の[モノノケ]を2体選び、PC達の前に出現させ、即座に[戦闘]を開始する。",
327
- 41 => "休息妨害\nPCが休息しようとするたびに、さまざまな空間から、触手や毒蠱などが出現して襲いかかってくる。PCたちは以降、[魔境討伐]が終了するまで[大休止]を行えない。",
328
- 42 => "休息妨害\nPCが休息しようとするたびに、さまざまな空間から、触手や毒蠱などが出現して襲いかかってくる。PCたちは以降、[魔境討伐]が終了するまで[大休止]を行えない。",
329
- 43 => "龍脈破壊\n霊力が暴走して空間が歪み、[霊力]が狂う。PC全員は即座に[霊力]をすべて振り直す。",
330
- 44 => "龍脈破壊\n霊力が暴走して空間が歪み、[霊力]が狂う。PC全員は即座に[霊力]をすべて振り直す。",
331
- 45 => "固有時間停止\nPCたちの肉体の一部が灰色と化し、動かなくなる。PC全員は[タイミング:準備・防御・特殊]から1つ選び、以後その[タイミング]を消費できなくなる。",
332
- 46 => "固有時間停止\nPCたちの肉体の一部が灰色と化し、動かなくなる。PC全員は[タイミング:準備・防御・特殊]から1つ選び、以後その[タイミング]を消費できなくなる。",
333
- 51 => "龍脈不順\n霊力が突如として混濁し、[霊力]の循環に悪影響が発生する。PC全員は以後、[魔境討伐]が終了するまで[霊力操作]が行えない。",
334
- 52 => "龍脈不順\n霊力が突如として混濁し、[霊力]の循環に悪影響が発生する。PC全員は以後、[魔境討伐]が終了するまで[霊力操作]が行えない。",
335
- 53 => "術技封印\n周囲の空気が変貌し、悪影響が起こる。PC全員は以後、修得済みの《タレント》中、使用する[コスト]が最も多いもの1つが[魔境討伐]終了まで使用不能となる。[コスト:なし]ばかりの場合、GMが任意で1つを決定する。",
336
- 54 => "術技封印\n周囲の空気が変貌し、悪影響が起こる。PC全員は以後、修得済みの《タレント》中、使用する[コスト]が最も多いもの1つが[魔境討伐]終了まで使用不能となる。[コスト:なし]ばかりの場合、GMが任意で1つを決定する。",
337
- 55 => "装飾品消滅\n周囲が青い光に包まれると、なぜかPCたちの装飾品が失われている。PC全員は[所持・装備中]の[アイテム・装飾]をすべて失う。",
338
- 56 => "装飾品消滅\n周囲が青い光に包まれると、なぜかPCたちの装飾品が失われている。PC全員は[所持・装備中]の[アイテム・装飾]をすべて失う。",
339
- 61 => "愚者の黄金消失\n周囲が赤い光に包まれると、なぜかPCたちの[G]が失われている。PC全員は、[所持金]が[半減]する。",
340
- 62 => "愚者の黄金消失\n周囲が赤い光に包まれると、なぜかPCたちの[G]が失われている。PC全員は、[所持金]が[半減]する。",
341
- 63 => "GMの任意\nこの表のなかから、GMが効果を1つ選んで発生させる。",
342
- 64 => "GMの任意\nこの表のなかから、GMが効果を1つ選んで発生させる。",
343
- 65 => "臨界重複\n[魔境臨界]が2回発生する。GMはこの表を2回振り、効果をそれぞれ適応できる。再び「臨界重複」が発生した場合、[GMの任意]1回として扱う。",
344
- 66 => "臨界重複\n[魔境臨界]が2回発生する。GMはこの表を2回振り、効果をそれぞれ適応できる。再び「臨界重複」が発生した場合、[GMの任意]1回として扱う。"
345
- }
346
- ),
347
- "NT" => DiceTable::D66Table.new(
348
- "伝奇名字・名前決定表",
349
- D66SortType::NO_SORT,
181
+ class << self
182
+ private
183
+
184
+ def translate_tables(locale)
350
185
  {
351
- 11 => "御剣(みつるぎ) 陸/凛",
352
- 12 => "獅子内(ししうち) 大和/楓",
353
- 13 => "白銀(はくぎん) 隼人/桜",
354
- 14 => "竹内(たけのうち) 真/遥",
355
- 15 => "古太刀(こだち) 大地/美咲",
356
- 16 => "空閑(くが) 俊/真央",
357
- 21 => "鬼形(おにがた) 諒/舞",
358
- 22 => "御巫(みかんなぎ) 匠/七海",
359
- 23 => "護摩堂(ごまどう) 仁/千尋",
360
- 24 => "龍円(りゅうえん) 拓真/茜",
361
- 25 => "鏡部(かがみべ) 京/明日香",
362
- 26 => "犬神(いぬがみ) 剛/栞",
363
- 31 => "明月院(めいげついん) 葵/唯",
364
- 32 => "百目鬼(どうめき) 蓮也/萌",
365
- 33 => "恐神(おそがみ) 達也/綾香",
366
- 34 => "蘭(あららぎ) 龍之介/梓",
367
- 35 => "珠輝(たまき) 章/瞳",
368
- 36 => "眼龍(がんりゅう) 圭/沙織",
369
- 41 => "鉄砲塚(てっぽうづか) 雅人/沙良",
370
- 42 => "檻神(おりがみ) 直哉/弥生",
371
- 43 => "不死原(ふじわら) 純/千秋",
372
- 44 => "九郎座(くろうざ) 武蔵/春菜",
373
- 45 => "土御門(つちみかど) 亮介/翠",
374
- 46 => "十六夜(いざよい) 啓二/双葉",
375
- 51 => "転法輪(てんぽうりん) 英雄/麗菜",
376
- 52 => "執行(しぎょう) 響/小百合",
377
- 53 => "祝(ほうり) 良太郎/陽奈",
378
- 54 => "神尊(こうそ) 智/紫苑",
379
- 55 => "芦屋(あしや) 孝之/香澄",
380
- 56 => "七社(ななしゃ) 克己/風香",
381
- 61 => "騎馬(きば) 哲也/詩乃",
382
- 62 => "当麻(とうま) 玄/沙耶",
383
- 63 => "狐塚(きつねづか) 北斗/麻耶",
384
- 64 => "天神林(てんじんばやし) 空/晶",
385
- 65 => "明嵐(めあらし) 八雲/乙葉",
386
- 66 => "草壁(くさかべ) 大悟/文"
186
+ "RT" => DiceTable::Table.from_i18n("Kamigakari.table.RT", locale),
187
+ "ET" => DiceTable::D66Table.from_i18n("Kamigakari.table.ET", locale),
188
+ "KT" => DiceTable::D66Table.from_i18n("Kamigakari.table.KT", locale),
189
+ "NT" => DiceTable::D66Table.from_i18n("Kamigakari.table.NT", locale),
387
190
  }
388
- ),
389
- }.freeze
191
+ end
192
+ end
193
+
194
+ TABLES = translate_tables(:ja_jp)
390
195
 
391
- register_prefix(['RT', 'MT(\d*)'] + TABLES.keys)
196
+ register_prefix('MT(\d*)', TABLES.keys)
392
197
  end
393
198
  end
394
199
  end
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "bcdice/game_system/Kamigakari"
4
+
3
5
  module BCDice
4
6
  module GameSystem
5
- class Kamigakari_Korean < Base
7
+ class Kamigakari_Korean < Kamigakari
6
8
  # ゲームシステムの識別子
7
9
  ID = 'Kamigakari:Korean'
8
10
 
@@ -24,405 +26,15 @@ module BCDice
24
26
  ・D66주사위 가능
25
27
  INFO_MESSAGE_TEXT
26
28
 
27
- register_prefix([
28
- 'RT',
29
- 'MT(\d*)',
30
- 'ET',
31
- 'NT',
32
- 'KT'
33
- ])
29
+ register_prefix_from_super_class()
34
30
 
35
31
  def initialize(command)
36
32
  super(command)
37
33
 
38
- @sort_add_dice = true
39
- @enabled_d66 = true
40
- @d66_sort_type = D66SortType::NO_SORT
41
- end
42
-
43
- def eval_game_system_specific_command(command)
44
- tableName = ""
45
- result = ""
46
-
47
- debug("eval_game_system_specific_command command", command)
48
-
49
- case command
50
-
51
- when "RT"
52
- tableName, result, number = getReimonCompensationTableResult
53
-
54
- when /^MT(\d*)$/
55
- rank = Regexp.last_match(1)
56
- rank ||= 1
57
- rank = rank.to_i
58
- tableName, result, number = getGetMaterialTableResult(rank)
59
-
60
- when "ET"
61
- tableName, result, number = getEmotionTableResult
62
-
63
- when "NT"
64
- tableName, result, number = getNameTableResult
65
-
66
- when "KT"
67
- tableName, result, number = getKyoukaiTableResult
68
-
69
- else
70
- debug("eval_game_system_specific_command commandNOT matched -> command:", command)
71
- return ""
72
- end
73
-
74
- if result.empty?
75
- return ""
76
- end
77
-
78
- text = "#{tableName}(#{number}):#{result}"
79
- return text
80
- end
81
-
82
- def getReimonCompensationTableResult
83
- tableName = "영문소비의 댓가표"
84
-
85
- table = [
86
- '사신화:물리법칙을 너무 초월한 대가로, 영혼이 왜곡되어, PC는 즉시 아라미타마로 변모한다. 아라미타마화한 PC는, 어딘가로 떠나간다.',
87
- '존재소멸:아라미타마화를 최후의 힘으로 억누른다. 하지만 그 결과, PC의 영혼은 불타버려, 이 세계에서 소멸한다. 그 PC는 [상태변화: 사망]이 되어, 시체도 남지 않는다.',
88
- '사망:영혼의 왜곡을 어떻게든 막지만, 영혼이 붕괴한다. PC는 [상태변화: 사망]이 되나 유체는 남는다.',
89
- '영혼반괴:영혼의 왜곡을 막아냈지만, 영혼 자체에 치명적인 부상을 입어, 전신에 장해가 남는다. 거기에 동반하여 영문도 소실해, 일반인으로 돌아간다.',
90
- '기억소멸:기적적으로, 영혼의 마모에 의한 신체적 악영향을 피한다. 시간을 두는 것으로 영문도 회복되나, 정신적인 영향을 받아, 모든 기억을 잃는다.',
91
- '영향없음:기적적으로, 영혼의 마모에 의한 악영향을 완전히 피하고, 또한 영문의 회복도 빠를 것으로 보인다. 육체나 정신 모두, 딱히 영향은 없다.',
92
- ]
93
- result, number = get_table_by_1d6(table)
94
-
95
- return tableName, result, number
96
- end
97
-
98
- def getEmotionTableResult
99
- tableName = "감정표"
100
-
101
- table = [
102
- [11, '운명/그 캐릭터에게, 운명적, 또는 숙명적인 것을 느끼고 있다.'],
103
- [12, '운명/그 캐릭터에게, 운명적, 또는 숙명적인 것을 느끼고 있다.'],
104
- [13, '가족/그 캐릭터에게, 가족같은 친근감을 품고 있다.'],
105
- [14, '가족/그 캐릭터에게, 가족같은 친근감을 품고 있다.'],
106
- [15, '악연/그 캐릭터에게, 악연을 느끼고 있다.'],
107
- [16, '악연/그 캐릭터에게, 악연을 느끼고 있다.'],
108
- [21, '사제/그 캐릭터와는, 마치 사제지간의 감정을 느끼고 있다. 누가 제자고 누가 스승인지, 플레이어 끼리(또는 GM과)상담해 결정한다.'],
109
- [22, '사제/그 캐릭터와는, 마치 사제지간의 감정을 느끼고 있다. 누가 제자고 누가 스승인지, 플레이어 끼리(또는 GM과)상담해 결정한다.'],
110
- [23, '호적수/그 캐릭터를, 호적수라 여기고 있다.'],
111
- [24, '호적수/그 캐릭터를, 호적수라 여기고 있다.'],
112
- [25, '친근감/그 캐릭터에게, 친근감을 품고 있다.'],
113
- [26, '친근감/그 캐릭터에게, 친근감을 품고 있다.'],
114
- [31, '성의/그 캐릭터에게, 성실함을 느끼고 있다.'],
115
- [32, '성의/그 캐릭터에게, 성실함을 느끼고 있다.'],
116
- [33, '우정/그 캐릭터에게, 우정을 품고 있다.'],
117
- [34, '우정/그 캐릭터에게, 우정을 품고 있다.'],
118
- [35, '존경/그 캐릭터에게, 존경을 품고 있다.'],
119
- [36, '존경/그 캐릭터에게, 존경을 품고 있다.'],
120
- [41, '비호/그 캐릭터에게, 비호의 감정을 품고 있다. 누가 보호자고 누가 피보호자인지, 플레이어 끼리(또는 GM과)상담해 결정한다.'],
121
- [42, '비호/그 캐릭터에게, 비호의 감정을 품고 있다. 누가 보호자고 누가 피보호자인지, 플레이어 끼리(또는 GM과)상담해 결정한다.'],
122
- [43, '호감/그 캐릭터에게, 호감을 품고 있다.'],
123
- [44, '호감/그 캐릭터에게, 호감을 품고 있다.'],
124
- [45, '흥미/그 캐릭터에게, 흥미를 품고 있다.'],
125
- [46, '흥미/그 캐릭터에게, 흥미를 품고 있다.'],
126
- [51, '감명/그 캐릭터에게, 감명을 느끼고 있다.'],
127
- [52, '감명/그 캐릭터에게, 감명을 느끼고 있다.'],
128
- [53, '외경/그 캐릭터를 두려워하고 있다.'],
129
- [54, '외경/그 캐릭터를 두려워하고 있다.'],
130
- [55, '마음에 듬/그 캐릭터를 마음에 들어한다.'],
131
- [56, '마음에 듬/그 캐릭터를 마음에 들어한다.'],
132
- [61, '애정/그 캐릭터에게 애정, 또는 거기에 가까운 집착심을 품고 있다.'],
133
- [62, '애정/그 캐릭터에게 애정, 또는 거기에 가까운 집착심을 품고 있다.'],
134
- [63, '신뢰/그 캐릭터에게 신뢰를 느끼고 있다.'],
135
- [64, '신뢰/그 캐릭터에게 신뢰를 느끼고 있다.'],
136
- [65, '*PC의 임의/플레이어, 또는 GM이 설정한 임의의 감정을 품고 있다.'],
137
- [66, '*PC의 임의/플레이어, 또는 GM이 설정한 임의의 감정을 품고 있다.'],
138
- ]
139
-
140
- number = @randomizer.roll_d66(D66SortType::NO_SORT)
141
-
142
- result = get_table_by_number(number, table)
143
-
144
- return tableName, result, number
145
- end
146
-
147
- def getNameTableResult
148
- tableName = "전기 성씨・이름 결정표"
149
-
150
- table = [
151
- [11, '미츠루기(御剣) 리쿠/린'],
152
- [12, '시시우치(獅子内) 야마토/카에데'],
153
- [13, '하쿠긴(白銀) 하야토/사쿠라'],
154
- [14, '타케노우치(竹内) 마코토/하루카'],
155
- [15, '코다치(古太刀) 다이치/미사'],
156
- [16, '쿠가(空閑) 슌/마오'],
157
- [21, '오니가타(鬼形) 료/마이'],
158
- [22, '미칸나기(御巫) 타쿠미/나나미'],
159
- [23, '고마도우(護摩堂) 히토시/치히로'],
160
- [24, '류엔(龍円) 타쿠마/아카네'],
161
- [25, '카가미베(鏡部) 쿄우/아스카'],
162
- [26, '이누가미(犬神) 코우/시오리'],
163
- [31, '메이게츠인(明月院) 아오이/유이'],
164
- [32, '도우메키(百目鬼) 렌야/모에'],
165
- [33, '오소가미(怨神) 타츠야/아야카'],
166
- [34, '아라라기(蘭) 류노스케/아즈사'],
167
- [35, '타마키(珠輝) 아키라/히토미'],
168
- [36, '간류(眼龍) 케이/사오리'],
169
- [41, '텟포즈카(鉄砲塚) 마사토/사라'],
170
- [42, '오리가미(檻神) 나오야/야요이'],
171
- [43, '후지와라(不死原) 쥰/치아키'],
172
- [44, '쿠로우자(九朗座) 무사시/하루나'],
173
- [45, '츠치미카도(土御門) 쿄스케/스이'],
174
- [46, '이자요이(十六夜) 케이지/후타바'],
175
- [51, '텐포우린(転法輪) 히로/레나'],
176
- [52, '시교우(執行) 히비키/사유리'],
177
- [53, '호우리(祝) 료타로/히나'],
178
- [54, '코우소(神尊) 토모/시온'],
179
- [55, '아시야(芦屋) 타카유키/카스미'],
180
- [56, '나나샤(七社) 카즈키/후카'],
181
- [61, '키바(騎馬) 테츠야/시노'],
182
- [62, '토우마(当麻) 켄/사야'],
183
- [63, '키츠네즈카(狐塚) 호쿠토/마야'],
184
- [64, '텐진바야시(天神林) 소라/아키라'],
185
- [65, '메아라시(明嵐) 야쿠모/오토하'],
186
- [66, '쿠사카베(草壁) 다이고/아야'],
187
- ]
188
-
189
- number = @randomizer.roll_d66(D66SortType::NO_SORT)
190
-
191
- result = get_table_by_number(number, table)
192
-
193
- return tableName, result, number
194
- end
195
-
196
- def getKyoukaiTableResult
197
- tableName = "마경임계표"
198
-
199
- table = [
200
- [11, "시공의 비틀림\n현재 위치의 시공이 비틀려, PC전원은 즉시 [침입 에리어]로 돌아간다."],
201
- [12, "시공의 비틀림\n현재 위치의 시공이 비틀려, PC전원은 즉시 [침입 에리어]로 돌아간다."],
202
- [13, "강적등장\n갑자기, 〈재앙신〉화한 [모노노케]가 출현한다. GM은 PC의 [세계간섭LV]의 평균+3의 [LV]을 가진 임의의 [모노노케]를 1체 골라, 임의의 [탐색 에리어]에 배치. 거기서는 [우회]불가로 [전투]가 발생한다."],
203
- [14, "강적등장\n갑자기, 〈재앙신〉화한 [모노노케]가 출현한다. GM은 PC의 [세계간섭LV]의 평균+3의 [LV]을 가진 임의의 [모노노케]를 1체 골라, 임의의 [탐색 에리어]에 배치. 거기서는 [우회]불가로 [전투]가 발생한다."],
204
- [15, "그림자의 손\n장기로 형성된 무수한 손이, PC들을 붙잡으려고 한다. PC전원은 [효과종류: 마법공격/거리: 전투지대/대상: 전투지대/달성치: 20+PC의 [세계간섭LV]의 평균/마법 데미지: 20×PC의 [세계간섭LV]의 평균/저항[반감]]을 받는다."],
205
- [16, "그림자의 손\n장기로 형성된 무수한 손이, PC들을 붙잡으려고 한다. PC전원은 [효과종류: 마법공격/거리: 전투지대/대상: 전투지대/달성치: 20+PC의 [세계간섭LV]의 평균/마법 데미지: 20×PC의 [세계간섭LV]의 평균/저항[반감]]을 받는다."],
206
- [21, "무수한 마안\n공간 전체게 무시무시한 마안이 출현한다. PC전원은 [대휴식]할 때까지 [상태변화: 암흑·고통]이 된다."],
207
- [22, "무수한 마안\n공간 전체게 무시무시한 마안이 출현한다. PC전원은 [대휴식]할 때까지 [상태변화: 암흑·고통]이 된다."],
208
- [23, "공간붕괴\n갑자기, 마경의 공간이 붕괴한다. PC전원은 [효과종류: 물리공격/거리: 전투지대/대상: 전투지대/달성치: 30+PC의 [세계간섭LV]의 평균/물리 데미지: 30×PC의 [세계간섭LV]의 평균]을 받는다."],
209
- [24, "공간붕괴\n갑자기, 마경의 공간이 붕괴한다. PC전원은 [효과종류: 물리공격/거리: 전투지대/대상: 전투지대/달성치: 30+PC의 [세계간섭LV]의 평균/물리 데미지: 30×PC의 [세계간섭LV]의 평균]을 받는다."],
210
- [25, "방어구 부식\n이질적인 안개가 나타나, 방어구를 부식시킨다. PC전원은, [소지·장비]중인 임의의 [아이템: 방어구]를 1개 잃는다."],
211
- [26, "방어구 부식\n이질적인 안개가 나타나, 방어구를 부식시킨다. PC전원은, [소지·장비]중인 임의의 [아이템: 방어구]를 1개 잃는다."],
212
- [31, "소재소실\n주변에서 수상한 빛이 떨어져, 소지 중인 [소재]를 소실시킨다. PC 전원이 [소지]중인 [소재]가 전부 소멸한다."],
213
- [32, "소재소실\n주변에서 수상한 빛이 떨어져, 소지 중인 [소재]를 소실시킨다. PC 전원이 [소지]중인 [소재]가 전부 소멸한다."],
214
- [33, "없음\n딱히 아무 일도 일어나지 않는다."],
215
- [34, "없음\n딱히 아무 일도 일어나지 않는다."],
216
- [35, "모노노케 강습\n갑자기, 〈재앙신〉화한 [모노노케]가 출현해, PC들을 덮친다. GM은 PC의 [세계간섭LV]의 평균+2의 [LV]을 가진 임의의 [모노노케]를 2체 골라, PC의 앞에 출현시키고, 즉시 [전투]를 개시한다."],
217
- [36, "모노노케 강습\n갑자기, 〈재앙신〉화한 [모노노케]가 출현해, PC들을 덮친다. GM은 PC의 [세계간섭LV]의 평균+2의 [LV]을 가진 임의의 [모노노케]를 2체 골라, PC의 앞에 출현시키고, 즉시 [전투]를 개시한다."],
218
- [41, "휴식방해\nPC가 휴식하려고 할 때마다, 다양한 공간에서 촉수나 독충 등이 출현해 덮쳐든다. PC들은 이후, [마경토벌]이 종료될 때까지 [대휴식]을 할 수 없다."],
219
- [42, "휴식방해\nPC가 휴식하려고 할 때마다, 다양한 공간에서 촉수나 독충 등이 출현해 덮쳐든다. PC들은 이후, [마경토벌]이 종료될 때까지 [대휴식]을 할 수 없다."],
220
- [43, "용맥파괴\n영력이 폭주해 공간이 일그러져, [영력]이 어그러진다. PC전원은 즉시 [영력]을 모두 다시 굴린다."],
221
- [44, "용맥파괴\n영력이 폭주해 공간이 일그러져, [영력]이 어그러진다. PC전원은 즉시 [영력]을 모두 다시 굴린다."],
222
- [45, "고유시간정지\nPC들의 육체의 일부가 잿빛으로 변하고, 움직일 수 없게 된다. PC 전원은, [타이밍: 준비·방어·특수]에서 1개 골라, 이후 그 [타이밍]을 소비할 수 없게 된다."],
223
- [46, "고유시간정지\nPC들의 육체의 일부가 잿빛으로 변하고, 움직일 수 없게 된다. PC 전원은, [타이밍: 준비·방어·특수]에서 1개 골라, 이후 그 [타이밍]을 소비할 수 없게 된다."],
224
- [51, "용맥불순\n영력이 갑자기 고갈되어, [영력]의 순환에 악영향이 발생한다. PC전원은 이후, [마경토벌]이 종료될 때까지 [영력조작]을 할 수 없다."],
225
- [52, "용맥불순\n영력이 갑자기 고갈되어, [영력]의 순환에 악영향이 발생한다. PC전원은 이후, [마경토벌]이 종료될 때까지 [영력조작]을 할 수 없다."],
226
- [53, "술식봉인\n주변의 공기가 변모해, 악영향이 일어난다. PC전원은 이후, 취득한 《탤런트》중, 사용하는 [코스트]가 가장 큰 것 1개가 [마경토벌]종료까지 사용불능이 된다. [코스트: 없음]뿐일 경우, GM이 임의로 1개 결정한다."],
227
- [54, "술식봉인\n주변의 공기가 변모해, 악영향이 일어난다. PC전원은 이후, 취득한 《탤런트》중, 사용하는 [코스트]가 가장 큰 것 1개가 [마경토벌]종료까지 사용불능이 된다. [코스트: 없음]뿐일 경우, GM이 임의로 1개 결정한다."],
228
- [55, "장식품 소멸\n주변이 푸른 빛으로 감싸이고, 어째선지 PC들의 장식품이 사라진다. PC전원은, [소지·장비]중인 [아이템: 장식]을 모두 잃는다.。"],
229
- [56, "장식품 소멸\n주변이 푸른 빛으로 감싸이고, 어째선지 PC들의 장식품이 사라진다. PC전원은, [소지·장비]중인 [아이템: 장식]을 모두 잃는다."],
230
- [61, "우자의 황금 소실\n주변이 붉은 빛으로 감싸이고, 어째선지 PC들의 [G]가 사라진다. PC 전원은, [소지금]이 [반감]한다."],
231
- [62, "우자의 황금 소실\n주변이 붉은 빛으로 감싸이고, 어째선지 PC들의 [G]가 사라진다. PC 전원은, [소지금]이 [반감]한다."],
232
- [63, "GM의 임의\n이 표 중에서 GM이 효과를 1개 골라 발생시킨다."],
233
- [64, "GM의 임의\n이 표 중에서 GM이 효과를 1개 골라 발생시킨다."],
234
- [65, "임계중복\n[마경임계]가 2번 발생한다. GM은 이 표를 2번 굴려, 효과를 각각 적용할 수 있다. 다시 「임계중복」이 발생한 경우, [GM의 임의] 1번으로 취급한다."],
235
- [66, "임계중복\n[마경임계]가 2번 발생한다. GM은 이 표를 2번 굴려, 효과를 각각 적용할 수 있다. 다시 「임계중복」이 발생한 경우, [GM의 임의] 1번으로 취급한다."],
236
- ]
237
-
238
- number = @randomizer.roll_d66(D66SortType::NO_SORT)
239
-
240
- result = get_table_by_number(number, table)
241
-
242
- return tableName, result, number
243
- end
244
-
245
- def getGetMaterialTableResult(rank)
246
- tableName = "획득 소재 차트"
247
- table = [
248
- '진홍의 ',
249
- '까끌까끌한 ',
250
- '비취의 ',
251
- '예리한 ',
252
- '황금의 ',
253
- '말랑말랑한 ',
254
- '은색의 ',
255
- '뾰족한 ',
256
- '순백의 ',
257
- '딱딱한 ',
258
- '칠흑의 ',
259
- '빛나는 ',
260
- '매끄러운 ',
261
- '탁한 ',
262
- '덥수룩한 ',
263
- '사악한 ',
264
- '끈적이는 ',
265
- '성스러운 ',
266
- '작열의 ',
267
- '불꽃의 ',
268
- '빙결의 ',
269
- '얼음의 ',
270
- '뜨거운 ',
271
- '바람의 ',
272
- '차가운 ',
273
- '번개의 ',
274
- '흙의 ',
275
- '환상의 ',
276
- '뼈형태의 ',
277
- '봉인의 ',
278
- '이빨형태의 ',
279
- '비늘형태의 ',
280
- '돌형태의 ',
281
- '보석형태의 ',
282
- '모피형태의 ',
283
- '깃털형태의 ',
284
- ]
285
-
286
- result, number = get_table_by_d66(table)
287
- result += "단편"
288
-
289
- effect, number2 = getMaterialEffect(rank)
290
- number = "#{number},#{number2}"
291
-
292
- price = getPrice(effect)
293
-
294
- result = "#{result}.#{effect}"
295
- result += ":#{price}" unless price.nil?
296
-
297
- return tableName, result, number
298
- end
299
-
300
- def getMaterialEffect(rank)
301
- number = @randomizer.roll_once(6)
302
-
303
- result = ""
304
- type = ""
305
- if number < 6
306
- result, number2 = getMaterialEffectNomal(rank)
307
- type = "자주 발견되는 소재"
308
- else
309
- result, number2 = getMaterialEffectRare()
310
- type = "드문 소재"
311
- end
312
-
313
- result = "#{type}:#{result}"
314
- number = "#{number},#{number2}"
315
-
316
- return result, number
317
- end
318
-
319
- def getMaterialEffectNomal(rank)
320
- table = [
321
- [13, '체력+n'],
322
- [16, '민첩+n'],
323
- [23, '지성+n'],
324
- [26, '정신+n'],
325
- [33, '행운+n'],
326
- [35, '물D+n'],
327
- [41, '마D+n'],
328
- [43, '행동+n'],
329
- [46, '생명+n×3'],
330
- [53, '장갑+n'],
331
- [56, '결계+n'],
332
- [63, '이동+n마스'],
333
- [66, '※PC의 임의'],
334
- ]
335
-
336
- number = @randomizer.roll_d66(D66SortType::NO_SORT)
337
-
338
- result = get_table_by_number(number, table)
339
- debug("getMaterialEffectNomal result", result)
340
-
341
- if result =~ /\+n/
342
- power, number2 = getMaterialEffectPower(rank)
343
-
344
- result = result.sub(/\+n/, "+#{power}")
345
- number = "#{number},#{number2}"
346
- end
347
-
348
- return result, number
34
+ @locale = :ko_kr
349
35
  end
350
36
 
351
- def getMaterialEffectPower(rank)
352
- table = [
353
- [4, [1, 1, 1, 2, 2, 3]],
354
- [8, [1, 1, 2, 2, 3, 3]],
355
- [9, [1, 2, 3, 3, 4, 5]],
356
- ]
357
-
358
- rank = 9 if rank > 9
359
- rankTable = get_table_by_number(rank, table)
360
- power, number = get_table_by_1d6(rankTable)
361
-
362
- return power, number
363
- end
364
-
365
- def getMaterialEffectRare()
366
- table = [[3, '**부여'],
367
- [5, '**반감'],
368
- [6, '※GM의 임의'],]
369
-
370
- number = @randomizer.roll_once(6)
371
- result = get_table_by_number(number, table)
372
- debug('getMaterialEffectRare result', result)
373
-
374
- if result =~ /\*\*/
375
- attribute, number2 = getAttribute()
376
- result = result.sub(/\*\*/, attribute.to_s)
377
- number = "#{number},#{number2}"
378
- end
379
-
380
- return result, number
381
- end
382
-
383
- def getAttribute()
384
- table = [
385
- [21, '[화염]'],
386
- [33, '[냉기]'],
387
- [43, '[전격]'],
388
- [53, '[풍압]'],
389
- [56, '[환각]'],
390
- [62, '[마독]'],
391
- [64, '[자력]'],
392
- [66, '[섬광]'],
393
- ]
394
-
395
- number = @randomizer.roll_d66(D66SortType::NO_SORT)
396
-
397
- result = get_table_by_number(number, table)
398
-
399
- return result, number
400
- end
401
-
402
- def getPrice(effect)
403
- power = 0
404
-
405
- case effect
406
- when /\+(\d+)/
407
- power = Regexp.last_match(1).to_i
408
- when /부여/
409
- power = 3
410
- when /반감/
411
- power = 4
412
- else
413
- power = 0
414
- end
415
-
416
- table = [nil,
417
- '500G(효과치:1)',
418
- '1000G(효과치:2)',
419
- '1500G(효과치:3)',
420
- '2000G(효과치:4)',
421
- '3000G(효과치:5)',]
422
- price = table[power]
423
-
424
- return price
425
- end
37
+ TABLES = translate_tables(:ko_kr).freeze
426
38
  end
427
39
  end
428
40
  end