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
@@ -18,10 +18,11 @@ module BCDice
18
18
 
19
19
  # ダイスボットの使い方
20
20
  HELP_MESSAGE = <<~MESSAGETEXT
21
- ・判定
22
- GR+n>=X:「+n」で判定値を指定、「X」で目標値を指定。
21
+ ・判定 GR+n#f>=X (+n:判定値、#f:不安定による自動失敗基準値、X:目標値)
23
22
  ・部位決定チャート:HIT
24
- ・ダメージチャート:xDCyCDC/EDC/FDC/ADC/LDC)
23
+ ・ダメージ+部位決定:GAHnn:火力)
24
+ ・ダメージチャート:xDCy(CDC/EDC/FDC/ADC/LDC )
25
+ ・ダメージチャートver2:xDTy(CDT/EDT/FDT/ADT/LDT)
25
26
   xは C:コックピット、E:エンジン、F:フレーム、A:アーム、L:レッグ
26
27
   yはダメージ値
27
28
  各種表
@@ -41,7 +42,8 @@ module BCDice
41
42
  def eval_game_system_specific_command(command)
42
43
  roll_tables(command, TABLES) ||
43
44
  roll_gr(command) ||
44
- roll_damage_chart(command)
45
+ roll_damage_chart(command) ||
46
+ roll_attack_hit(command)
45
47
  end
46
48
 
47
49
  private
@@ -51,13 +53,14 @@ module BCDice
51
53
  # @param command [String]
52
54
  # @return [String, nil]
53
55
  def roll_gr(command)
54
- m = /^GR([+-]\d+)?>=(\d+)$/i.match(command)
55
- unless m
56
- return nil
57
- end
56
+ parser = CommandParser.new("GR")
57
+ cmd = parser.parse(command)
58
+ return nil unless cmd
59
+ return nil if cmd.critical
58
60
 
59
- modify_number = m[1].to_i
60
- target_number = m[2].to_i
61
+ modify_number = cmd.modify_number || 0
62
+ auto_failure_number = cmd.fumble || 1
63
+ target_number = cmd.target_number
61
64
 
62
65
  dice = @randomizer.roll_once(10)
63
66
  total = dice + modify_number
@@ -65,57 +68,72 @@ module BCDice
65
68
  result =
66
69
  if dice == 1
67
70
  "ファンブル"
71
+ elsif dice <= auto_failure_number # 公式FAQより、ファンブルと自動失敗を区別する可能性があるので分岐
72
+ "自動失敗"
68
73
  elsif dice == 10
69
74
  "クリティカル"
70
- elsif total >= target_number
75
+ elsif target_number && total >= target_number
71
76
  "成功"
72
- else
77
+ elsif target_number
73
78
  "失敗"
74
79
  end
75
80
 
76
81
  formated_modifier = Format.modifier(modify_number)
82
+ formated_auto_failure = "##{auto_failure_number}" if auto_failure_number >= 2
83
+ format_target = ">=#{target_number}" if target_number
84
+
77
85
  sequence = [
78
- "(1D10#{formated_modifier}>=#{target_number})",
86
+ "(1D10#{formated_modifier}#{formated_auto_failure}#{format_target})",
79
87
  "#{dice}[#{dice}]#{formated_modifier}",
80
88
  total.to_s,
81
89
  result
82
90
  ]
83
91
 
84
- return sequence.join(" > ")
92
+ return sequence.compact.join(" > ")
85
93
  end
86
94
 
87
- # 部位ダメージチャート
95
+ # ダメージ算出+部位決定チャート
88
96
  #
89
97
  # @param command [String]
90
98
  # @return [String, nil]
91
- def roll_damage_chart(command)
92
- m = /^(\wDC)(\d+)$/i.match(command)
93
- unless m
94
- return nil
95
- end
96
-
97
- part = m[1]
98
- damage = clamp(m[2].to_i, 1, 10)
99
- index = damage - 1
99
+ def roll_attack_hit(command)
100
+ m = /^GHA([-+\d]+)$/i.match(command)
101
+ return nil unless m
100
102
 
101
- chart = DAMAGE_CHARTS[part]
102
- unless chart
103
- return nil
103
+ modifier = ArithmeticEvaluator.eval(m[1])
104
+ attack = @randomizer.roll_once(10)
105
+ total = attack + modifier
106
+ hit_text = "#{total}(ダメージを受けない)"
107
+ if total > 0
108
+ hit = TABLES["HIT"].roll(@randomizer)
109
+ hit_dice = ", HIT[#{hit.value}]"
110
+ hit_text = "#{hit.body}に #{total} -【部位装甲】"
104
111
  end
105
112
 
106
- chosen = chart[:table][index]
113
+ formated_modifier = Format.modifier(modifier)
114
+ sequence = [
115
+ "(1D10#{formated_modifier})",
116
+ "#{attack}[#{attack}]#{formated_modifier}#{hit_dice}",
117
+ hit_text
118
+ ]
107
119
 
108
- return "#{chart[:name]}(#{damage})#{chosen}"
120
+ return sequence.join(" > ")
109
121
  end
110
122
 
111
- def clamp(i, min, max)
112
- if i < min
113
- min
114
- elsif i > max
115
- max
116
- else
117
- i
118
- end
123
+ # 部位ダメージチャート
124
+ #
125
+ # @param command [String]
126
+ # @return [String, nil]
127
+ def roll_damage_chart(command)
128
+ m = /^([CEFAL]D[CT])([-+\d]+)$/i.match(command)
129
+ return nil unless m
130
+
131
+ chart = DAMAGE_CHARTS[m[1]]
132
+ damage = ArithmeticEvaluator.eval(m[2]).clamp(0, 10)
133
+ return "ダメージを受けない" if damage <= 0
134
+
135
+ result = chart[:table][damage - 1]
136
+ return "#{chart[:name]}(#{damage}) > #{result}"
119
137
  end
120
138
 
121
139
  DAMAGE_CHARTS = {
@@ -193,9 +211,83 @@ module BCDice
193
211
  "大破(跛足):以後、【移動力】-2。この部位の【部位装甲】が0になる。[弱体1]を受ける。",
194
212
  "修復不能(破壊):ダメージを受けた側のレッグが[修復不能]となる。【移動力】-2。[弱体2]を受ける。",
195
213
  ]
214
+ },
215
+ "CDT" => {
216
+ name: "部位ダメージチャートv2: コックピット",
217
+ table: [
218
+ "アーマー損傷(小破/弱体0/装甲ダメージ1)装甲に軽いひび割れが走る。",
219
+ "視界不良(小破/弱体0/装甲ダメージ1)モニターやハッチの歪み等により、視界を大きく遮られる。以後、【視認性】-1。",
220
+ "強震(小破/弱体0/装甲ダメージ1)大きく揺さぶられる。キミは【身体】10 の判定を行なう。失敗した場合、次のターンを失う。",
221
+ "貫通!(小破/弱体0/装甲ダメージ1)パイロットに被害が!キミはHPダメージ(1d10-【身体】)を受ける。",
222
+ "計器損傷(中破/弱体1/装甲ダメージ1)コンソールの一部が停止する。",
223
+ "制御不能(中破/弱体1/装甲ダメージ1)コントロールが効かなくなる。キミは次のターンを失う。",
224
+ "貫通!(中破/弱体1/装甲ダメージ1)パイロットに被害が!キミはHPダメージ(1d10-【身体】)を受ける。",
225
+ "故障(大破/弱体1/装甲ダメージ2)コックピットが完全にいかれる。キミは次のラウンド終了時まで、あらゆる判定に自動的にファンブルする。",
226
+ "貫通!(大破/弱体1/装甲ダメージ2)パイロットに被害が!キミはHPダメージ(1d10+3-【身体】)を受ける。",
227
+ "破壊(修復不能/弱体2/装甲ダメージ3)コックピットが「修復不能」となる。キミは2d10-【身体】点のHPダメージを受ける。ガラコはすべての機能を停止する。コックピットのハッチが自動的に開く。",
228
+ ]
229
+ },
230
+ "EDT" => {
231
+ name: "部位ダメージチャートv2: エンジン",
232
+ table: [
233
+ "アーマー損傷(小破/弱体0/装甲ダメージ1)装甲に軽いひび割れが走る。",
234
+ "アーマー損傷(小破/弱体0/装甲ダメージ1)装甲に軽いひび割れが走る。",
235
+ "燃料漏れ(小破/弱体0/装甲ダメージ1)タンクから燃料が漏れる。燃料-1。",
236
+ "燃料漏れ(小破/弱体0/装甲ダメージ1)タンクから燃料が漏れる。燃料-2。",
237
+ "エンジン不調(中破/弱体1/装甲ダメージ1)エンジンの調子が安定しない。",
238
+ "オーバーヒート(中破/弱体1/装甲ダメージ1)オーバーヒートする。次のターンの終了時まで、移動と攻撃を行えない。",
239
+ "エンジン不調(中破/弱体1/装甲ダメージ1)なんだか調子悪い。キミは次のターンを失う。",
240
+ "燃料漏れ(大破/弱体1/装甲ダメージ2)タンクから燃料が漏れる。燃料-3。",
241
+ "貫通!(大破/弱体1/装甲ダメージ2)パイロットに被害が!キミはHPダメージ(1d10+3-【身体】)を受ける。",
242
+ "エンジン停止(修復不能/弱体2/装甲ダメージ3)エンジンが停止する。ガラコはすべての機能を停止する。コックピットのハッチが自動的に開く。【操作性】10の判定を行なうこと。失敗するとエンジンが爆発する。その場合、すべての部位が[修復不能]となり、キミは2d10-【身体】点のHPダメージを受ける",
243
+ ]
244
+ },
245
+ "FDT" => {
246
+ name: "部位ダメージチャートv2: フレーム",
247
+ table: [
248
+ "アーマー損傷 (小破 /0/装甲ダメージ1)装甲に軽いひび割れが走る。",
249
+ "スクラッチ!(小破/弱体0/装甲ダメージ1)フレームに醜い傷が残る。",
250
+ "歪み(小破/弱体0/装甲ダメージ1)フレームが歪み、ガラコの動きを阻害し始める。【移動力】-1。",
251
+ "ハードポイント損傷(小破/弱体0/装甲ダメージ1)このフレームに装着している武器、及びオプションをすべて落とす。装着していた武器やオプションが外れかかる。キミは【身体】8の判定を行なう。失敗した場合、",
252
+ "放熱板損傷(中破/弱体1/装甲ダメージ1)熱を機体外に逃すことができなくなる。これはヤバい。",
253
+ "スタビライザー損傷(中破/弱体1/装甲ダメージ1)ターンを失う。機体のバランス調整装置が故障する。【身体】10の判定を行なうこと。失敗した場合、キミは次の",
254
+ "貫通!(中破/弱体1/装甲ダメージ1)パイロットに被害が!キミはHPダメージ(1d10-【身体】)を受ける。",
255
+ "停止(大破/弱体1/装甲ダメージ2)フレームが動かない。キミは次のターンを失う。",
256
+ "ハードポイント破壊(大破/弱体1/装甲ダメージ2)武器やオプションを取り付ける箇所が破壊される。以後、このフレームに(スロットを消費して)装着している武器やオプションは使用できない(常時効果のあるものも、効果を失う)。",
257
+ "フレーム崩壊(修復不能/弱体2/装甲ダメージ3)フレームが「修復不能」となる。フレームの大部分が剥がれ落ち、ガラコの内部が晒される。以後キミに対して部位狙いが行われる場合、その命中判定に対する修正(『GHT』p21)は発生しない。",
258
+ ]
259
+ },
260
+ "ADT" => {
261
+ name: "部位ダメージチャートv2: アーム",
262
+ table: [
263
+ "アーマー損傷(小破/弱体0/装甲ダメージ1)装甲に軽いひび割れが走る。",
264
+ "武器落とし!(小破/弱体0/装甲ダメージ1)キミは【身体】8の判定を行う。失敗した場合、ダメージを受けた側のアームに(スロットを消費して)装着していた武器を落とす。",
265
+ "マニピュレータ損傷(小破/弱体0/装甲ダメージ1)指が何本かちぎれ飛んだ。【操作性】-1。",
266
+ "機能停止(小破/弱体0/装甲ダメージ1)次のターンの終了時まで、このアームを使った攻撃はできない。",
267
+ "痙攣(中破/弱体1/装甲ダメージ1)アームの動きがぶれ始める。",
268
+ "武器落とし!(中破/弱体1/装甲ダメージ1)ダメージを受けた側のアームに(スロットを消費して)装着していた武器を落とす。",
269
+ "スピン(中破/弱体1/装甲ダメージ1)機体が大きく回転する。【身体】10の判定を行うこと。失敗した場合、[伏せ]状態となった上、次のターンを失う。",
270
+ "武器落とし!(大破/弱体1/装甲ダメージ2)ダメージを受けた側のアームに(スロットを消費して)装着していた武器を落とす。",
271
+ "ハードポイント破壊(大破/弱体1/装甲ダメージ2)している武器やオプションは使用できない(常時効果のあるものも、効果を失う)。武器やオプションを取り付ける箇所が破壊される。以後、このアームに(スロットを消費して)装着している武器やオプションは使用できない(常時効果のあるものも、効果を失う)。",
272
+ "破壊(修復不能/2/装甲ダメージ3)ダメージを受けた側のアームが「修復不能」となる。",
273
+ ]
274
+ },
275
+ "LDT" => {
276
+ name: "部位ダメージチャートv2: レッグ",
277
+ table: [
278
+ "アーマー損傷 (小破 /弱体0/装甲ダメージ1)装甲に軽いひび割れが走る。",
279
+ "よろめき (小破 /弱体0/装甲ダメージ1)次のターンの終了時まで、キミは移動できない。",
280
+ "スネア (小破 /弱体0/装甲ダメージ1)足元をすくわれる。【身体】8 の判定を行うこと。失敗した場合、キミは[伏せ]状態になる。",
281
+ "跛足 (小破 /弱体0/装甲ダメージ1)以後、【移動力】-1。",
282
+ "シャフト損傷 (中破 /弱体1/装甲ダメージ1)脚部の軸に歪みが生じる。",
283
+ "アクチュエータ損傷 (中破 /弱体1/装甲ダメージ1)脚部のアクチュエータに大きな損傷を受ける。【移動力】-1。",
284
+ "スピン (中破 /弱体1/装甲ダメージ1)機体が大きく回転する。【身体】10 の判定を行うこと。失敗した場合、[伏せ]状態となった上、次のターンを失う。",
285
+ "跛足 (大破 /弱体1/装甲ダメージ2)以後、【移動力】-2。",
286
+ "ハードポイント破壊 (大破 /弱体1/装甲ダメージ2)している武器やオプションは使用できない(常時効果のあるものも、効果を失う)。 武器やオプションを取り付ける箇所が破壊される。以後、このレッグに(スロットを消費して)装着している武器やオプションは使用できない(常時効果のあるものも、効果を失う)。",
287
+ "破壊 (修復不能 /弱体2/装甲ダメージ3)ダメージを受けた側のレッグが「修復不能」となる。【移動力】-2。",
288
+ ]
196
289
  }
197
290
  }.freeze
198
-
199
291
  TABLES = {
200
292
  "PNM" => DiceTable::Table.new(
201
293
  "名前表:ピグマー族(男)",
@@ -553,7 +645,7 @@ module BCDice
553
645
  )
554
646
  }.freeze
555
647
 
556
- register_prefix(['GR.*', '(C|E|F|A|L)DC\d+'] + TABLES.keys)
648
+ register_prefix('GR.*', '[CEFAL]D[CT][-+\d]+', 'GHA[-+\d]+', TABLES.keys)
557
649
  end
558
650
  end
559
651
  end
@@ -25,10 +25,10 @@ module BCDice
25
25
   例)DCSL7 DCEL22
26
26
  INFO_MESSAGE_TEXT
27
27
 
28
- register_prefix([
28
+ register_prefix(
29
29
  'GO(\-?\d+)(\/\d+)?(@\d+)?',
30
30
  'DC(SL|BL|IM|BR|RF|EL).+'
31
- ])
31
+ )
32
32
 
33
33
  def eval_game_system_specific_command(command)
34
34
  case command
@@ -23,7 +23,7 @@ module BCDice
23
23
   幸運の助けを自動処理します。(連撃増加値、闘技チットを表示抑制します)
24
24
  INFO_MESSAGE_TEXT
25
25
 
26
- register_prefix(['\d+G\d+.*', '\d+GA\d+.*', '\d+R6.*'])
26
+ register_prefix('\d+G\d+.*', '\d+GA\d+.*', '\d+R6.*')
27
27
 
28
28
  def initialize(command)
29
29
  super(command)
@@ -26,7 +26,7 @@ module BCDice
26
26
   例)GL
27
27
  MESSAGETEXT
28
28
 
29
- register_prefix(['GK(#\d+)?', 'GL'])
29
+ register_prefix('GK(#\d+)?', 'GL')
30
30
 
31
31
  def eval_game_system_specific_command(command)
32
32
  output = nil
@@ -41,7 +41,7 @@ module BCDice
41
41
  MESSAGETEXT
42
42
 
43
43
  # 因果点は共有リソースなのでMCPIはシークレットダイスを無効化
44
- register_prefix(['GS\(\d+\)', 'GS.*', '^MCPI.*\$\d+$', 'DB\d+'])
44
+ register_prefix('GS\(\d+\)', 'GS.*', '^MCPI.*\$\d+$', 'DB\d+')
45
45
 
46
46
  def initialize(command)
47
47
  super(command)
@@ -21,7 +21,7 @@ module BCDice
21
21
  あーしたてんきになーれ
22
22
  MESSAGETEXT
23
23
 
24
- register_prefix(['geta'])
24
+ register_prefix('geta')
25
25
 
26
26
  def initialize(command)
27
27
  super(command)
@@ -21,7 +21,7 @@ module BCDice
21
21
  例) G>=7 : 2D6して7以上なら成功
22
22
  MESSAGETEXT
23
23
 
24
- register_prefix(['G.*'])
24
+ register_prefix('G.*')
25
25
 
26
26
  def change_text(string)
27
27
  string = string.gsub(/^(S)?G/i) { "#{Regexp.last_match(1)}2D6" }
@@ -24,7 +24,7 @@ module BCDice
24
24
   組織表(OCT)、拠点表(BCT)、文化表(CCT)
25
25
  MESSAGETEXT
26
26
 
27
- register_prefix([
27
+ register_prefix(
28
28
  'MT',
29
29
  'PFT',
30
30
  'NFT',
@@ -35,13 +35,12 @@ module BCDice
35
35
  'OCT',
36
36
  'BCT',
37
37
  'CCT'
38
- ])
38
+ )
39
39
 
40
40
  def initialize(command)
41
41
  super(command)
42
42
 
43
43
  @sort_add_dice = true
44
- @enabled_d66 = true
45
44
  @d66_sort_type = D66SortType::NO_SORT
46
45
  @round_type = RoundType::FLOOR
47
46
  end
@@ -26,7 +26,7 @@ module BCDice
26
26
   修正を後ろに書くことも出来ます。
27
27
  INFO_MESSAGE_TEXT
28
28
 
29
- register_prefix(['(.DPT|.FT)(\+|\-)?\d*'])
29
+ register_prefix('(.DPT|.FT)(\+|\-)?\d*')
30
30
 
31
31
  def initialize(command)
32
32
  super(command)
@@ -26,7 +26,7 @@ module BCDice
26
26
   修正を後ろに書くことも出来ます。
27
27
  INFO_MESSAGE_TEXT
28
28
 
29
- register_prefix(['(.DPT|.FT)\d*'])
29
+ register_prefix('(.DPT|.FT)\d*')
30
30
 
31
31
  def eval_game_system_specific_command(command)
32
32
  string = command.upcase
@@ -52,7 +52,7 @@ module BCDice
52
52
  ・迷宮追加オプション表(RANDOP)
53
53
  INFO_MESSAGE_TEXT
54
54
 
55
- register_prefix([
55
+ register_prefix(
56
56
  'CRT',
57
57
  'HCRT',
58
58
  'FMB',
@@ -70,12 +70,11 @@ module BCDice
70
70
  'KHST',
71
71
  'RANDOP',
72
72
  'LOT(N|P)'
73
- ])
73
+ )
74
74
 
75
75
  def initialize(command)
76
76
  super(command)
77
77
 
78
- @enabled_d66 = true
79
78
  @d66_sort_type = D66SortType::NO_SORT
80
79
  end
81
80
 
@@ -21,14 +21,14 @@ module BCDice
21
21
  ・人型用 中段命中部位表 (SLH)/上段命中部位 (SLHU)/上段命中部位 (SLHD)
22
22
  MESSAGETEXT
23
23
 
24
- register_prefix(['SHK\d+.*', 'SLH', 'SLHU', 'SLHD'])
24
+ register_prefix('SHK\d+.*', 'SLH', 'SLHU', 'SLHD')
25
25
 
26
26
  def check_1D100(total, _dice_total, cmp_op, target)
27
27
  return '' if target == '?'
28
28
  return '' unless cmp_op == :<=
29
29
 
30
30
  result = getCheckResult(total, target)
31
- return "> #{result}"
31
+ return " > #{result}"
32
32
  end
33
33
 
34
34
  def getCheckResult(total, diff)
@@ -40,7 +40,6 @@ module BCDice
40
40
  def initialize(command)
41
41
  super(command)
42
42
 
43
- @enabled_d66 = true
44
43
  @d66_sort_type = D66SortType::ASC
45
44
  end
46
45
 
@@ -700,7 +699,7 @@ module BCDice
700
699
  ),
701
700
  }.freeze
702
701
 
703
- register_prefix(['R([A-DS]|\d+).*'] + TABLES.keys)
702
+ register_prefix('R([A-DS]|\d+).*', TABLES.keys)
704
703
  end
705
704
  end
706
705
  end
@@ -31,7 +31,7 @@ module BCDice
31
31
  例)Hourai : 仁義八徳は、【義】(奇数、奇数、偶数)
32
32
  INFO_MESSAGE_TEXT
33
33
 
34
- register_prefix(['ROL.*', 'MED\(\d+,\d+\)', 'RES\(\d+,\d+\)', 'INY.*', 'HTK.*', 'GOG.*'])
34
+ register_prefix('ROL.*', 'MED\(\d+,\d+\)', 'RES\(\d+,\d+\)', 'INY.*', 'HTK.*', 'GOG.*')
35
35
 
36
36
  # ゲームの名前
37
37
  # チャット欄表示名
@@ -46,7 +46,6 @@ module BCDice
46
46
  super(command)
47
47
 
48
48
  @sort_add_dice = true
49
- @enabled_d66 = true
50
49
  @d66_sort_type = D66SortType::ASC
51
50
  @round_type = RoundType::CEIL # 端数切り上げに設定
52
51
  end
@@ -497,7 +496,7 @@ module BCDice
497
496
  ),
498
497
  }.freeze
499
498
 
500
- register_prefix(['SA2?T\d*'] + TABLES.keys)
499
+ register_prefix('SA2?T\d*', TABLES.keys)
501
500
  end
502
501
  end
503
502
  end
@@ -32,9 +32,9 @@ module BCDice
32
32
  @sort_add_dice = true # ダイスのソート有
33
33
  end
34
34
 
35
- register_prefix([
35
+ register_prefix(
36
36
  '(\d+)?IL([1-6])?([1-6])?([1-6])?([1-6])?([1-6])?([1-6])?(P)?'
37
- ])
37
+ )
38
38
 
39
39
  def eval_game_system_specific_command(command)
40
40
  if command =~ /(\d+)?IL([1-6])?([1-6])?([1-6])?([1-6])?([1-6])?([1-6])?(P)?$/i
@@ -14,48 +14,34 @@ module BCDice
14
14
 
15
15
  # ダイスボットの使い方
16
16
  HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
17
- ・判定
18
- スペシャル/ファンブル/成功/失敗を判定
17
+ ・判定(スペシャル/ファンブル/成功/失敗を判定)
19
18
  ・各種表
20
- シーン表   ST
19
+ シーン表 ST
21
20
   本当は怖い現代日本シーン表 HJST/狂騒の二〇年代シーン表 MTST
22
21
   暗黒のヴィクトリアシーン表 DVST
23
- 形容表    DT
24
-  本体表 BT/部位表 PT
22
+ 形容表 DT/本体表 BT/部位表 PT
25
23
  感情表      FT
26
24
  職業表      JT
27
25
  バッドエンド表  BET
28
- ランダム特技決定表 RTT
29
- 指定特技(暴力)表  (TVT)
30
- 指定特技(情動)表  (TET)
31
- 指定特技(知覚)表  (TPT)
32
- 指定特技(技術)表  (TST)
33
- 指定特技(知識)  (TKT)
34
- 指定特技(怪異)表  (TMT)
35
- 会話ホラースケープ表(CHT)
36
- 街中ホラースケープ表(VHT)
37
- 不意訪問ホラースケープ表(IHT)
38
- 廃墟遭遇ホラースケープ表(RHT)
39
- 野外遭遇ホラースケープ表(MHT)
40
- 情報潜在ホラースケープ表(LHT)
41
- 遭遇表 都市 (ECT) 山林 (EMT) 海辺 (EAT)/反応表 RET
42
- 残業ホラースケープ表 OHT/残業電話表 OPT/残業シーン表 OWT
43
- 社名決定表1 CNT1/社名決定表2 CNT2/社名決定表3 CNT3
44
- 暫定整理番号作成表 IRN
26
+ ランダム分野表  RCT
27
+ ランダム特技表  RTTn(n:分野番号、省略可能)
28
+ 1暴力(TVT)、2情動(TET)、3知覚(TPT)
29
+ 4技術(TST)、5知識(TKT)、6怪異(TMT)
30
+ ホラースケープ表
31
+ 会話(CHT) /街中(VHT)  /不意訪問(IHT)
32
+ 廃墟遭遇(RHT)/野外遭遇(MHT)/情報潜在(LHT)
33
+ 遭遇表 都市(ECT)/山林(EMT)/海辺(EAT)/反応表 RET
34
+ 残業ホラースケープ表(OHT)  /残業電話表(OPT)/残業シーン表(OWT)
35
+ 社名決定表1(CNT1)/社名決定表2(CNT2)/社名決定表3(CNT3)
36
+ 暫定整理番号作成表(IRN)
45
37
  ・D66ダイスあり
46
38
  INFO_MESSAGE_TEXT
47
39
 
48
- register_prefix([
49
- 'ST', 'HJST', 'MTST', 'DVST', 'DT', 'BT', 'PT', 'FT', 'JT', 'BET', 'RTT', 'TVT', 'TET', 'TPT', 'TST', 'TKT', 'TMT',
50
- 'CHT', 'VHT', 'IHT', 'RHT', 'MHT', 'LHT', 'ECT', 'EMT', 'EAT', 'OPT', 'OHT', 'OWT', 'CNT1', 'CNT2', 'CNT3', 'RET', 'IRN'
51
- ])
52
-
53
40
  def initialize(command)
54
41
  super(command)
55
42
 
56
43
  @sort_add_dice = true
57
44
  @sort_barabara_dice = true
58
- @enabled_d66 = true
59
45
  @d66_sort_type = D66SortType::ASC
60
46
  end
61
47
 
@@ -63,713 +49,57 @@ module BCDice
63
49
  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
64
50
  return '' unless cmp_op == :>=
65
51
 
66
- if dice_total <= 2
67
- " ファンブル(判定失敗。山札から【狂気】を1枚獲得)"
68
- elsif dice_total >= 12
69
- " スペシャル(判定成功。【生命力】1点か【正気度】1点回復)"
70
- elsif target == "?"
71
- ""
72
- elsif total >= target
73
- " 成功"
74
- else
75
- " > 失敗"
52
+ result =
53
+ if dice_total <= 2
54
+ translate("Insane.fumble")
55
+ elsif dice_total >= 12
56
+ translate("Insane.special")
57
+ elsif target == "?"
58
+ ""
59
+ elsif total >= target
60
+ translate("success")
61
+ else
62
+ translate("failure")
63
+ end
64
+
65
+ if result.empty?
66
+ return ""
76
67
  end
68
+
69
+ return " > #{result}"
77
70
  end
78
71
 
79
72
  def eval_game_system_specific_command(command)
80
- output = '1'
81
- type = ""
82
- total_n = ""
83
-
84
73
  case command
85
- when 'ST'
86
- type = 'シーン表'
87
- output, total_n = get_scene_table
88
- when 'HJST'
89
- type = '本当は怖い現代日本シーン表'
90
- output, total_n = get_horror_scene_table
91
- when 'MTST'
92
- type = '狂騒の二〇年代シーン表'
93
- output, total_n = get_mania_scene_table
94
- when 'DVST'
95
- type = '暗黒のヴィクトリアシーン表'
96
- output, total_n = get_dark_scene_table
97
- when 'DT'
98
- type = '形容表'
99
- output, total_n = get_description_table
100
- when 'BT'
101
- type = '本体表'
102
- output, total_n = get_body_table
103
- when 'PT'
104
- type = '部位表'
105
- output, total_n = get_parts_table
106
- when 'FT'
107
- type = '感情表'
108
- output, total_n = get_fortunechange_table
109
- when 'JT'
110
- type = '職業表'
111
- output, total_n = get_job_table
112
74
  when 'BET'
113
- type = 'バッドエンド表'
75
+ type = translate("Insane.BET.name")
114
76
  output, total_n = get_badend_table
115
- when 'RTT'
116
- type = 'ランダム特技決定表'
117
- output, total_n = get_random_skill_table
118
- when 'TVT'
119
- type = '指定特技(暴力)表'
120
- output, total_n = get_violence_skill_table
121
- when 'TET'
122
- type = '指定特技(情動)表'
123
- output, total_n = get_emotion_skill_table
124
- when 'TPT'
125
- type = '指定特技(知覚)表'
126
- output, total_n = get_perception_skill_table
127
- when 'TST'
128
- type = '指定特技(技術)表'
129
- output, total_n = get_skill_skill_table
130
- when 'TKT'
131
- type = '指定特技(知識)表'
132
- output, total_n = get_knowledge_skill_table
133
- when 'TMT'
134
- type = '指定特技(怪異)表'
135
- output, total_n = get_mystery_skill_table
136
- when 'CHT'
137
- type = '会話ホラースケープ表'
138
- output, total_n = get_conversation_horror_table
139
- when 'VHT'
140
- type = '街中ホラースケープ表'
141
- output, total_n = get_ville_horror_table
142
- when 'IHT'
143
- type = '不意訪問ホラースケープ表'
144
- output, total_n = get_inattendu_horror_table
145
- when 'RHT'
146
- type = '廃墟遭遇ホラースケープ表'
147
- output, total_n = get_ruines_horror_table
148
- when 'MHT'
149
- type = ' 野外遭遇ホラースケープ表'
150
- output, total_n = get_Mlle_horror_table
151
- when 'LHT'
152
- type = '情報潜在ホラースケープ表 '
153
- output, total_n = get_latence_horror_table
154
- when 'ECT'
155
- type = '遭遇表・都市'
156
- output, total_n = get_city_table
157
- when 'EMT'
158
- type = '遭遇表・山林'
159
- output, total_n = get_mountainforest_table
160
- when 'EAT'
161
- type = '遭遇表・海辺'
162
- output, total_n = get_seaside_table
163
- when 'OHT'
164
- type = '残業ホラースケープ表 '
165
- output, total_n = get_overtime_horror_table
166
- when 'OPT'
167
- type = '残業電話表'
168
- output, total_n = get_overtimephone_table
169
- when 'OWT'
170
- type = '残業シーン表'
171
- output, total_n = get_overtimework_scene_table
172
- when 'CNT1'
173
- type = '社名決定表1'
174
- output, total_n = get_corporatenameone_table
175
- when 'CNT2'
176
- type = '社名決定表2'
177
- output, total_n = get_corporatenametwo_table
178
- when 'CNT3'
179
- type = '社名決定表3'
180
- output, total_n = get_corporatenamethree_table
181
- when 'RET'
182
- type = '反応表'
183
- output, total_n = get_reaction_scene_table
184
77
  when 'IRN'
185
- type = '暫定整理番号作成'
78
+ type = translate("Insane.IRN.name")
186
79
  output, total_n = get_interim_reference_number
80
+ else
81
+ return self.class::RTT.roll_command(@randomizer, command) || roll_tables(command, self.class::TABLES)
187
82
  end
188
83
 
189
84
  return "#{type}(#{total_n}) > #{output}"
190
85
  end
191
86
 
192
- # シーン表
193
- def get_scene_table
194
- table = [
195
- '血の匂いがあたりに充満している。事件か? 事故か? もしや、それは今も続いているのだろうか?',
196
- 'これは……夢か? もう終わったはずの過去が、記憶の中から蘇ってくる。',
197
- '眼下に広がる町並みを見下ろしている。なぜこんな高所に……?',
198
- '世界の終わりのような暗黒。暗闇の中、何者かの気配が蠢く……。',
199
- '穏やかな時間が過ぎていく。まるであんなことがなかったかのようだ。',
200
- '湿った土の匂い。濃密な気配が漂う森の中。鳥や虫の声、風にそよぐ木々の音が聞こえる。',
201
- '人通りの少ない住宅街。見知らぬ人々の住まう家々の中からは、定かではない人声や物音が漏れてくる……。',
202
- 'にわかに空を雲が覆う。強い雨が降り出す。人々は、軒を求めて、大慌てで駆け出していく。',
203
- '荒れ果てた廃墟、朽ちた生活の名残。かすかに聞こえるのは風か、波の音か、耳鳴りか。',
204
- '人ごみ。喧騒。けたたましい店内BGMに、調子っぱずれの笑い声。騒がしい繁華街の一角だが……?',
205
- '明るい光りに照らされて、ほっと一息。だが光が強いほどに、影もまた濃くなる……。',
206
- ]
207
-
208
- return get_table_by_2d6(table)
209
- end
210
-
211
- # 本当は怖い現代日本シーン表
212
- def get_horror_scene_table
213
- table = [
214
- '不意に辺りが暗くなる。停電か? 闇の中から、誰かがあなたを呼ぶ声が聞こえてくる。',
215
- 'ぴちょん。ぴちょん。ぴちょん。どこからか、水滴が落ちるような音が聞こえてくる。',
216
- '窓ガラスの前を通り過ぎたとき、不気味な何かが映り込む。目の錯覚……?',
217
- 'テレビからニュースの音が聞こえてくる。何やら近所で物騒な事件があったようだが……',
218
- '暗い道を一人歩いている。背後から、不気味な跫音が近づいてくるような気がするが……。',
219
- '誰だろう? ずっと視線を感じる。振り向いて見ても、そこにあるのは、いつも通りの光景なのだが……',
220
- '突如、携帯電話の音が鳴り響く。マナーモードにしておいたはずなのに……。一体、誰からだろう?',
221
- '茜さす夕暮れ。太陽は沈みかけ、空は血のように赤い。不安な気持ちが広がっていく……。',
222
- '美味しそうな香りが漂ってきて、急に空腹を感じる。今日は何を食べようかなぁ?',
223
- '甲高い泣き声が、響き渡る。猫や子供がどこかで泣いているのか? それとも……。',
224
- '寝苦しくて目を覚ます。何か悪夢を見ていたようだが……。あれ、意識はあるのに身体が動かない!',
225
- ]
226
-
227
- return get_table_by_2d6(table)
228
- end
229
-
230
- # 狂騒の二〇年代シーン表
231
- def get_mania_scene_table
232
- table = [
233
- '苔のこびりつく巨大な岩が並ぶ、川に浮かぶ島。何を祀っているのかも分からない祭壇があり、いわく言いがたい雰囲気を漂わせる。',
234
- 'もぐり酒場。看板もない地下の店は、街の男や酌婦たちで騒がしい。',
235
- '遺跡の中。誰が建てたとも知れぬ、非ユークリッド幾何学的な建築は、中を歩く者の正気を、徐々に蝕んでいく。',
236
- '大学図書館。四十万冊を超える蔵書の中には、冒涜的な魔道書も含まれているという。',
237
- '強い風にのって、どこからか磯の香りが漂ってくる。海は遠いはずだが……。',
238
- '多くの人でごったがえす街角。ここならば、何者が混じっていても、気付かれることはない。',
239
- '深い闇の中。その向こうには、名状しがたきなにものかが潜んでいそうだ。',
240
- '歴史ある新聞社。休むことなく発行し続けた、百年分におよぶ新聞が保管されている。',
241
- '古い墓地。捻れた木々の間に、古びて墓碑銘も読めぬような墓石が並ぶ。いくつかの墓石はなぜか傾いている。',
242
- '河岸に建つ工場跡。ずいぶん前に空き家になったらしく、建物は崩れかけている。どうやら浮浪者の住処になっているらしい。',
243
- '静かな室内。なにか、不穏な気配を感じるが……あれはなんだ? 窓に、窓に!',
244
- ]
245
-
246
- return get_table_by_2d6(table)
247
- end
248
-
249
- # 暗黒のヴィクトリアシーン表
250
- def get_dark_scene_table
251
- table = [
252
- '霊媒師を中心に円卓を取り囲む人々が、降霊会を行っている。薄暗い部屋の中に怪しげなエクトプラズムが漂い始める。',
253
- '労働者達の集うパブ。女給が運ぶエールやジンを、赤ら顔の男たちが飲み干している。',
254
- '血の香りの漂う場所。ここで何があったのだろうか……。',
255
- '売春宿の建ち並ぶ貧民街。軒先では娼婦たちが、客を待ち構えている。',
256
- '人々でごったがえす、騒がしい通り。様々な噂話が飛び交っている。東洋人を初めとした、外国人の姿も目立つ。',
257
- '霧深い街角。ガス灯の明かりだけが、石畳を照らし出している。',
258
- '静まり返った部屋の中。ここならば、何をしても余計な詮索はされないだろう。',
259
- '汽笛の響く波止場。あの船は、外国へと旅立つのだろうか。',
260
- '書物の溢れる場所。調べ物をするにはもってこいだが。',
261
- '貴族や資産階級の人々が集うパーティ。上品な微笑みの下では、どんな企みが進んでいるのだろうか。',
262
- '静かな湖のほとり。草むらでは野生の兎が飛びはねている。',
263
- ]
264
- return get_table_by_2d6(table)
265
- end
266
-
267
- # 形容表
268
- def get_description_table
269
- table = [
270
- [11, '青ざめた'],
271
- [12, '血をしたたらせた'],
272
- [13, 'うろこ状の'],
273
- [14, '冒涜的な'],
274
- [15, '円筒状の'],
275
- [16, '無限に増殖する'],
276
- [22, '不規則な'],
277
- [23, 'ガーガー鳴く'],
278
- [24, '無数の'],
279
- [25, '毛深い'],
280
- [26, '色彩のない'],
281
- [33, '伸縮する'],
282
- [34, 'みだらな'],
283
- [35, '膨れ上がった'],
284
- [36, '巨大な'],
285
- [44, '粘液まみれの'],
286
- [45, '絶えず変化する'],
287
- [46, '蟲まみれの'],
288
- [55, 'キチン質の'],
289
- [56, '「本体表を使用する」のような'],
290
- [66, '虹色に輝く'],
291
- ]
292
-
293
- return get_table_by_d66_swap(table)
294
- end
295
-
296
- # 本体表
297
- def get_body_table
298
- table = [
299
- [11, '人間'],
300
- [12, '犬'],
301
- [13, 'ネズミ'],
302
- [14, '幽鬼'],
303
- [15, 'なめくじ'],
304
- [16, '蟲'],
305
- [22, '顔'],
306
- [23, '猫'],
307
- [24, 'ミミズ'],
308
- [25, '牛'],
309
- [26, '鳥'],
310
- [33, '半魚人'],
311
- [34, '人造人間'],
312
- [35, '蛇'],
313
- [36, '老人'],
314
- [44, 'アメーバ'],
315
- [45, '女性'],
316
- [46, '機械'],
317
- [55, 'タコ'],
318
- [56, '「部位表」を使用する'],
319
- [66, '小人'],
320
- ]
321
-
322
- return get_table_by_d66_swap(table)
323
- end
324
-
325
- # 部位表
326
- def get_parts_table
327
- table = [
328
- [11, '胴体'],
329
- [12, '足'],
330
- [13, '腕'],
331
- [14, '髪の毛/たてがみ'],
332
- [15, '口'],
333
- [16, '乳房'],
334
- [22, '顔'],
335
- [23, '肌'],
336
- [24, '瞳'],
337
- [25, '尾'],
338
- [26, '触手'],
339
- [33, '鼻'],
340
- [34, '影'],
341
- [35, '牙'],
342
- [36, '骨'],
343
- [44, '宝石'],
344
- [45, '翼'],
345
- [46, '脳髄'],
346
- [55, '舌'],
347
- [56, '枝や葉'],
348
- [66, '内臓'],
349
- ]
350
-
351
- return get_table_by_d66_swap(table)
352
- end
353
-
354
- # 感情表
355
- def get_fortunechange_table
356
- table = [
357
- '共感(プラス)/不信(マイナス)',
358
- '友情(プラス)/怒り(マイナス)',
359
- '愛情(プラス)/妬み(マイナス)',
360
- '忠誠(プラス)/侮蔑(マイナス)',
361
- '憧憬(プラス)/劣等感(マイナス)',
362
- '狂信(プラス)/殺意(マイナス)',
363
- ]
364
-
365
- return get_table_by_1d6(table)
366
- end
367
-
368
- # 職業表
369
- def get_job_table
370
- table = [
371
- [11, '考古学者≪情景≫≪考古学≫'],
372
- [12, 'ギャング≪拷問≫≪怒り≫'],
373
- [13, '探偵≪第六感≫≪数学≫'],
374
- [14, '警察≪射撃≫≪追跡≫'],
375
- [15, '好事家≪芸術≫≪人類学≫'],
376
- [16, '医師≪切断≫≪医学≫'],
377
- [22, '教授 知識分野から好きなものを二つ'],
378
- [23, '聖職者≪恥じらい≫≪愛≫'],
379
- [24, '心理学者 情動分野から好きなものを二つ'],
380
- [25, '学生 知識分野と情動分野から好きなものを一つずつ'],
381
- [26, '記者≪驚き≫≪メディア≫'],
382
- [33, '技術者≪電子機器≫≪機械≫'],
383
- [34, '泥棒≪物陰≫≪罠≫'],
384
- [35, '芸能人≪悦び≫≪芸術≫'],
385
- [36, '作家≪憂い≫≪教養≫'],
386
- [44, '冒険家≪殴打≫≪乗物≫'],
387
- [45, '司書≪整理≫≪メディア≫'],
388
- [46, '料理人≪焼却≫≪味≫'],
389
- [55, 'ビジネスマン≪我慢≫≪効率≫'],
390
- [56, '夜の蝶≪笑い≫≪官能≫'],
391
- [66, '用心棒 好きな暴力×2'],
392
- ]
393
-
394
- return get_table_by_d66_swap(table)
395
- end
87
+ private
396
88
 
397
89
  # バッドエンド表
398
90
  def get_badend_table
399
91
  table = [
400
- 'あなたの周りに漆黒の闇が、異形の前肢が、無数の触手が集まってくる。彼らは、新たな仲間の誕生を祝福しているのだ。あなたは、もう怪異に怖がることはない。なぜなら、あなた自身が怪異となったからだ。以降、あなたは怪異のNPCとなって登場する。',
401
- lambda { return "牢獄のような、手術室のような薄暗い部屋に監禁される。そして、毎日のようにひどい拷問を受けることになった。何とか隙を見て逃げ出すことができたが……。#{get_random_skill_table_text_only}の特技が【恐怖心】になる。" },
402
- '間一髪のところを、謎の組織のエージェントに助けられる。「君は見所がある。どうだい? 我々と一緒にやってみないか」あなたは望むなら、忍者/魔法使い/ハンターとして怪異と戦うことができる。その場合、あなたは別のサイコロ・フィクションのキャラクターとして生まれ変わる。',
403
- '病院のベッドで目を覚ます。長い間、ひどい悪夢を見ていたような気がする。そのセッションの後遺症判定は、マイナス1の修正がつき、ファンブル値が1上昇する。',
404
- 'どこかの民家で目を覚ます。素敵な人物に助けられ、手厚い介護を受けたようだ。特にペナルティはなし。',
405
- '「危ない!」大いなる絶望が、あなたに襲いかかってくる。1D6マイナス1点のダメージを受ける。これによって【生命力】が0点になった場合、あなたは死亡する。ただし、あなたにプラスの【感情】を持つNPCがいた場合、そのNPCが、そのダメージを無効化してくれる。',
406
- '別の新たな怪事件に巻き込まれる。苦労のすえ、そちらは何とか無事解決! 特にペナルティはなし。',
407
- '大きな傷を負い、生死の境をさまよう。好きな特技で判定を行うこと。失敗すると死亡する。このとき、減少している【生命力】の分だけマイナスの修正がつく。',
408
- '目が覚めると見慣れない場所にいた。ここはどこだ? 私は誰だ? どうやら、恐怖のあまり、記憶を失ってしまったようだ。功績点があれば、それを1点失う。',
409
- lambda { return "目を覚ますと、そこはいつもの場所だった。しかし、どこか違和感を覚える。君たち以外、誰も事件のことを知らないようだ。死んだはずのあの人物も生きている。時間を旅したのか、ここは違う世界線か……? #{get_random_skill_table_text_only}の特技が【恐怖心】になる。" },
410
- '振り返ると、そこには圧倒的な「それ」が待ち構えていた。無慈悲な一撃が、あなたを襲い、あなたは死亡する。',
411
- ]
412
- return get_table_by_2d6(table)
413
- end
414
-
415
- # 指定特技ランダム決定表
416
- def get_random_skill_table
417
- skillTableFull = [
418
- ['暴力', ['焼却', '拷問', '緊縛', '脅す', '破壊', '殴打', '切断', '刺す', '射撃', '戦争', '埋葬']],
419
- ['情動', ['恋', '悦び', '憂い', '恥じらい', '笑い', '我慢', '驚き', '怒り', '恨み', '哀しみ', '愛']],
420
- ['知覚', ['痛み', '官能', '手触り', 'におい', '味', '物音', '情景', '追跡', '芸術', '第六感', '物陰']],
421
- ['技術', ['分解', '電子機器', '整理', '薬品', '効率', 'メディア', 'カメラ', '乗物', '機械', '罠', '兵器']],
422
- ['知識', ['物理学', '数学', '化学', '生物学', '医学', '教養', '人類学', '歴史', '民俗学', '考古学', '天文学']],
423
- ['怪異', ['時間', '混沌', '深海', '死', '霊魂', '魔術', '暗黒', '終末', '夢', '地底', '宇宙']],
424
- ]
425
-
426
- skillTable, total_n = get_table_by_1d6(skillTableFull)
427
- tableName, skillTable = *skillTable
428
- skill, total_n2 = get_table_by_2d6(skillTable)
429
- return "「#{tableName}」≪#{skill}≫", "#{total_n},#{total_n2}"
430
- end
431
-
432
- # 特技だけ抜きたい時用 あまりきれいでない
433
- def get_random_skill_table_text_only
434
- text, = get_random_skill_table
435
- return text
436
- end
437
-
438
- # 指定特技ランダム決定(暴力)
439
- def get_violence_skill_table
440
- table = [
441
- '焼却',
442
- '拷問',
443
- '緊縛',
444
- '脅す',
445
- '破壊',
446
- '殴打',
447
- '切断',
448
- '刺す',
449
- '射撃',
450
- '戦争',
451
- '埋葬',
452
- ]
453
- return get_table_by_2d6(table)
454
- end
455
-
456
- # 指定特技ランダム決定(情動)
457
- def get_emotion_skill_table
458
- table = [
459
- '恋',
460
- '悦び',
461
- '憂い',
462
- '恥じらい',
463
- '笑い',
464
- '我慢',
465
- '驚き',
466
- '怒り',
467
- '恨み',
468
- '哀しみ',
469
- '愛',
470
- ]
471
- return get_table_by_2d6(table)
472
- end
473
-
474
- # 指定特技ランダム決定(知覚)
475
- def get_perception_skill_table
476
- table = [
477
- '痛み',
478
- '官能',
479
- '手触り',
480
- 'におい',
481
- '味',
482
- '物音',
483
- '情景',
484
- '追跡',
485
- '芸術',
486
- '第六感',
487
- '物陰',
488
- ]
489
- return get_table_by_2d6(table)
490
- end
491
-
492
- # 指定特技ランダム決定(技術)
493
- def get_skill_skill_table
494
- table = [
495
- '分解',
496
- '電子機器',
497
- '整理',
498
- '薬品',
499
- '効率',
500
- 'メディア',
501
- 'カメラ',
502
- '乗物',
503
- '機械',
504
- '罠',
505
- '兵器',
506
- ]
507
- return get_table_by_2d6(table)
508
- end
509
-
510
- # 指定特技ランダム決定(知識)
511
- def get_knowledge_skill_table
512
- table = [
513
- '物理学',
514
- '数学',
515
- '化学',
516
- '生物学',
517
- '医学',
518
- '教養',
519
- '人類学',
520
- '歴史',
521
- '民俗学',
522
- '考古学',
523
- '天文学',
524
- ]
525
- return get_table_by_2d6(table)
526
- end
527
-
528
- # 指定特技ランダム決定(怪異)
529
- def get_mystery_skill_table
530
- table = [
531
- '時間',
532
- '混沌',
533
- '深海',
534
- '死',
535
- '霊魂',
536
- '魔術',
537
- '暗黒',
538
- '終末',
539
- '夢',
540
- '地底',
541
- '宇宙',
542
- ]
543
- return get_table_by_2d6(table)
544
- end
545
-
546
- # 会話ホラースケープ表
547
- def get_conversation_horror_table
548
- table = [
549
- "指定特技:死\n会話の最中、あなたはふと、相手の肩越しに目を向ける。なんの前触れもなく、遠くの建物の屋上から女が飛び降りた。声を上げる暇もなく、彼女は吸い込まれるように地面に叩きつけられる。距離があるにもかかわらず、女と目が合ってしまった。―それ以降、女の顔が脳裏にこびりついて、離れようとしない……。",
550
- "指定特技:殴打\n地面に横たわった相手を見ながら、あなたは冷や汗が背中に伝うのを感じていた。相手は倒れたまま、不自然に体をねじ曲げて、ぴくりとも動かない。じわじわと血溜まりが広がっていく……。――殺してしまった。動揺して瞬きしたとき、相手の身体は消えていた。血溜まりもなくなっている。あなたは茫然と立ちすくむ。幻覚だったのだろうか……?",
551
- "指定特技:電子機器\nあなたが電話で相手と話をしていると、不意に、相手が黙り込んだ。「……なんだあれ?」独り言のように言って、それから慌てたような声を出した。「こっち来る……こっち来る!うわっ!うわああああっ!助けて!助けて!!」それを最後に、電話はぶつりと切れる。かけ直すと話し中だ。ずっと。",
552
- "指定特技:物音\nあなたが電話で相手と話していると、ぶつぶつ言う声が聞こえてくる。混線だろうか?不思議に思って聞いているうちに、頭がぼんやりしてくる。ぶつぶつ、ぶつぶつ、ぶつぶつ、ぶつぶつ……。気が付くと、電話をもったままぼーっと立っていた。ただ、とても怖いことを言われたような気がしている。そもそも、あなたは誰と話をしていたんだろう?",
553
- "指定特技:拷問\n会話の最中、血の味を感じた。同時に、口の中にごろごろした違和感を覚える。相手が真っ青になってあなたの顔を指差す。どうしたのか訊ねようと口を開くと、ぽろりと何かが地面に落ちた。見下ろすと、血溜まりの中に白々と、あなたの歯が一本落ちていた。",
554
- "指定特技:人類学\n会話の最中、視界に違和感を覚えて、あなたは瞬きする。相手の顔が、変になっていた。引き延ばして、かき回したように、グロテスクに歪んでいる。えっ?と思ってよく見るが、歪みは変わらない。相手はまったく気付いていないようだ。きつく目を瞑ってから見直すと、ようやく歪みは消えた。君の心に一つの疑いが生まれる。目の前の相手は、本当に人間なのだろうか?",
555
- ]
556
- return get_table_by_1d6(table)
557
- end
558
-
559
- # 街中ホラースケープ表
560
- def get_ville_horror_table
561
- table = [
562
- "指定特技:乗物\nキキィーッ!激しいブレーキ音、そして鈍い音。はっとして振り返ると、止まった車と、その前に倒れている人が目に入った。交通事故だ!慌てて駆け寄り、被害者の顔を見た途端、あなたは凍り付いた。倒れているのは、あなただった。――えっ!?驚いて瞬きすると、路上のあなたも、車も消えていた。",
563
- "指定特技:情景\n通りすがりの家の屋根に誰かが立っている。あんなところで何を……?その誰かは踊りを踊っているように見えた。手足を振り回し、頭を激しく動かして、踊っている。尋常な様子ではない。狂ったように踊っている。見ているうちにものすごく不吉な気分になってきた。見たくないのに、どういうわけか、目を逸らすことができない。不吉な予感はどんどん強くなってくる……。",
564
- "指定特技:終末\nウゥゥゥゥゥゥゥゥ………… 街にサイレンが鳴り響く。どこで鳴っているのか、いつまで鳴っているのか。こんなに大きな音なのに、どうして誰も騒がないのだろう。不思議に思って歩いていると、道を向こうから歩いてくる人影がある。怪我をしているのか、よろめいて、今にも倒れそうになりながら、がくり、がくりと不自然な歩き方で近づいてくる。あれはいったい………?",
565
- "指定特技:脅す\n歩いていると、不意に静かになった。あたりを見渡すと、人も車も誰もいない。無人の街が、どこまでも広がっている。さっきまでたくさん人がいたのに……!?「おい!何やってるんだ!」突然怒鳴られてぎくりとする。振り返ると、作業着をきた男性がこっちへ走ってきていた。「馬鹿野郎!こんなところに来たら――」最後まで聞かないうちに、不意に音が戻ってきた。人と車が行き交う、元通りの街だ。今のは何だったんだ……?",
566
- "指定特技:混沌\n電柱の根元に、女性がうずくまっている。お腹を押さえて、苦しそうに顔を伏せている。「大丈夫ですか?」近づいて声をかけたあなたに、女性は頷いた。「はい――ありがとうございます。」そう言って顔を上げた女性の顔には、何もなかった。つるりとした剥き玉子のような皮膚が続いているだけだった。うわっ!?のけぞった途端、意識が遠ざかって、気がつくとあなたは電柱の根元にうずくまっていた。",
567
- "指定特技:笑い\n駅に着くと、やけに混雑している。人身事故で電車が止まっているようだ。ツイてないな。そう思っていると、改札付近の人ごみの中から、和服の女性が急ぎ足であなたのほうへ近づいてきた。女性は満面の笑みを浮かべていた。独りごとを言っているのか、口が動いている。すれ違いざまに、女性の声が耳に入った。「やってやった。やってやった。やってやった。ざまあみろ」えっ、と思って振り返るあなたを残して、女性は人ごみの中へ消えていった。",
568
- ]
569
-
570
- return get_table_by_1d6(table)
571
- end
572
-
573
- # 不意訪問ホラースケープ表
574
- def get_inattendu_horror_table
575
- table = [
576
- "指定特技:驚き\nバタバタバタッ!突然の物音に、あなたはぎょっとして振り仰ぐ。天井裏を何かが動き回っているようだ。動物が入り込んだのだろうか?それにしては大きい音だ。――まるで子供がめちゃめちゃに走り回っているような。物音は一瞬止まり、すぐに再開した。ドン!ドン!ドン!ドン!飛び跳ねるような音がするのは、ちょうどあなたの真上だ……。",
577
- "指定特技:宇宙\n窓から光が差し込む。窓に目を向けてみると、白く輝く巨大な飛行物体が浮かんでいた。魅せられたように見つめていると、鳥や飛行機とは思えないような、激しく不規則な動きで飛び回り始める。なんだろう、あれは?不思議に思っていると、背後から誰かが囁いた。「あれは………だよ」はっと気付くと、いつの間にか、まったく違う場所にいた。手のひらに何か埋まっているような硬い感触がある……。",
578
- "指定特技:におい\n奇妙な荷物が届いた。ガムテープでぐるぐる巻きにされた大きな段ボールだ。差出人名を書いた紙がはってあるが、滲んでしまって読めない。箱の中身は土だった。陶器のかけらや石ころが混ざった、変な臭いのする土が入っていた。わけがわからないので中身は捨てたが、それ以降なんだかツキが落ちている気がする……。",
579
- "指定特技:我慢\n壁の向こうから誰かが話している声が聞こえてくる。「……だから。こいつは……しないと」「そうね……わいそ……さなきゃ」ぼそぼそ、ぼそぼそと、陰気な調子で会話は続く。何を話しているのか、内容はよくわからないが、なんとなく自分のことを言われているようで薄気味が悪い。気になって壁に耳を当てたとき、はっきりした声が、壁の向こうからこう言った。「……ねえ、ちゃんと聞いてる?」",
580
- "指定特技:手触り\nぽたり。ぽたり。首筋に落ちた生暖かい水滴の感触に、あなたは眉を寄せた。気がつくと机の上に、赤い雫が落ちている。鉄臭いにおいが鼻を突く。ぽたり。ぽたり。ぽたり。雫は勢いを増し、次々と落ちてきて、机の上に広がってゆく。ゆっくりと見上げると、天井には大きく赤黒いしみが広がっていた。ぽたり。ぽたりぽたり。ぽたり。――ぼたぼたぼたっ!高まる水音にあなたは立ちすくむ。天井裏に、いったい何が……?",
581
- "指定特技:地底\n見慣れたはずの場所に、見慣れない扉を見つけた。開けてみると、長い下り階段が闇の中に伸びている。不審に思って下りてみると……そこは地下室だった。こんな場所があったなんて。明かりを片手に進んでいくと、何かが近づいてくる気配がする。闇の中から、何者かが、あなたの名を呼んだ。",
582
- ]
583
-
584
- return get_table_by_1d6(table)
585
- end
586
-
587
- # 廃墟遭遇ホラースケープ表
588
- def get_ruines_horror_table
589
- table = [
590
- "指定特技:暗黒\n重く頑丈そうな扉を開ける。部屋の中は真っ暗だった。灯りで照らしてみると、別の部屋へと続く道が何本か見つかった。目ぼしいものはなさそうだ。一旦、入り口に戻ろうと、入ってきた扉のほうを振り返る。そこには壁しかなかった。あの重厚な扉がなくなっている。そんな馬鹿な。しかし、何度探してもどの壁にも扉らしきものは見当たらない。仕方なく、通路を進むことにしたが、じわじわと不吉な気分が込み上げてくる。……あの扉は、開けてはいけなかったのではないだろうか?",
591
- "指定特技:整理\nあなたは廃墟の中、ブーン……という低い音に気付いた。冷蔵庫だ。どこから電気が来ているのか、白い冷蔵庫が廃屋の片隅にひっそりと佇んでいる。ガチャリと扉を引き開けてみたあなたは、中にいた何かと、目が合った。……気がつくと、あなたは暗くて冷たいところで体を丸めている。ブーン…という音が聞こえている。ここは涼しくて、狭くて――とても居心地がいい。",
592
- "指定特技:追跡\n廃屋のふすまを開けたとき、あなたは強い違和感を覚える。分厚く埃が積もったその部屋には、濃厚な気配が漂っていた。ちゃぶ台の上には中身の残った湯飲み。さっきまで誰かが座っていたみたいに凹んだ座布団。なぜこの茶の間には、こんなに生活感があるのだろうか……。",
593
- "指定特技:愛\n廃墟を歩いていると、突然、あなたの携帯に電話がかかってきた。静まりかえった廃墟に鳴り響く着信音に肝を潰しつつも出てみると、電話の向こうから、あなたの祖母がいきなり叱りつけてきた。「あんた、何やってんの!そんなとこ行ったらダメでないの!」え?なぜ祖母が……?「早くそこから出なさい!大変なことになるよ!」わけがわからずに口ごもっているうちに、電話は切れた。ディスプレイには、「圏外」と表示されていた。",
594
- "指定特技:罠\n廃墟を歩いていると、いきなり足に激痛が走った。悲鳴をこらえて下を見ると、あなたの足首をがっちりとトラバサミが捕えている。なぜこんな場所に、こんな罠が……?苦労してトラバサミを解除して、改めて周りを見たとき、あなたは愕然とする。罠は一つだけではなかった。瓦礫の下に隠すようにして、いくつもいくつも、トラバサミが仕掛けられていた。",
595
- "指定特技:薬品\n不意に、シンナーの匂いが鼻を刺した。廃墟の壁にべったりと、赤いペンキの文字が書かれている。何が書いてあるのかは判然としないが、ひたすら悪意と憎しみを塗り込めたようなタッチにおぞけが走る。そのうちあることに気付いて、あなたは総毛立った。ペンキがまだ新しい。……塗り立てのように新しいのだ。",
596
- ]
597
-
598
- return get_table_by_1d6(table)
599
- end
600
-
601
- # 野外遭遇ホラースケープ表
602
- def get_Mlle_horror_table
603
- table = [
604
- "指定特技:痛み\nブ―――――――ン耳元で甲高い羽音が響いてくる。見たことのない真っ赤な羽虫の群れが飛んでいた。ブ―――――――ン。羽虫を追い払うように、腕を振るう。痛いっ。腕に刺すような痛みが走った。ブ―――――――ン虫たちは、どこかへ去っていく。みるみる腕の表面に不気味な水疱がぽつぽつと浮かび上がってきた。",
605
- "指定特技:夢\n木々の間で、何か大きなものが動いているのが見える。肉の腐ったような臭いがぷんと鼻を突く。まだら模様のあれは……毛皮?それとも、ずたずたになった服の切れ端?そいつがあなたを見た。木の葉の合間から除く目は、まるで人のような――目が合った瞬間から記憶がない。気が付くと、人の髪に似た黒い毛が、あなたの全身に付着していた。",
606
- "指定特技:恨み\n林の中で出くわした大樹の幹には、たくさんの藁人形が釘で打ち付けられていた。うわあ、と思いながら見上げるうちに、気のめいる事実に気付いてしまった。新しめの藁人形の一つに、名前の書かれた札が貼り付けられている。――ひどく、見覚えのある名前だった。",
607
- "指定特技:深海\n……おーい。……お―――い。遠く、呼ぶ声を聴いた気がして、波の合間に目を凝らす。つるりとした黒い影が、浮きつ沈みつ、あなたを差し招いている。ひい、ふう、みい、よう……七人。七人の黒い影が、波間から、あなたに手を振っている。――なんだか、頭がぼうっとしてきた。",
608
- "指定特技:物陰\n藪の中に廃車が埋もれている。特徴のない白いバンだ。窓は真っ黒な煤で汚れていて、何も見えない。車体は錆び付いて、塗料も剥がれ、打ち棄てられて久しい廃車であることは確実だ。――それなのに、廃車の中から刺すような視線を感じる。ロックが外れる音がして、ゆっくりと後部座席のドアが開き始める……。",
609
- "指定特技:焼却\nパチ……パチ……。火の燃える音がする。空き地で焚火が炎を上げていた。そばには誰もいない。心温まる思いで立ち止まり、木の枝で焚火をかき回していると、炎の中から軽やかな笑い声が聞こえた。ぎょっとするあなたの足許を、猫のような大きさの何かがするりと抜けていった。焚火に目を戻すと、そこにはただ、くすぶる骨の塊が残されているだけだった。",
610
- ]
611
-
612
- return get_table_by_1d6(table)
613
- end
614
-
615
- # 情報潜在ホラースケープ表
616
- def get_latence_horror_table
617
- table = [
618
- "指定特技:味\nのどの渇きを覚えた。調べ物を開始した時間から、時計の針は大分進んでいる。どうやら根をつめ過ぎたようだ。画面に目を戻しつつ、ペットボットルの水を口に含む。すると、口内に違和感が広がった。たまらず水を吐き出す。すると、真っ黒い液体が机の上の資料を汚した。口の中には、ドブ川のような臭いがこびりついている。確認したペットボトルの水は、透明なのだが……?",
619
- "指定特技:カメラ\n資料の間から、黄ばんだ封筒に入った写真の束が出てきた。被写体は……あなただ。知らないうちに撮られた、あなたの写真が、何十枚も束ねられている。色褪せた写真を無造作に止めた輪ゴムは劣化して、ねばついていた。――だれが、こんな写真を?何の目的で……?",
620
- "指定特技:メディア\nテレビのニュースを見ていると、それまで淀みなく喋っていたアナウンサーが、不意に黙り込んだ。どうしたんだろう、と思っていると、アナウンサーが奇妙なことを言い始めた。「死ぬこともあり得ます。と語りました。また、高確率で、災いが起こります。今日から明日にかけて、厳重に警戒してください。警戒してください。警戒してください」アナウンサーは、画面の向こうからあなたの目をじっと見つめている。あなたが戸惑っていると、ひとりでにテレビの電源が切れた。",
621
- "指定特技:民俗学\n資料を漁るうちに、ある寒村に伝わるおぞましい風習に辿り着いた。暴力……儀式……生贄……。とてもまともな人間のやることとは思えない所業に震えあがる。その風習には、なぜか既視感があった。どこで読んだんだろう?考えるうちに、ある記憶が蘇った。あなたの幼い頃の記憶だった。いや……そんな、馬鹿な。あなたの故郷が、こんな寒村のはずがない……。",
622
- "指定特技:魔術\n資料の中から、奇妙な古書が出てきた。皮装丁の豪華な本で、妙な臭いがする。文書は支離滅裂で、正気の人間が書いたとは思えない。だが、破れそうなページを一枚一枚めくっていくと、しだいに作者の言っていることがわかってくる。どんどん、どんどん、わかってくる。ああ、もう、わかる。完全にわかる。もう大丈夫だ。きっとこの本は、あなたに読まれるために書かれたのだ。",
623
- "指定特技:歴史\n表紙のないレポートが見つかった。パラパラめくってみると、まさにあなたが今調べている件についての調査報告だった。もどかしいことに、あちこち墨塗りされていて、肝心のところがわからない。察するに、どうも、軍による調査のようだ。軍?なぜ軍隊がこの件を調べていたのだろう……?",
624
- ]
625
-
626
- return get_table_by_1d6(table)
627
- end
628
-
629
- # 遭遇表・都市
630
- def get_city_table
631
- table = [
632
- "できそこない×3 基本p246",
633
- "にらむ人×1 デッドループp190 犬×1 基本p243",
634
- "信奉者×2 基本p243",
635
- "顔を隠した女×1 デッドループp192",
636
- "幽霊自動車×1 デッドループp193",
637
- "怨霊×1 基本p245",
638
- ]
639
-
640
- return get_table_by_1d6(table)
641
- end
642
-
643
- # 遭遇表・山林
644
- def get_mountainforest_table
645
- table = [
646
- "のっぺらぼう×3 デッドループp190",
647
- "毒蟲の群れ×2 デッドループp191",
648
- "熊×1 デッドループp191",
649
- "巨大昆虫×1 デッドループp192",
650
- "人狼×1 基本p265",
651
- "くねくね×1 デッドループp193",
652
- ]
653
-
654
- return get_table_by_1d6(table)
655
- end
656
-
657
- # 遭遇表・海辺
658
- def get_seaside_table
659
- table = [
660
- "人魂×3 デッドループp190",
661
- "深きもの×2 基本p261",
662
- "星を渡るもの×1 基本p261",
663
- "宇宙人×1 基本p257",
664
- "魔女×1 基本p245",
665
- "這いずるもの×1 基本p261",
666
- ]
667
-
668
- return get_table_by_1d6(table)
669
- end
670
-
671
- # 残業ホラースケープ表
672
- def get_overtime_horror_table
673
- table = [
674
- "指定特技:死\n窓に目をやったとき、窓の外を落下する人影と目が合った!慌てて窓辺に駆け寄るが、下には何もない。幻覚だったのだろうか……?",
675
- "指定特技:機械\n突然、コピー機が唸りを上げて紙を吐き出し始めた。床に舞い散ったコピー用紙には、歪んだ人の顔のようなものが印刷されている。気味が悪い……。",
676
- "指定特技:物陰\n蒼白い子供が机の下からあなたを見上げている。うわっ!と叫んで飛び退くと、子供の姿は消えた。",
677
- "指定特技:手触り\n仕事をしていると、背後から長い黒髪が垂れ下がってきた。女の長い黒髪だ。……後ろで覗き込んでいるのは、一体誰だ?",
678
- "指定特技:憂い\n視界の隅を、暗い顔の男が通り過ぎるのが見えた。振り返ってみても、誰もいない。誰だ?知らないぞ、あんな奴。",
679
- "指定特技:暗黒\nバツン!突然の停電でフロアが闇に沈んだ。驚いて顔を上げると、闇の中にたくさんの人影が佇んで、じっとあなたを見ている……!",
680
- ]
681
-
682
- return get_table_by_1d6(table)
683
- end
684
-
685
- # 残業電話表
686
- def get_overtimephone_table
687
- table = [
688
- "「進捗どうですか?」クライアントからの進捗確認の電話。今やってるよ!電話の時間がもったいないんだよ!ストレスで胃が痛い。【生命力】マイナス1。",
689
- "「仕様が変わりまして……」クライアントから仕様変更の連絡。今かよ!?殺すぞ!?せっかくの作業が無駄になる。PPマイナス1。",
690
- "「最近電話に出ないけど……大丈夫?」恋人や家族など、大切な人からの電話。仕事中にかけてくるなよと思いつつも、少し気が紛れた。【正気度】1回復。",
691
- "「特上寿司五人前お願いします!」間違い電話だった。驚かせやがって……。",
692
- "「ちょっと、この前の仕事だけどどうなってるんだ!」別件のクレームの電話だ!疲れた精神にダメージを負って、【正気度】マイナス1。",
693
- "「……ねばいいのに。」電話の向こうから地獄のような声が囁く。ぞっとして反射的に電話を切る。着信履歴は残っていない……なんだ今の!?《電子機器》で恐怖判定。",
694
- ]
695
-
696
- return get_table_by_1d6(table)
697
- end
698
-
699
- # 残業シーン表
700
- def get_overtimework_scene_table
701
- table = [
702
- "ジジッ……不意に蛍光灯がちらつく。電気系統がおかしいのだろうか?停電は勘弁してほしいのだが…。",
703
- "ぴちょん。ぴちょん。どこからか水の滴る音が聞こえる。雨漏りか、蛇口の閉め忘れか?",
704
- "ジャバーッ……ズゴゴゴゴ。トイレの水を流す音が響き渡る。誰かトイレにいたのか?それとも、他の階だろうか?",
705
- "サイレンの音が近づいてきて、赤色灯の光が窓から射し込む。近くで何かがあったようだが……。",
706
- "背後から誰かの話し声が聞こえた気がする。咄嗟に振り返るが……空耳だろうか?",
707
- "窓ガラスの向こうに見える夜の灯りを切ない気持ちで見つめる。早く帰りたい……。",
708
- "突如、携帯電話の音が鳴り響く。マナーモードにしていたはずなのに……。一体、誰からだろう?",
709
- "不意の機械音に驚いてみると、ファックスが紙を吐き出している。こんな時間になんだろう?",
710
- "美味しそうな香りが漂ってきて、急に空腹を感じる。どこから来たんだ、この匂いは?",
711
- "気分転換に見ていたネットに夢中になって、ふと気付くと何分も経過……いかんいかん。",
712
- "ガクンと船を漕いで、ハッと目を覚ました。慌てて時計を見る……えっ、もうこんな時間なの!?",
713
- ]
714
- return get_table_by_2d6(table)
715
- end
716
-
717
- # 社名決定表1
718
- def get_corporatenameone_table
719
- table = [
720
- "フライング",
721
- "トラブル",
722
- "ブラッド",
723
- "プリティー",
724
- "クリムゾン",
725
- "ボンバー",
726
- ]
727
-
728
- return get_table_by_1d6(table)
729
- end
730
-
731
- # 社名決定表2
732
- def get_corporatenametwo_table
733
- table = [
734
- "ウィッチ―ズ",
735
- "インテリジェンス",
736
- "キャッツ",
737
- "バード",
738
- "ホラー",
739
- "インセイン",
740
- ]
741
-
742
- return get_table_by_1d6(table)
743
- end
744
-
745
- # 社名決定表3
746
- def get_corporatenamethree_table
747
- table = [
748
- "(株)",
749
- "(株)",
750
- "(株)",
751
- "(有)",
752
- "(有)",
753
- "(有)",
754
- ]
755
-
756
- return get_table_by_1d6(table)
757
- end
758
-
759
- # 反応表
760
- def get_reaction_scene_table
761
- table = [
762
- "「ちょっとこちらにきてもらえますか。」いきなり逮捕、拘束される。「反応表」を使用したキャラクターは、このシーンが終わってから2シーンの間、自分がシーンプレイヤーでないシーンに登場することができなくなる(マスターシーンには登場可能)。",
763
- "「私が協力できるのはここまでだ。」協力を求めた人物は、怯えたような様子で手に持った包みをあなたに押し付けた。「反応表」を使用したキャラクターは、何か好きなアイテム一つを獲得する。",
764
- "「その件は捜査中です。情報提供ありがとうございます。」協力を求めた人物は、にこにこ笑って、そう答える。何を言っても、同じ返答しか返ってこない。「反応表」を使用したキャラクターは、【正気度】を1点減少する。",
765
- "「もしかして、お前、あの事件の関係者か……?」どうやら協力を求めた人物も、ちょうど同じ事件を調査していたようだ。いろいろ情報を提供してくれるようだ。「反応表」を使用したキャラクターは、以降、調査判定を行うときプラス1の修正がつく。",
766
- "「夢でも見たんじゃないですか?」どんなに強く訴えても信じてもらえない。……もしかして、おかしいのは私の方なのか?情動の特技分野からランダムに特技一つを選んで恐怖判定を行う。",
767
- "「はいはい。我々もヒマじゃないんだよ。」色々話しても相手にしてもらえない。門前払いを喰らう。",
768
- "「ちょっと身体検査よろしいでしょうか?」怪しい人物だと思われたらしい。「反応表」を使用したキャラクターが、アイテムや、違法そうなプライズを持っていた場合、このシーンが終わってから2シーンの間、自分がシーンプレイヤーでないシーンに登場することができなくなる(マスターシーンには登場可能)。",
769
- "「それは気になりますね。こちらでも調査してみましょう。」親身になって相談に乗ってくれる。何か分かったら連絡してくれると言うが……。1D6を振る。奇数なら、2シーン後に情報をくれる。「反応表」を使用したキャラクターは、好きな【秘密】一つを獲得する。偶数なら調査していたNPCが謎の死を遂げる。「反応表」を使用したキャラクターは、知識の特技分野からランダムに特技一つを選んで恐怖判定を行う。",
770
- "「命が惜しければこれ以上関わるな。」あなたは人気のない場所に連れていかれ、殴られた。協力を求めた人物は、助けを求めたはずのあなたを激しく拒絶する。「反応表」を使用したキャラクターは、【生命力】を1点減少する。",
771
- "「分かりました。念のためパトロールを強化しましょう。」周辺の警護を約束してくれる。「反応表」を使用したキャラクターは、このセッションの間、一度だけ自分が受けたダメージを無効化することができる。ダメージを無効化した場合、「反応表」を使用したキャラクターは、暴力の特技分野からランダムに一つを選んで恐怖判定を行う。",
772
- "「……なんじゃこりゃぁっ!?」助けを求めた相手が突然死亡する。ヤツらの手は、こんなところまで及んでいるのか?「反応表」を使用したキャラクターは、暴力の特技分野からランダムに一つを選んで恐怖判定を行う。",
92
+ translate("Insane.BET.items.2"),
93
+ lambda { return translate("Insane.BET.items.3", skill: self.class::RTT.roll_skill(@randomizer)) },
94
+ translate("Insane.BET.items.4"),
95
+ translate("Insane.BET.items.5"),
96
+ translate("Insane.BET.items.6"),
97
+ translate("Insane.BET.items.7"),
98
+ translate("Insane.BET.items.8"),
99
+ translate("Insane.BET.items.9"),
100
+ translate("Insane.BET.items.10"),
101
+ lambda { return translate("Insane.BET.items.11", skill: self.class::RTT.roll_skill(@randomizer)) },
102
+ translate("Insane.BET.items.12"),
773
103
  ]
774
104
  return get_table_by_2d6(table)
775
105
  end
@@ -817,6 +147,49 @@ module BCDice
817
147
  end
818
148
  return output, total_n
819
149
  end
150
+
151
+ class << self
152
+ private
153
+
154
+ def translate_tables(locale)
155
+ {
156
+ "ST" => DiceTable::Table.from_i18n("Insane.table.ST", locale),
157
+ "HJST" => DiceTable::Table.from_i18n("Insane.table.HJST", locale),
158
+ "MTST" => DiceTable::Table.from_i18n("Insane.table.MTST", locale),
159
+ "DVST" => DiceTable::Table.from_i18n("Insane.table.DVST", locale),
160
+ "DT" => DiceTable::D66Table.from_i18n("Insane.table.DT", locale),
161
+ "BT" => DiceTable::D66Table.from_i18n("Insane.table.BT", locale),
162
+ "PT" => DiceTable::D66Table.from_i18n("Insane.table.PT", locale),
163
+ "FT" => DiceTable::Table.from_i18n("Insane.table.FT", locale),
164
+ "JT" => DiceTable::D66Table.from_i18n("Insane.table.JT", locale),
165
+ "CHT" => DiceTable::Table.from_i18n("Insane.table.CHT", locale),
166
+ "VHT" => DiceTable::Table.from_i18n("Insane.table.VHT", locale),
167
+ "IHT" => DiceTable::Table.from_i18n("Insane.table.IHT", locale),
168
+ "RHT" => DiceTable::Table.from_i18n("Insane.table.RHT", locale),
169
+ "MHT" => DiceTable::Table.from_i18n("Insane.table.MHT", locale),
170
+ "LHT" => DiceTable::Table.from_i18n("Insane.table.LHT", locale),
171
+ "ECT" => DiceTable::Table.from_i18n("Insane.table.ECT", locale),
172
+ "EMT" => DiceTable::Table.from_i18n("Insane.table.EMT", locale),
173
+ "EAT" => DiceTable::Table.from_i18n("Insane.table.EAT", locale),
174
+ "OHT" => DiceTable::Table.from_i18n("Insane.table.OHT", locale),
175
+ "OPT" => DiceTable::Table.from_i18n("Insane.table.OPT", locale),
176
+ "OWT" => DiceTable::Table.from_i18n("Insane.table.OWT", locale),
177
+ "CNT1" => DiceTable::Table.from_i18n("Insane.table.CNT1", locale),
178
+ "CNT2" => DiceTable::Table.from_i18n("Insane.table.CNT2", locale),
179
+ "CNT3" => DiceTable::Table.from_i18n("Insane.table.CNT3", locale),
180
+ "RET" => DiceTable::Table.from_i18n("Insane.table.RET", locale),
181
+ }
182
+ end
183
+
184
+ def translate_rtt(locale)
185
+ DiceTable::SaiFicSkillTable.from_i18n("Insane.RTT", locale, rttn: ["TVT", "TET", "TPT", "TST", "TKT", "TMT"])
186
+ end
187
+ end
188
+
189
+ TABLES = translate_tables(:ja_jp)
190
+ RTT = translate_rtt(:ja_jp)
191
+
192
+ register_prefix("BET", "IRN", RTT.prefixes, TABLES.keys)
820
193
  end
821
194
  end
822
195
  end