bcdice 3.0.0.pre.alpha.1 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (316) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +70 -0
  3. data/README.md +34 -7
  4. data/i18n/Amadeus/ja_jp.yml +386 -0
  5. data/i18n/Amadeus/ko_kr.yml +148 -0
  6. data/i18n/Cthulhu/ja_jp.yml +11 -0
  7. data/i18n/Cthulhu/ko_kr.yml +11 -0
  8. data/i18n/Cthulhu/zh_hant.yml +11 -0
  9. data/i18n/DetatokoSaga/ja_jp.yml +75 -0
  10. data/i18n/DetatokoSaga/ko_kr.yml +75 -0
  11. data/i18n/DoubleCross/ja_jp.yml +53 -0
  12. data/i18n/DoubleCross/ko_kr.yml +53 -0
  13. data/i18n/Dracurouge/ja_jp.yml +1374 -0
  14. data/i18n/Dracurouge/ko_kr.yml +295 -0
  15. data/i18n/Fiasco/ja_jp.yml +10 -0
  16. data/i18n/Fiasco/ko_kr.yml +10 -0
  17. data/i18n/FutariSousa/ja_jp.yml +720 -0
  18. data/i18n/FutariSousa/ko_kr.yml +746 -0
  19. data/i18n/Insane/ja_jp.yml +454 -0
  20. data/i18n/Insane/ko_kr.yml +502 -0
  21. data/i18n/Kamigakari/ja_jp.yml +276 -0
  22. data/i18n/Kamigakari/ko_kr.yml +204 -0
  23. data/i18n/KillDeathBusiness/ja_jp.yml +1092 -0
  24. data/i18n/KillDeathBusiness/ko_kr.yml +1063 -0
  25. data/i18n/LogHorizon/ja_jp.yml +3082 -0
  26. data/i18n/LogHorizon/ko_kr.yml +923 -0
  27. data/i18n/MagicaLogia/ja_jp.yml +564 -0
  28. data/i18n/MagicaLogia/ko_kr.yml +564 -0
  29. data/i18n/MonotoneMuseum/ja_jp.yml +561 -0
  30. data/i18n/MonotoneMuseum/ko_kr.yml +89 -0
  31. data/i18n/Nechronica/ja_jp.yml +57 -0
  32. data/i18n/Nechronica/ko_kr.yml +14 -0
  33. data/i18n/StratoShout/ja_jp.yml +160 -0
  34. data/i18n/StratoShout/ko_kr.yml +160 -0
  35. data/i18n/ja_jp.yml +5 -0
  36. data/i18n/ko_kr.yml +7 -0
  37. data/i18n/zh_hant.yml +3 -0
  38. data/lib/bcdice.rb +4 -1
  39. data/lib/bcdice/arithmetic.rb +22 -0
  40. data/lib/bcdice/arithmetic/node.rb +223 -0
  41. data/lib/bcdice/arithmetic/parser.rb +240 -0
  42. data/lib/bcdice/arithmetic_evaluator.rb +7 -156
  43. data/lib/bcdice/base.rb +94 -101
  44. data/lib/bcdice/command/lexer.rb +57 -0
  45. data/lib/bcdice/command/parsed.rb +65 -0
  46. data/lib/bcdice/command/parser.rb +489 -0
  47. data/lib/bcdice/common_command.rb +4 -0
  48. data/lib/bcdice/common_command/add_dice.rb +8 -42
  49. data/lib/bcdice/common_command/add_dice/node.rb +221 -72
  50. data/lib/bcdice/common_command/add_dice/parser.rb +391 -274
  51. data/lib/bcdice/common_command/add_dice/randomizer.rb +27 -33
  52. data/lib/bcdice/common_command/barabara_dice.rb +8 -47
  53. data/lib/bcdice/common_command/barabara_dice/node.rb +92 -0
  54. data/lib/bcdice/common_command/barabara_dice/parser.rb +336 -0
  55. data/lib/bcdice/common_command/barabara_dice/result.rb +22 -0
  56. data/lib/bcdice/common_command/calc.rb +9 -30
  57. data/lib/bcdice/common_command/calc/node.rb +39 -0
  58. data/lib/bcdice/common_command/calc/parser.rb +271 -0
  59. data/lib/bcdice/common_command/choice.rb +137 -19
  60. data/lib/bcdice/common_command/d66_dice.rb +52 -34
  61. data/lib/bcdice/common_command/lexer.rb +47 -0
  62. data/lib/bcdice/common_command/repeat.rb +102 -0
  63. data/lib/bcdice/common_command/reroll_dice.rb +8 -158
  64. data/lib/bcdice/common_command/reroll_dice/node.rb +198 -0
  65. data/lib/bcdice/common_command/reroll_dice/parser.rb +421 -0
  66. data/lib/bcdice/common_command/upper_dice.rb +12 -129
  67. data/lib/bcdice/common_command/upper_dice/node.rb +181 -0
  68. data/lib/bcdice/common_command/upper_dice/parser.rb +433 -0
  69. data/lib/bcdice/common_command/version.rb +11 -17
  70. data/lib/bcdice/deprecated/checker.rb +78 -0
  71. data/lib/bcdice/dice_table.rb +3 -0
  72. data/lib/bcdice/dice_table/chain_table.rb +2 -0
  73. data/lib/bcdice/dice_table/d66_grid_table.rb +10 -0
  74. data/lib/bcdice/dice_table/d66_parity_table.rb +36 -0
  75. data/lib/bcdice/dice_table/d66_range_table.rb +2 -0
  76. data/lib/bcdice/dice_table/d66_table.rb +12 -0
  77. data/lib/bcdice/dice_table/roll_result.rb +2 -0
  78. data/lib/bcdice/dice_table/sai_fic_skill_table.rb +75 -17
  79. data/lib/bcdice/dice_table/sai_fic_skill_table/category.rb +25 -0
  80. data/lib/bcdice/dice_table/sai_fic_skill_table/skill.rb +23 -0
  81. data/lib/bcdice/dice_table/table.rb +10 -0
  82. data/lib/bcdice/enum.rb +2 -0
  83. data/lib/bcdice/format.rb +2 -0
  84. data/lib/bcdice/game_system.rb +17 -1
  85. data/lib/bcdice/game_system/AFF2e.rb +1 -1
  86. data/lib/bcdice/game_system/AceKillerGene.rb +3 -3
  87. data/lib/bcdice/game_system/Airgetlamh.rb +3 -3
  88. data/lib/bcdice/game_system/AlchemiaStruggle.rb +346 -0
  89. data/lib/bcdice/game_system/Alsetto.rb +1 -1
  90. data/lib/bcdice/game_system/Alshard.rb +1 -2
  91. data/lib/bcdice/game_system/AlterRaise.rb +2 -2
  92. data/lib/bcdice/game_system/Amadeus.rb +47 -508
  93. data/lib/bcdice/game_system/Amadeus_Korean.rb +12 -456
  94. data/lib/bcdice/game_system/AngelGear.rb +123 -0
  95. data/lib/bcdice/game_system/AnimaAnimus.rb +2 -6
  96. data/lib/bcdice/game_system/Arianrhod.rb +0 -1
  97. data/lib/bcdice/game_system/ArsMagica.rb +1 -1
  98. data/lib/bcdice/game_system/Avandner.rb +1 -1
  99. data/lib/bcdice/game_system/BBN.rb +7 -5
  100. data/lib/bcdice/game_system/BadLife.rb +2 -2
  101. data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
  102. data/lib/bcdice/game_system/BeastBindTrinity.rb +3 -13
  103. data/lib/bcdice/game_system/BeginningIdol.rb +6 -7
  104. data/lib/bcdice/game_system/BeginningIdol_Korean.rb +6 -7
  105. data/lib/bcdice/game_system/BladeOfArcana.rb +6 -6
  106. data/lib/bcdice/game_system/BlindMythos.rb +12 -10
  107. data/lib/bcdice/game_system/BloodCrusade.rb +54 -81
  108. data/lib/bcdice/game_system/BloodMoon.rb +43 -3
  109. data/lib/bcdice/game_system/CardRanker.rb +24 -65
  110. data/lib/bcdice/game_system/ChaosFlare.rb +4 -4
  111. data/lib/bcdice/game_system/Chill.rb +1 -1
  112. data/lib/bcdice/game_system/CodeLayerd.rb +37 -67
  113. data/lib/bcdice/game_system/ColossalHunter.rb +3 -4
  114. data/lib/bcdice/game_system/Comes.rb +50 -0
  115. data/lib/bcdice/game_system/CrashWorld.rb +1 -1
  116. data/lib/bcdice/game_system/Cthulhu.rb +99 -98
  117. data/lib/bcdice/game_system/Cthulhu7th.rb +117 -370
  118. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
  119. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
  120. data/lib/bcdice/game_system/CthulhuTech.rb +8 -15
  121. data/lib/bcdice/game_system/Cthulhu_ChineseTraditional.rb +7 -190
  122. data/lib/bcdice/game_system/Cthulhu_Korean.rb +5 -186
  123. data/lib/bcdice/game_system/DarkBlaze.rb +13 -9
  124. data/lib/bcdice/game_system/DarkDaysDrive.rb +17 -15
  125. data/lib/bcdice/game_system/DarkSouls.rb +1 -1
  126. data/lib/bcdice/game_system/DeadlineHeroes.rb +3 -3
  127. data/lib/bcdice/game_system/DemonParasite.rb +1 -2
  128. data/lib/bcdice/game_system/DesperateRun.rb +163 -0
  129. data/lib/bcdice/game_system/DetatokoSaga.rb +69 -152
  130. data/lib/bcdice/game_system/DetatokoSaga_Korean.rb +9 -277
  131. data/lib/bcdice/game_system/DiceBot.rb +22 -4
  132. data/lib/bcdice/game_system/DiceOfTheDead.rb +9 -6
  133. data/lib/bcdice/game_system/DoubleCross.rb +145 -157
  134. data/lib/bcdice/game_system/DoubleCross_Korean.rb +13 -330
  135. data/lib/bcdice/game_system/Dracurouge.rb +376 -1678
  136. data/lib/bcdice/game_system/Dracurouge_Korean.rb +16 -271
  137. data/lib/bcdice/game_system/EarthDawn.rb +1 -1
  138. data/lib/bcdice/game_system/EarthDawn3.rb +1 -1
  139. data/lib/bcdice/game_system/EarthDawn4.rb +1 -1
  140. data/lib/bcdice/game_system/Elysion.rb +5 -6
  141. data/lib/bcdice/game_system/EmbryoMachine.rb +6 -6
  142. data/lib/bcdice/game_system/Emoklore.rb +131 -0
  143. data/lib/bcdice/game_system/EndBreaker.rb +1 -2
  144. data/lib/bcdice/game_system/EtrianOdysseySRS.rb +1 -2
  145. data/lib/bcdice/game_system/Fiasco.rb +87 -70
  146. data/lib/bcdice/game_system/Fiasco_Korean.rb +7 -95
  147. data/lib/bcdice/game_system/FilledWith.rb +465 -569
  148. data/lib/bcdice/game_system/FullMetalPanic.rb +1 -2
  149. data/lib/bcdice/game_system/FutariSousa.rb +103 -938
  150. data/lib/bcdice/game_system/FutariSousa_Korean.rb +7 -948
  151. data/lib/bcdice/game_system/{Gurps.rb → GURPS.rb} +184 -217
  152. data/lib/bcdice/game_system/Garako.rb +140 -39
  153. data/lib/bcdice/game_system/GardenOrder.rb +3 -3
  154. data/lib/bcdice/game_system/GehennaAn.rb +4 -4
  155. data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +1 -1
  156. data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
  157. data/lib/bcdice/game_system/GoldenSkyStories.rb +1 -1
  158. data/lib/bcdice/game_system/Gorilla.rb +1 -1
  159. data/lib/bcdice/game_system/GranCrest.rb +2 -3
  160. data/lib/bcdice/game_system/Gundog.rb +1 -1
  161. data/lib/bcdice/game_system/GundogRevised.rb +4 -4
  162. data/lib/bcdice/game_system/GundogZero.rb +3 -3
  163. data/lib/bcdice/game_system/GurpsFW.rb +4 -8
  164. data/lib/bcdice/game_system/HarnMaster.rb +2 -2
  165. data/lib/bcdice/game_system/HatsuneMiku.rb +2 -3
  166. data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
  167. data/lib/bcdice/game_system/HuntersMoon.rb +17 -111
  168. data/lib/bcdice/game_system/Illusio.rb +27 -36
  169. data/lib/bcdice/game_system/InfiniteBabeL.rb +518 -0
  170. data/lib/bcdice/game_system/Insane.rb +90 -717
  171. data/lib/bcdice/game_system/Insane_Korean.rb +7 -719
  172. data/lib/bcdice/game_system/JekyllAndHyde.rb +42 -0
  173. data/lib/bcdice/game_system/JuinKansen.rb +251 -0
  174. data/lib/bcdice/game_system/Kamigakari.rb +47 -242
  175. data/lib/bcdice/game_system/Kamigakari_Korean.rb +6 -394
  176. data/lib/bcdice/game_system/KanColle.rb +20 -169
  177. data/lib/bcdice/game_system/KemonoNoMori.rb +1 -1
  178. data/lib/bcdice/game_system/KillDeathBusiness.rb +189 -1180
  179. data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +8 -1460
  180. data/lib/bcdice/game_system/KurayamiCrying.rb +1 -1
  181. data/lib/bcdice/game_system/LiveraDoll.rb +2 -2
  182. data/lib/bcdice/game_system/LogHorizon.rb +350 -3379
  183. data/lib/bcdice/game_system/LogHorizon_Korean.rb +55 -1357
  184. data/lib/bcdice/game_system/LostRecord.rb +0 -1
  185. data/lib/bcdice/game_system/LostRoyal.rb +3 -6
  186. data/lib/bcdice/game_system/MagicaLogia.rb +158 -1044
  187. data/lib/bcdice/game_system/MagicaLogia_Korean.rb +66 -0
  188. data/lib/bcdice/game_system/MeikyuDays.rb +2 -3
  189. data/lib/bcdice/game_system/MeikyuKingdom.rb +7 -7
  190. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +7 -8
  191. data/lib/bcdice/game_system/MetalHead.rb +1 -1
  192. data/lib/bcdice/game_system/MetalHeadExtream.rb +7 -7
  193. data/lib/bcdice/game_system/MetallicGuardian.rb +1 -2
  194. data/lib/bcdice/game_system/MonotoneMuseum.rb +41 -241
  195. data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +10 -270
  196. data/lib/bcdice/game_system/NSSQ.rb +159 -0
  197. data/lib/bcdice/game_system/Nechronica.rb +37 -76
  198. data/lib/bcdice/game_system/Nechronica_Korean.rb +11 -128
  199. data/lib/bcdice/game_system/NeverCloud.rb +540 -5
  200. data/lib/bcdice/game_system/NightWizard.rb +2 -2
  201. data/lib/bcdice/game_system/NightWizard3rd.rb +1 -1
  202. data/lib/bcdice/game_system/NightmareHunterDeep.rb +3 -4
  203. data/lib/bcdice/game_system/NinjaSlayer.rb +33 -43
  204. data/lib/bcdice/game_system/NjslyrBattle.rb +1 -1
  205. data/lib/bcdice/game_system/OneWayHeroics.rb +1 -2
  206. data/lib/bcdice/game_system/OracleEngine.rb +14 -18
  207. data/lib/bcdice/game_system/OrgaRain.rb +19 -27
  208. data/lib/bcdice/game_system/Paradiso.rb +3 -3
  209. data/lib/bcdice/game_system/Paranoia.rb +1 -1
  210. data/lib/bcdice/game_system/ParanoiaRebooted.rb +1 -1
  211. data/lib/bcdice/game_system/ParasiteBlood.rb +1 -1
  212. data/lib/bcdice/game_system/Peekaboo.rb +23 -123
  213. data/lib/bcdice/game_system/PhantasmAdventure.rb +0 -4
  214. data/lib/bcdice/game_system/Postman.rb +3 -3
  215. data/lib/bcdice/game_system/PulpCthulhu.rb +3 -3
  216. data/lib/bcdice/game_system/Raisondetre.rb +3 -3
  217. data/lib/bcdice/game_system/RecordOfLodossWar.rb +8 -7
  218. data/lib/bcdice/game_system/RecordOfSteam.rb +1 -1
  219. data/lib/bcdice/game_system/RokumonSekai2.rb +3 -3
  220. data/lib/bcdice/game_system/RuinBreakers.rb +296 -0
  221. data/lib/bcdice/game_system/RyuTuber.rb +6 -4
  222. data/lib/bcdice/game_system/Ryutama.rb +2 -2
  223. data/lib/bcdice/game_system/SRS.rb +1 -7
  224. data/lib/bcdice/game_system/SamsaraBallad.rb +5 -4
  225. data/lib/bcdice/game_system/Satasupe.rb +90 -866
  226. data/lib/bcdice/game_system/ScreamHighSchool.rb +4 -4
  227. data/lib/bcdice/game_system/SevenFortressMobius.rb +1 -1
  228. data/lib/bcdice/game_system/ShadowRun5.rb +2 -2
  229. data/lib/bcdice/game_system/SharedFantasia.rb +1 -1
  230. data/lib/bcdice/game_system/ShinMegamiTenseiKakuseihen.rb +1 -1
  231. data/lib/bcdice/game_system/ShinkuuGakuen.rb +5 -5
  232. data/lib/bcdice/game_system/ShinobiGami.rb +75 -40
  233. data/lib/bcdice/game_system/ShoujoTenrankai.rb +3 -3
  234. data/lib/bcdice/game_system/Skynauts.rb +2 -2
  235. data/lib/bcdice/game_system/SteamPunkers.rb +7 -5
  236. data/lib/bcdice/game_system/StellarKnights.rb +2 -5
  237. data/lib/bcdice/game_system/SterileLife.rb +2 -2
  238. data/lib/bcdice/game_system/StrangerOfSwordCity.rb +2 -3
  239. data/lib/bcdice/game_system/StratoShout.rb +39 -268
  240. data/lib/bcdice/game_system/StratoShout_Korean.rb +8 -283
  241. data/lib/bcdice/game_system/Strave.rb +2 -2
  242. data/lib/bcdice/game_system/SwordWorld.rb +52 -189
  243. data/lib/bcdice/game_system/SwordWorld2_0.rb +21 -150
  244. data/lib/bcdice/game_system/SwordWorld2_5.rb +126 -41
  245. data/lib/bcdice/game_system/TherapieSein.rb +3 -3
  246. data/lib/bcdice/game_system/TokumeiTenkousei.rb +2 -2
  247. data/lib/bcdice/game_system/TokyoGhostResearch.rb +2 -2
  248. data/lib/bcdice/game_system/Torg.rb +3 -3
  249. data/lib/bcdice/game_system/Torg1_5.rb +1 -1
  250. data/lib/bcdice/game_system/TorgEternity.rb +5 -8
  251. data/lib/bcdice/game_system/TrinitySeven.rb +3 -3
  252. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +7 -7
  253. data/lib/bcdice/game_system/TwilightGunsmoke.rb +2 -3
  254. data/lib/bcdice/game_system/UnsungDuet.rb +139 -0
  255. data/lib/bcdice/game_system/Utakaze.rb +2 -2
  256. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +1 -1
  257. data/lib/bcdice/game_system/Villaciel.rb +1 -2
  258. data/lib/bcdice/game_system/Warhammer.rb +7 -7
  259. data/lib/bcdice/game_system/Warhammer4.rb +326 -0
  260. data/lib/bcdice/game_system/WitchQuest.rb +1 -1
  261. data/lib/bcdice/game_system/WorldOfDarkness.rb +1 -1
  262. data/lib/bcdice/game_system/YankeeYogSothoth.rb +15 -15
  263. data/lib/bcdice/game_system/YearZeroEngine.rb +1 -1
  264. data/lib/bcdice/game_system/Yggdrasill.rb +605 -0
  265. data/lib/bcdice/game_system/ZettaiReido.rb +2 -2
  266. data/lib/bcdice/game_system/cthulhu7th/full_auto.rb +294 -0
  267. data/lib/bcdice/game_system/cthulhu7th/rollable.rb +41 -0
  268. data/lib/bcdice/game_system/filled_with/cook_tables.rb +119 -0
  269. data/lib/bcdice/game_system/filled_with/lot_tables.rb +155 -0
  270. data/lib/bcdice/game_system/meikyu_kingdom/item_table.rb +2 -0
  271. data/lib/bcdice/game_system/meikyu_kingdom/kingdom_name_table.rb +2 -0
  272. data/lib/bcdice/game_system/meikyu_kingdom/landscape_table.rb +2 -0
  273. data/lib/bcdice/game_system/meikyu_kingdom/name_tables.rb +2 -0
  274. data/lib/bcdice/game_system/meikyu_kingdom/placename_table.rb +2 -0
  275. data/lib/bcdice/game_system/meikyu_kingdom/tables.rb +2 -0
  276. data/lib/bcdice/game_system/meikyu_kingdom/word_table.rb +2 -0
  277. data/lib/bcdice/game_system/meikyu_kingdom_basic/item_table.rb +2 -0
  278. data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +2 -0
  279. data/lib/bcdice/game_system/meikyu_kingdom_basic/name_table.rb +2 -0
  280. data/lib/bcdice/game_system/meikyu_kingdom_basic/table.rb +2 -0
  281. data/lib/bcdice/game_system/meikyu_kingdom_basic/word_table.rb +2 -0
  282. data/lib/bcdice/game_system/one_way_heroics/dungeon_table.rb +2 -0
  283. data/lib/bcdice/game_system/one_way_heroics/random_event_table.rb +2 -0
  284. data/lib/bcdice/game_system/one_way_heroics/tables.rb +2 -0
  285. data/lib/bcdice/game_system/satasupe/tables.rb +723 -0
  286. data/lib/bcdice/game_system/sword_world/rating_lexer.rb +47 -0
  287. data/lib/bcdice/game_system/sword_world/rating_parsed.rb +99 -0
  288. data/lib/bcdice/game_system/sword_world/rating_parser.rb +457 -0
  289. data/lib/bcdice/game_system/sword_world/transcendent_test.rb +104 -0
  290. data/lib/bcdice/loader.rb +17 -12
  291. data/lib/bcdice/normalize.rb +3 -1
  292. data/lib/bcdice/preprocessor.rb +23 -44
  293. data/lib/bcdice/randomizer.rb +14 -0
  294. data/lib/bcdice/repl.rb +4 -2
  295. data/lib/bcdice/result.rb +87 -0
  296. data/lib/bcdice/translate.rb +13 -0
  297. data/lib/bcdice/user_defined_dice_table.rb +28 -15
  298. data/lib/bcdice/version.rb +3 -1
  299. metadata +101 -24
  300. data/.editorconfig +0 -21
  301. data/.github/.codecov.yaml +0 -10
  302. data/.github/workflows/coverage.yaml +0 -21
  303. data/.github/workflows/lint.yaml +0 -13
  304. data/.github/workflows/test.yml +0 -20
  305. data/.gitignore +0 -14
  306. data/.rubocop.yml +0 -96
  307. data/.rubocop_todo.yml +0 -113
  308. data/Gemfile +0 -11
  309. data/ROADMAP.md +0 -30
  310. data/Rakefile +0 -118
  311. data/bcdice.gemspec +0 -27
  312. data/bin/repl.rb +0 -21
  313. data/docs/README.txt +0 -2028
  314. data/docs/dicebot_sort_key.md +0 -72
  315. data/docs/how_to_make_dicebot.md +0 -453
  316. data/lib/bcdice/command_parser.rb +0 -242
@@ -22,7 +22,6 @@ module BCDice
22
22
  super(command)
23
23
 
24
24
  # D66は昇順に
25
- @enabled_d66 = true
26
25
  @d66_sort_type = D66SortType::ASC
27
26
  end
28
27
  end
@@ -19,7 +19,7 @@ module BCDice
19
19
  行為判定
20
20
   LR[x,x,x,x,x,x]
21
21
    x の並びには【判定表】の数値を順番に入力する。
22
-   (例: LR[1,3,0,1,2] )
22
+   (例: LR[1,3,0,1,2,3] )
23
23
 
24
24
  ファンブル表
25
25
   FC
@@ -35,13 +35,12 @@ module BCDice
35
35
    x にはダイスの数( 1 - 2 )を指定
36
36
  INFO_MESSAGE_TEXT
37
37
 
38
- register_prefix(['LR\[[0-5],[0-5],[0-5],[0-5],[0-5],[0-5]\]', 'FC', 'WPC', 'EC', 'HR[1-2]'])
38
+ register_prefix('LR\[[0-5],[0-5],[0-5],[0-5],[0-5],[0-5]\]', 'FC', 'WPC', 'EC', 'HR[1-2]')
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
  end
47
46
 
@@ -99,9 +98,7 @@ module BCDice
99
98
  sequences = (1...6).map do |start_key|
100
99
  find_sequence_from_start_key(keys, start_key)
101
100
  end
102
- sequence = sequences.select { |x| x.size > 1 }.max { |a, b| a.size <=> b.size }
103
-
104
- sequence
101
+ sequences.select { |x| x.size > 1 }.max { |a, b| a.size <=> b.size }
105
102
  end
106
103
 
107
104
  def find_sequence_from_start_key(keys, start_key)
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "bcdice/base"
4
+
3
5
  module BCDice
4
6
  module GameSystem
5
7
  class MagicaLogia < Base
@@ -33,9 +35,14 @@ module BCDice
33
35
   並行世界 PWST/終末   PAST/異世界酒場 GBST
34
36
   ほしかげ SLST/旧図書館 OLST
35
37
  世界法則追加表 WLAT/さまよう怪物表 WMT
38
+ ランダム分野表 RCT
36
39
  ランダム特技表 RTT
37
-  指定特技(星) RTS/指定特技(獣) RTB/指定特技(力) RTF
38
-  指定特技(歌) RTP/指定特技(夢) RTD/指定特技(闇) RTN
40
+  星分野ランダム特技表 RTS, RTT1
41
+  獣分野ランダム特技表 RTB, RTT2
42
+  力分野ランダム特技表 RTF, RTT3
43
+  歌分野ランダム特技表 RTP, RTT4
44
+  夢分野ランダム特技表 RTD, RTT5
45
+  闇分野ランダム特技表 RTN, RTT6
39
46
  ブランク秘密表 BST/
40
47
   宿敵表 MIT/謀略表 MOT/因縁表 MAT
41
48
   奇人表 MUT/力場表 MFT/同盟表 MLT
@@ -44,1105 +51,212 @@ module BCDice
44
51
  ・D66ダイスあり
45
52
  INFO_MESSAGE_TEXT
46
53
 
47
- register_prefix(['WT', 'FCT', 'ST', 'FT', 'AT', 'BGT', 'DAT', 'FAT', 'WIT', 'RTT', 'TPT', 'TCT', 'PCT', 'MCT', 'ICT', 'SCT', 'XCT', 'WCT', 'CCT', 'BST', 'PT', 'XEST', 'IWST', 'MCST', 'WDST', 'LWST', 'MIT', 'MOT', 'MAT', 'MUT', 'MFT', 'MLT', 'STB', 'RTS', 'RTB', 'RTF', 'RTP', 'RTD', 'RTN', 'MGCT', 'MBST', 'MAST', 'TCST', 'PWST', 'PAST', 'GBST', 'SLST', 'WLAT', 'WMT', 'FFT', 'OLST', 'TPTB', 'FLT'])
48
-
49
54
  def initialize(command)
50
55
  super(command)
51
56
 
52
57
  @sort_add_dice = true
53
58
  @sort_barabara_dice = true
54
- @enabled_d66 = true
55
59
  @d66_sort_type = D66SortType::ASC
56
60
  end
57
61
 
58
62
  # ゲーム別成功度判定(2D6)
59
- def check_2D6(total, dice_total, dice_list, cmp_op, target)
60
- return '' if target == '?'
61
- return '' unless cmp_op == :>=
63
+ def result_2d6(total, dice_total, dice_list, cmp_op, target)
64
+ return nil if target == '?'
65
+ return nil unless cmp_op == :>=
62
66
 
63
- output =
67
+ result =
64
68
  if dice_total <= 2
65
- " > ファンブル"
69
+ Result.fumble(translate("fumble"))
66
70
  elsif dice_total >= 12
67
- " > スペシャル(魔力1D6点か変調1つ回復)"
71
+ Result.critical(translate("MagicaLogia.special"))
68
72
  elsif total >= target
69
- " > 成功"
73
+ Result.success(translate("success"))
70
74
  else
71
- " > 失敗"
75
+ Result.failure(translate("failure"))
72
76
  end
73
77
 
74
- output += gainMagicElement(dice_list[0], dice_list[1])
75
-
76
- return output
78
+ result.text += gain_magic_element(dice_list[0], dice_list[1])
79
+ return result
77
80
  end
78
81
 
79
- # 表振り分け
80
82
  def eval_game_system_specific_command(command)
81
- output = '1'
82
- type = ""
83
- total_n = ""
84
-
85
- case command
86
- when 'BGT'
87
- type = '経歴表'
88
- output, total_n = magicalogia_background_table
89
- when 'DAT'
90
- type = '初期アンカー表'
91
- output, total_n = magicalogia_defaultanchor_table
92
- when 'FAT'
93
- type = '運命属性表'
94
- output, total_n = magicalogia_fortune_attribution_table
95
- when 'WIT'
96
- type = '願い表'
97
- output, total_n = magicalogia_wish_table
98
- when 'ST'
99
- type = 'シーン表'
100
- output, total_n = magicalogia_scene_table
101
- when 'FT'
102
- type = 'ファンブル表'
103
- output, total_n = magicalogia_fumble_table
104
- when 'WT'
105
- type = '変調表'
106
- output, total_n = magicalogia_wrong_table
107
- when 'FCT'
108
- type = '運命変転表'
109
- output, total_n = magicalogia_fortunechange_table
110
- when 'AT'
111
- type = '事件表'
112
- output, total_n = magicalogia_accident_table
113
- when 'RTT'
114
- type = 'ランダム特技決定表'
115
- output, total_n = magicalogia_random_skill_table
116
- when 'TPT'
117
- type = '時の流れ表'
118
- output, total_n = magicalogia_time_passage_table
119
- when 'TCT'
120
- type = '運命変転「典型的災厄」'
121
- output, total_n = magicalogia_typical_fortune_change_table
122
- when 'PCT'
123
- type = '運命変転「物理的災厄」'
124
- output, total_n = magicalogia_physical_fortune_change_table
125
- when 'MCT'
126
- type = '運命変転「精神的災厄」'
127
- output, total_n = magicalogia_mental_fortune_change_table
128
- when 'ICT'
129
- type = '運命変転「狂気的災厄」'
130
- output, total_n = magicalogia_insanity_fortune_change_table
131
- when 'SCT'
132
- type = '運命変転「社会的災厄」'
133
- output, total_n = magicalogia_social_fortune_change_table
134
- when 'XCT'
135
- type = '運命変転「超常的災厄」'
136
- output, total_n = magicalogia_paranormal_fortune_change_table
137
- when 'WCT'
138
- type = '運命変転「不思議系災厄」'
139
- output, total_n = magicalogia_wonderful_fortune_change_table
140
- when 'CCT'
141
- type = '運命変転「コミカル系災厄」'
142
- output, total_n = magicalogia_comical_fortune_change_table
143
- when 'BST'
144
- type = 'ブランク秘密表'
145
- output, total_n = magicalogia_blank_secret_table
146
- when 'PT'
147
- type = 'プライズ表'
148
- output, total_n = magicalogia_prise_table
149
- when 'MIT'
150
- type = '宿敵表'
151
- output, total_n = magicalogia_inveterate_enemy_table
152
- when 'MOT'
153
- type = '謀略表'
154
- output, total_n = magicalogia_conspiracy_table
155
- when 'MAT'
156
- type = '因縁表'
157
- output, total_n = magicalogia_fate_table
158
- when 'MUT'
159
- type = '奇人表'
160
- output, total_n = magicalogia_cueball_table
161
- when 'MFT'
162
- type = '力場表'
163
- output, total_n = magicalogia_force_field_table
164
- when 'MLT'
165
- type = '同盟表'
166
- output, total_n = magicalogia_alliance_table
167
- when 'XEST'
168
- type = '極限環境シーン表'
169
- output, total_n = magicalogia_extreme_environment_scene_table
170
- when 'IWST'
171
- type = '内面世界シーン表'
172
- output, total_n = magicalogia_innner_world_scene_table
173
- when 'MCST'
174
- type = '魔法都市シーン表'
175
- output, total_n = magicalogia_magic_city_scene_table
176
- when 'WDST'
177
- type = '死後世界シーン表'
178
- output, total_n = magicalogia_world_after_dead_scene_table
179
- when 'LWST'
180
- type = '迷宮世界シーン表'
181
- output, total_n = magicalogia_labyrinth_world_scene_table
182
- when 'STB'
183
- type = '大判シーン表'
184
- output, total_n = magicalogia_new_scene_table
185
- when 'RTS'
186
- type = '指定特技(星)'
187
- output, total_n = magicalogia_random_skill_star_table
188
- when 'RTB'
189
- type = '指定特技(獣)'
190
- output, total_n = magicalogia_random_skill_beast_table
191
- when 'RTF'
192
- type = '指定特技(力)'
193
- output, total_n = magicalogia_random_skill_force_table
194
- when 'RTP'
195
- type = '指定特技(歌)'
196
- output, total_n = magicalogia_random_skill_poem_table
197
- when 'RTD'
198
- type = '指定特技(夢)'
199
- output, total_n = magicalogia_random_skill_dream_table
200
- when 'RTN'
201
- type = '指定特技(闇)'
202
- output, total_n = magicalogia_random_skill_night_table
203
- when 'MGCT'
204
- type = '運命変転「魔法使いの災厄」'
205
- output, total_n = magicalogia_magi_fortune_change_table
206
- when 'MBST'
207
- type = '魔法書架シーン表'
208
- output, total_n = magicalogia_magic_bookshelf_scene_table
209
- when 'MAST'
210
- type = '魔法学院シーン表'
211
- output, total_n = magicalogia_magic_academy_scene_table
212
- when 'TCST'
213
- type = 'クレドの塔シーン表'
214
- output, total_n = magicalogia_tower_credo_scene_table
215
- when 'PWST'
216
- type = '並行世界シーン表'
217
- output, total_n = magicalogia_parallel_world_scene_table
218
- when 'PAST'
219
- type = '終末シーン表'
220
- output, total_n = magicalogia_post_apocalypse_scene_table
221
- when 'GBST'
222
- type = '異世界酒場シーン表'
223
- output, total_n = magicalogia_god_bar_scene_table
224
- when 'SLST'
225
- type = 'ほしかげシーン表'
226
- output, total_n = magicalogia_starlight_scene_table
227
- when 'WLAT'
228
- type = '世界法則追加表'
229
- output, total_n = magicalogia_world_low_add_table
230
- when 'WMT'
231
- type = 'さまよう怪物表'
232
- output, total_n = magicalogia_wondaring_monster_table
233
- when 'FFT'
234
- type = '落花表'
235
- output, total_n = magicalogia_fallen_flower_table
236
- when 'OLST'
237
- type = '旧図書館シーン表'
238
- output, total_n = magicalogia_old_library_scene_table
239
- when 'TPTB'
240
- type = '大判時の流れ表'
241
- output, total_n = magicalogia_new_time_passage_table
242
- when 'FLT'
243
- type = 'その後表'
244
- output, total_n = magicalogia_fallen_after_table
245
-
246
- end
247
-
248
- return "#{type}(#{total_n}) > #{output}"
249
- end
250
-
251
- # シーン表
252
- def magicalogia_scene_table
253
- table = [
254
- '魔法で作り出した次元の狭間。ここは時間や空間から切り離された、どこでもあり、どこでもない場所だ。',
255
- '夢の中。遠く過ぎ去った日々が、あなたの前に現れる。',
256
- '静かなカフェの店内。珈琲の香りと共に、優しく穏やかな雰囲気が満ちている。',
257
- '強く風が吹き、雲が流されていく。遠く、雷鳴が聞こえた。どうやら、一雨きそうだ。',
258
- '無人の路地裏。ここならば、邪魔が入ることもないだろう。',
259
- lambda { return "周囲で〈断章〉が引き起こした魔法災厄が発生する。#{magicalogia_random_skill_table_text_only}の判定を行うこと。成功すると、好きな魔素が一個発生する。失敗すると「運命変転表」を使用する。" },
260
- '夜の街を歩く。暖かな家々の明かりが、遠く見える。',
261
- '読んでいた本を閉じる。そこには、あなたが知りたがっていたことが書かれていた。なるほど、そういうことか。',
262
- '大勢の人々が行き過ぎる雑踏の中。あなたを気に掛ける者は誰もいない。',
263
- '街のはるか上空。あなたは重力から解き放たれ、自由に空を飛ぶ。',
264
- '未来の予感。このままだと起きるかもしれない出来事の幻が現れる。',
265
- ]
266
-
267
- return get_table_by_2d6(table)
268
- end
269
-
270
- # ファンブル表
271
- def magicalogia_fumble_table
272
- table = [
273
- '魔法災厄が、あなたのアンカーに降りかかる。「運命変転」が発生する。',
274
- '魔法災厄が、あなたの魔素を奪い取る。チャージしている魔素の中から、好きな組み合わせで2点減少する。',
275
- '魔法の制御に失敗してしまう。【魔力】が1点減少する。',
276
- '魔法災厄になり、そのサイクルが終了するまで、行為判定にマイナス1の修正が付く。',
277
- '魔法災厄が、直接あなたに降りかかる。変調表を振り、その変調を受ける。',
278
- 'ふぅ、危なかった。特に何も起こらない。',
279
- ]
280
-
281
- return get_table_by_1d6(table)
282
- end
283
-
284
- # 変調表
285
- def magicalogia_wrong_table
286
- table = [
287
- '『封印』自分の魔法(習得タイプが装備以外)からランダムに一つ選ぶ。選んだ魔法のチェック欄をチェックする。その魔法を使用するには【魔力】を2点消費しなくてはいけない。',
288
- '『綻び』魔法戦の間、各ラウンドの終了時に自分の【魔力】が1点減少する。',
289
- '『虚弱』【攻撃力】が1点減少する。',
290
- '『病魔』【防御力】が1点減少する。',
291
- '『遮蔽』【根源力】が1点減少する',
292
- lambda { return "『不運』#{magicalogia_random_skill_table_text_only}のチェック欄をチェックする。その特技が使用不能になり、その分野の特技が指定特技になった判定を行うとき、マイナス1の修正が付く。" },
293
- ]
294
-
295
- return get_table_by_1d6(table)
296
- end
297
-
298
- # 運命変転表
299
- def magicalogia_fortunechange_table
300
- table = [
301
- '『挫折』そのキャラクターは、自分にとって大切だった夢を諦める。',
302
- '『別離』そのキャラクターにとって大切な人――親友や恋人、親や兄弟などを失う。',
303
- '『大病』そのキャラクターは、不治の病を負う。',
304
- '『借金』そのキャラクターは、悪人に利用され多額の借金を負う。',
305
- '『不和』そのキャラクターは、人間関係に失敗し深い心の傷を負う。',
306
- '『事故』そのキャラクターは交通事故にあい、取り返しのつかない怪我を負う。',
307
- ]
308
- return get_table_by_1d6(table)
83
+ self.class::SKILL_TABLE.roll_command(@randomizer, command) ||
84
+ roll_tables(command, self.class::TABLES)
309
85
  end
310
86
 
311
- # 事件表
312
- def magicalogia_accident_table
313
- table = [
314
- '不意のプレゼント、素晴らしいアイデア、悪魔的な取引……あなたは好きな魔素を1つ獲得するか【魔力】を1D6点回復できる。どちらかを選んだ場合、その人物に対する【運命】が1点上昇する。【運命】の属性は、ゲームマスターが自由に決定できる。',
315
- '気高き犠牲、真摯な想い、圧倒的な力……その人物に対する【運命】が1点上昇する。【運命】の属性は「尊敬」になる。',
316
- '軽い口論、殴り合いの喧嘩、魔法戦……互いに1D6を振り、低い目を振った方が、高い目を振った方に対して【運命】が1点上昇する。【運命】の属性は高い目を振った方が、自由に決定できる。',
317
- '裏切り、策謀、不幸な誤解……その人物に対する【運命】が1点上昇する。【運命】の属性は「宿敵」になる。',
318
- '意図せぬ感謝、窮地からの救済、一生のお願いを叶える……その人物に対する【運命】が1点上昇する。【運命】の属性は「支配」になる。',
319
- lambda { return "生ける屍の群れ、地獄の業火、迷宮化……魔法災厄に襲われる。#{magicalogia_random_skill_table_text_only}の判定を行う。成功すると好きな魔素が1点発生する。失敗すると、その人物に対し「運命変転表」を使用する。" },
320
- '道路の曲がり角、コンビニ、空から落ちてくる……偶然出会う。その人物に対する【運命】が1点上昇する。【運命】の属性は「興味」になる。',
321
- '魂のひらめき、愛の告白、怪しい抱擁……その人物に対する【運命】が1点上昇する。【運命】の属性は「恋愛」になる。',
322
- '師弟関係、恋人同士、すれ違う想い……その人物との未来が垣間見える。たがいに対する【運命】が1点上昇する。',
323
- '懐かしい表情、大切な思い出、伴侶となる予感……その人物に対する【運命】が1点上昇する。【運命】の属性は「血縁」になる。',
324
- '献身的な看護、魔法的な祝福、奇跡……その人物に対する【運命】が1点上昇する。【運命】の属性は自由に決定できる。もしも関係欄に疵があれば、その疵を1つ関係欄から消すことができる。',
325
- ]
326
-
327
- return get_table_by_2d6(table)
328
- end
87
+ private
329
88
 
330
89
  # 魔素獲得チェック
331
- def gainMagicElement(dice1, dice2)
90
+ def gain_magic_element(dice1, dice2)
332
91
  return "" unless dice1 == dice2
333
92
 
334
- # ゾロ目
335
- table = ['星', '獣', '力', '歌', '夢', '闇']
336
- return " > " + table[dice1 - 1] + "の魔素2が発生"
337
- end
338
-
339
- # 経歴表
340
- def magicalogia_background_table
341
- table = [
342
- '書警/ブックウォッチ',
343
- '司書/ライブラリアン',
344
- '書工/アルチザン',
345
- '訪問者/ゲスト',
346
- '異端者/アウトサイダー',
347
- '外典/アポクリファ',
348
- ]
349
-
350
- return get_table_by_1d6(table)
351
- end
352
-
353
- # 初期アンカー表
354
- def magicalogia_defaultanchor_table
355
- table = [
356
- '『恩人』あなたは、困っているところを、そのアンカーに助けてもらった。',
357
- '『居候』あなたかアンカーは、どちらかの家や経営するアパートに住んでいる。',
358
- '『酒友』あなたとアンカーは、酒飲み友達である。',
359
- '『常連』あなたかアンカーは、その仕事場によくやって来る。',
360
- '『同人』あなたは、そのアンカーと同じ趣味を楽しむ同好の士である。',
361
- '『隣人』あなたは、そのアンカーの近所に住んでいる。',
362
- '『同輩』あなたはそのアンカーと仕事場、もしくは学校が同じである。',
363
- '『文通』あなたは、手紙やメール越しにそのアンカーと意見を交換している。',
364
- '『旧友』あなたは、そのアンカーと以前に、親交があった。',
365
- '『庇護』あなたは、そのアンカーを秘かに見守っている。',
366
- '『情人』あなたは、そのアンカーと肉体関係を結んでいる。',
367
- ]
368
-
369
- return get_table_by_2d6(table)
370
- end
371
-
372
- # 運命属性表
373
- def magicalogia_fortune_attribution_table
374
- table = [
375
- '『血縁』自分や、自分が愛した者の親類や家族。',
376
- '『支配』あなたの部下になることが運命づけられた相手。',
377
- '『宿敵』何らかの方法で戦いあい、競い合う不倶戴天の敵。',
378
- '『恋愛』心を奪われ、相手に強い感情を抱いている存在。',
379
- '『興味』とても稀少だったり、不可解だったりして研究や観察をしたくなる対象。',
380
- '『尊敬』その才能や思想、姿勢に対し畏敬や尊敬を抱く人物。',
381
- ]
382
-
383
- return get_table_by_1d6(table)
384
- end
385
-
386
- # 願い表
387
- def magicalogia_wish_table
388
- table = [
389
- '自分以外の特定の誰かを助けてあげて欲しい。',
390
- '自分の大切な人や憧れの人に会わせて欲しい。',
391
- '自分をとりまく不幸を消し去って欲しい。',
392
- '自分のなくした何かを取り戻して欲しい。',
393
- '特定の誰かを罰して欲しい。',
394
- '自分の欲望(金銭欲、名誉欲、肉欲、知識欲など)を満たして欲しい。',
395
- ]
396
-
397
- return get_table_by_1d6(table)
93
+ element = translate("MagicaLogia.elements.items")[dice1 - 1]
94
+ return " " + format(translate("MagicaLogia.elements.format"), text: element)
398
95
  end
399
96
 
400
- # 指定特技ランダム決定表
401
- def magicalogia_random_skill_table
402
- skillTableFull = [
403
- ['星', ['黄金', '大地', '森', '道', '海', '静寂', '雨', '嵐', '太陽', '天空', '異界']],
404
- ['獣', ['肉', '蟲', '花', '血', '鱗', '混沌', '牙', '叫び', '怒り', '翼', 'エロス']],
405
- ['力', ['重力', '風', '流れ', '水', '波', '自由', '衝撃', '雷', '炎', '光', '円環']],
406
- ['歌', ['物語', '旋律', '涙', '別れ', '微笑み', '想い', '勝利', '恋', '情熱', '癒し', '時']],
407
- ['夢', ['追憶', '謎', '嘘', '不安', '眠り', '偶然', '幻', '狂気', '祈り', '希望', '未来']],
408
- ['闇', ['深淵', '腐敗', '裏切り', '迷い', '怠惰', '歪み', '不幸', 'バカ', '悪意', '絶望', '死']],
409
- ]
410
-
411
- skillTable, total_n = get_table_by_1d6(skillTableFull)
412
- tableName, skillTable = skillTable
413
- skill, total_n2 = get_table_by_2d6(skillTable)
414
- return "「#{tableName}」≪#{skill}≫", "#{total_n},#{total_n2}"
415
- end
416
-
417
- # 特技だけ抜きたい時用 あまりきれいでない
418
- def magicalogia_random_skill_table_text_only
419
- text, = magicalogia_random_skill_table
420
- return text
421
- end
422
-
423
- # 魔素の種類獲得表
424
- def get_magic_element_type
425
- table = ['星', '獣', '力', '歌', '夢', '闇']
426
- return get_table_by_1d6(table)
427
- end
428
-
429
- # 時の流れ表
430
- def magicalogia_time_passage_table
431
- output = ""
432
- num = @randomizer.roll_once(6)
433
-
434
- if num == 1
435
- output = "標的となり追われる生活が続いた。ここ数年は苦しい戦いの日々だった。#{magicalogia_random_skill_table_text_only}の判定を行う。成功するとセッション終了時に追加の功績点1点。失敗すると「運命変転」発生。"
436
- elsif num == 2
437
- output = "冒険の日々の途中、大きな幸せが訪れる。#{magicalogia_random_skill_table_text_only}の判定を行う。成功すると、自分のアンカーの災厄か、自分の疵一つを無効化する。"
438
- elsif num == 3
439
- text1, = get_magic_element_type
440
- text2, = get_magic_element_type
441
- text3, = get_magic_element_type
442
- output = "瞑想から目を覚ます。もうそんな時間か。おかげで十分な魔素を得ることができた。「#{text1}」「#{text2}」「#{text3}」の魔素を獲得する。"
443
- elsif num == 4
444
- output = "傷を癒すには十分な時間だ。自分の【魔力】を最大値まで回復する。もしくは「魔力のリセット」を行うことができる。好きな方を選ぶこと。"
445
- elsif num == 5
446
- output = "平穏な日々の中にも、ちょっとした事件が起きる。自分のアンカーを一人選んで「事件表」を振ることができる。"
447
- elsif num == 6
448
- output = "日々研鑚を重ね、魔法の修行に精進した。もしも望むなら、蔵書欄にある魔法を、自分の修得できる範囲の中で、現在とは別の魔法に変更して構わない。もしも、魔素がチャージされていた魔法を見習得にした場合、その魔素は失われる。"
97
+ class SkillExpandTable
98
+ def self.from_i18n(key, locale, skill_table)
99
+ table = I18n.t(key, locale: locale, raise: false)
100
+ new(table[:name], table[:type], table[:items], skill_table)
449
101
  end
450
102
 
451
- return output, num
452
- end
453
-
454
- # 典型的災厄
455
- def magicalogia_typical_fortune_change_table
456
- table = [
457
- '挫折。自分にとって大切だった夢をあきらめる。',
458
- '別離。自分にとって大切な人―親友や恋人、親や兄弟などを失う。',
459
- '大病。不治の病を負う。',
460
- '借金。悪人に利用され、多額の借金を負う。',
461
- '不和。人間関係に失敗し深い心の傷を負う。',
462
- '事故。交通事故にあい、取り返しのつかないケガを負う。',
463
- ]
464
- return get_table_by_1d6(table)
465
- end
466
-
467
- # 物理的災厄
468
- def magicalogia_physical_fortune_change_table
469
- table = [
470
- '火事。自分の家が焼け落ち、帰るところが無くなる。',
471
- '盗難。自分の大切なものが盗まれ、失われる。',
472
- '災害。自然災害に襲われ、生活環境が激変する',
473
- '失明。眼が見えなくなる。',
474
- '誘拐。何者かにさらわれ、監禁される。',
475
- '傷害。通り魔やあなたを憎む者に傷を負わされる。',
476
- ]
477
- return get_table_by_1d6(table)
478
- end
103
+ def initialize(name, type, items, skill_table)
104
+ @name = name
105
+ @items = items.freeze
106
+ @skill_table = skill_table
479
107
 
480
- # 精神的災厄
481
- def magicalogia_mental_fortune_change_table
482
- table = [
483
- '倦怠。疲労感に襲われ、何もやる気がなくなる。',
484
- '家出。今、自分がいる場所に安らぎを感じなくなり、失踪する。',
485
- '憎悪。周囲の誰かやPCに対して激しい憎悪を抱くようになる。',
486
- '不眠。眠れなくなり、疲労する。',
487
- '虚言。本当のことを話せなくなってしまう。',
488
- '記憶喪失。友達やPCのことを忘れてしまう。',
489
- ]
490
- return get_table_by_1d6(table)
491
- end
108
+ m = /(\d+)D(\d+)/i.match(type)
109
+ unless m
110
+ raise ArgumentError, "Unexpected table type: #{type}"
111
+ end
492
112
 
493
- # 狂気的災厄
494
- def magicalogia_insanity_fortune_change_table
495
- table = [
496
- '二重人格。もう一つの人格が現れ、勝手な行動を始める。',
497
- '恐怖。高所や異性、蜘蛛など、特定の何かに対する恐怖症になる。',
498
- '妄想。突拍子もない奇妙な妄想が頭を離れなくなる。',
499
- '偏愛。特定の物や状況などに熱狂的な愛情を示すようになる。',
500
- '暴走。時折、自分の感情が制御できなくなり、凶暴化する。',
501
- '発情。体温が上昇、脈拍が増大し、性的に興奮状態になる。',
502
- ]
503
- return get_table_by_1d6(table)
504
- end
113
+ @times = m[1].to_i
114
+ @sides = m[2].to_i
115
+ end
505
116
 
506
- # 社会的災厄
507
- def magicalogia_social_fortune_change_table
508
- table = [
509
- '逮捕。無実の罪で捕らわれ、留置される。',
510
- '裏切り。信頼していた人物に騙されたり、恋人に浮気されたりする。',
511
- '暴露。自分の隠しておきたい秘密を暴露される。',
512
- '籠絡。どう見てもよくない相手に心を奪われる。',
513
- '加害。人を傷つけたり、殺めたりしてしまう。',
514
- '多忙。とてつもない量の仕事に追われ、心身共に疲労する。',
515
- ]
516
- return get_table_by_1d6(table)
517
- end
117
+ def roll(randomizer)
118
+ value = randomizer.roll_sum(@times, @sides)
119
+ text = expand(@items[value - @times], randomizer)
518
120
 
519
- # 超常的災厄
520
- def magicalogia_paranormal_fortune_change_table
521
- table = [
522
- '霊感。見えるはずのないものが見えるようになる。',
523
- '不運。身の回りで、不幸な偶然が頻発するようになる。',
524
- '感染。吸血鬼やゾンビなど、怪物になりかかってしまう。',
525
- '阻害。自分の存在が、魔法的存在以外から見えなくなってしまう。',
526
- '変身。姿が動物や別の人間に変わってしまう。',
527
- '標的。殺人鬼や魔法災厄など、悪意を引き寄せてしまう。',
528
- ]
529
- return get_table_by_1d6(table)
530
- end
121
+ return DiceTable::RollResult.new(@name, value, text)
122
+ end
531
123
 
532
- # 不思議系災厄
533
- def magicalogia_wonderful_fortune_change_table
534
- table = [
535
- '邪気眼。ついつい痛い言動を繰り返すようになってしまう。',
536
- 'ドジ。ありえないほどよく転び、物を壊す体質になってしまう。',
537
- '方向音痴。信じられないくらい道に迷うようになってしまう。',
538
- '変語尾。なぜか、自分が話す言葉の語尾が変になってしまう。',
539
- 'ひらがな。話す言葉が全てひらがなで聞こえるようになる。',
540
- 'ヤンデレ。PCのことを病的に愛するようになり、自分以外にPCへの好意を持つ者に対して攻撃的になる。',
541
- ]
542
- return get_table_by_1d6(table)
543
- end
124
+ private
544
125
 
545
- # コミカル系災厄
546
- def magicalogia_comical_fortune_change_table
547
- table = [
548
- '性別逆転。自分の肉体の性別が逆転してしまう。',
549
- '猫耳。頭から猫耳が生える。',
550
- '太る。びっくりするほど太る。',
551
- '足がくさい。哀しくなるほど足がくさくなる。',
552
- 'ハラペコ。一回の食事で、ご飯を二十杯くらいおかわりしないと空腹でなにもできなくなる。',
553
- '脱衣。その場ですべての服が脱げる。',
554
- ]
555
- return get_table_by_1d6(table)
556
- end
126
+ def expand(chosen, randomizer)
127
+ chosen.gsub(/%{([a-z]+)}/) do
128
+ m = Regexp.last_match
129
+ type = m[1].to_sym
557
130
 
558
- # ブランク秘密表用テーブル
559
- # 宿敵表
560
- def magicalogia_inveterate_enemy_table
561
- output = ""
562
- num = @randomizer.roll_once(6)
563
- if num == 1
564
- output = '嫉妬。その人物は、実は調査者の実力をねたむ〈大法典〉の魔法使いだった。データは〈火刑人〉を使用する。ただし、魔法の使用には魔素を必要とし、魔法使いをコレクションすることはできない。GMは調査者やそのアンカーに魔法戦を挑み、邪魔をするように操作すること。'
565
- elsif num == 2
566
- output = '蒐集。その人物は、実は調査者をコレクションしようとする〈書籍卿〉だった。データは〈混血主義者〉を使用する。GMは〈断章〉に立ち会ったり、魔法戦を挑んだりして、調査者の邪魔をするように操作すること。'
567
- elsif num == 3
568
- output = '妨害。その人物は、実は現在調査者が追っている〈断章〉を奪おうとする〈書籍卿〉だった。データは〈囁きの誘惑者〉を使用する。GMは〈断章〉に立ち会ったり、魔法戦を挑んだりして、調査者の邪魔をするように操作すること。'
569
- elsif num == 4
570
- output = "断章。その人物には、今回の件と関係ない〈断章〉が憑依していた。データは〈猛獣〉を使用する。ただし特技と召喚する騎士は#{magicalogia_random_skill_table_text_only}に変更する。GMは〈断章〉に立ち会ったり、魔法戦を挑んだりして、調査者の邪魔するように操作すること。"
571
- elsif num == 5
572
- output = '黒服。その人物は、実は魔法やオバケなどのあらゆる超常現象を否定する秘密結社「サークルエンド」の工作員だった。データは〈サークルエンド〉を使用する。GMは【隠蔽工作】を使用したり、魔法戦を挑んだりして、調査者の邪魔をするように操作すること。'
573
- elsif num == 6
574
- output = '忍者。その人物は、実はあなたを殺せという使命を受けた忍者である。データは〈忍者〉を使用する。GMは〈断章〉に立ち会ったり、魔法戦を挑んだりして、調査者の邪魔をするようにそうさすること。'
131
+ roll_skill(type, randomizer)
132
+ end
575
133
  end
576
- return output, num
577
- end
578
134
 
579
- # 謀略表
580
- def magicalogia_conspiracy_table
581
- table = [
582
- '爆弾。その人物には、調査者の肉体を爆発させる魔法爆弾が仕掛けられていた。この【秘密】が公開されると、調査者は1d6点のダメージを受ける。',
583
- '呪詛。その人物には、調査者に感染する呪いの魔法が仕掛けられていた。この【秘密】が公開されると、調査者はランダムに選んだ変調を一つ受ける。',
584
- '幽閉。その人物には、調査者を異次元の牢獄に閉じ込める魔法が仕掛けられていた。この【秘密】が公開されると、調査者のプレイヤーがシーンプレイヤーになるか、クライマックスフェイズになるまで、シーンに登場できなくなる(マスターシーンでの登場の可否はGMが決定できる)。',
585
- '強化。その人物には、調査者の運命の力を吸収する魔法が仕掛けられていた。この【秘密】が公開されると、調査者のアンカーの数と同じ数まで、セッションに登場する〈断章〉の憑依深度が1上昇する。',
586
- '不幸。その人物には、調査者のアンカーに不幸な出来事を起こす魔法が仕掛けられていた。この【秘密】が公開されると、調査者のアンカーの中から〈愚者〉を一人選び、そのNPCに運命変転表を使用する。',
587
- '脱走。その人物には、〈断章〉の逃亡を手助けする魔法が仕掛けられていた。この【秘密】が公開されると、GMは〈断章〉一つとNPC一人を選ぶ。その〈断章〉は、そのNPCに憑依できる。このときGMは、すでに魔法使いによって回収された〈断章〉を選んでも良く、その場合【魔力】は1d6点回復する。',
588
- ]
589
- return get_table_by_1d6(table)
590
- end
135
+ CATEGORIES = [:star, :beast, :force, :poem, :dream, :night].freeze
591
136
 
592
- # 因縁表
593
- def magicalogia_fate_table
594
- table = [
595
- '思慕。その人物は、実は調査者のことを知っており、深く愛していた。調査者はその人物に対する【運命】を2点上昇し、その属性を「恋愛」にする。その人物の【運命】の属性が「恋愛」の間、調査者は、この人物に対する【運命】が1点上昇するたび、【魔力】がその【運命】の値だけ回復する。',
596
- '縁者。その人物は、実は調査者と血縁関係があった。調査者はその人物に対する【運命】を2点上昇し、その属性を「血縁」にする。その人物の【運命】の属性が「血縁」の間、調査者の復活判定に、その【運命】の値だけプラスの修正がつく。',
597
- '怨恨。その人物は、実は調査者に深い恨みを持つ人物だった。調査者はその人物に対する【運命】を2点上昇し、その属性を「宿敵」にする。その人物の【運命】の属性が「宿敵」の間は、調査者がファンブルすると、その【運命】の値だけ【魔力】が減少する。',
598
- '狂信。その人物は、実は調査者を崇拝していた。調査者はその人物に対する【運命】を2点上昇し、その属性を「支配」にする。その人物の【運命】の属性が「支配」の間、調査者は、その人物に憑依した〈断章〉に魔法戦を挑んだ場合、自動的に勝利することができる。ただし、調査者は、行為判定のとき、その【運命】の値以下の目が出るとファンブルになる。',
599
- '分身。その人物は、実は調査者の魔法によって切り離された魂の一部だった。そのNPCは、調査者と融合し、調査者は功績点を1点獲得する。',
600
- '無関係。その人物は、今回の事件に特に関係はなかった。しかし、この出会いは本当に無意味だったのだろうか? 調査者は、その人物を対象として事件表を振ること。',
601
- ]
602
- return get_table_by_1d6(table)
603
- end
137
+ def roll_skill(type, randomizer)
138
+ if type == :skill
139
+ return @skill_table.roll_skill(randomizer)
140
+ end
604
141
 
605
- # 奇人表
606
- def magicalogia_cueball_table
607
- table = [
608
- '寿命。その人物の命脈は尽きていた。この【秘密】が公開されると、その人物は死亡する。',
609
- '殺意。その人物は、世の中に対する憎悪に溢れ、無差別に誰かを傷つけようとしていた。GMはサイクルの終わりにランダムにこの【秘密】の持ち主以外のNPCを一人選ぶ。そのNPCが〈断章〉に憑依されていない〈愚者〉なら死亡し、そうでなければ、この【秘密】の持ち主本人が死亡する。このとき、いずれにせよその死亡を望まないキャラクターは「闇」の分野かの中からランダムに特技一つを選び、判定を行うことができる。判定に成功するとその死亡を無効化できる。',
610
- '強運。その人物は、一種の特異点で、とても強い幸運の持ち主だった。このNPCは、プライズとして扱う。このプライズの持ち主は、あらゆる行為判定を行うとき、プラス1の修正がつく。調査者は、このプライズを獲得する。',
611
- '疵痕。その人物は、過去に魔法によって大切なものを奪われており、魔法とその関係者を憎んでいる。その人物がいるシーンでは、召喚と呪文の判定にマイナス2の修正がつく。',
612
- '善人。その人物は、強く優しい精神の持ち主だった。その人物に対する【運命】を3点上昇する。',
613
- '依代。その人物は、霊媒体質で何かに憑依されやすい。この人物に〈断章〉が憑依した場合、【攻撃力】と【防御力】が2点ずつ上昇する。この【秘密】が公開されると、GMはサイクルの終わりに〈断章〉一つを選び、その憑依の対象をこのNPCに変更することができるようになる。ただし、すでに魔法使いによって回収された〈断章〉を選ぶことはできない。',
614
- ]
615
- return get_table_by_1d6(table)
616
- end
142
+ if type == :element
143
+ return @skill_table.roll_category(randomizer)
144
+ end
617
145
 
618
- # 力場表
619
- def magicalogia_force_field_table
620
- table = [
621
- '加護。その人物の頭上には、常に星の恩寵が降り注いでいる。この【秘密】が公開されると、そのシーンに「星」の魔素が2点発生する。また、このセッションの間、この人物に対する【運命】が1点上昇したキャラクターは「星」の魔素を2点獲得する。',
622
- '変化(へんげ)。その人物は、実は歳を経た動物―狐や狸などが化けた存在である。この【秘密】が公開されると、そのシーンに「獣」の魔素が2点発生する。また、このセッションの間、この人物に対する【運命】が1点上昇したキャラクターは「獣」の魔素を2点獲得する。',
623
- '超能力。その人物には、ESPやPKなど、潜在的な超能力が眠っている。この【秘密】が公開されると、そのシーンに「力」の魔素が2点発生する。また、このセッションの間、この人物に対する【運命】が1点上昇したキャラクターは「力」の魔素を2点獲得する。',
624
- '詩人。その人物は、詩神に祝福された存在である。この【秘密】が公開されると、そのシーンに「歌」の魔素が2点発生する。また、このセッションの間、この人物に対する【運命】が1点上昇したキャラクターは「歌」の魔素を2点獲得する。',
625
- '夢想家。その人物には、大きな理想や実現したいと思っている夢がある。何か大きなことを成し遂げようとしている。。この【秘密】が公開されると、そのシーンに「夢」の魔素が2点発生する。また、このセッションの間、この人物に対する【運命】が1点上昇したキャラクターは「夢」の魔素を2点獲得する。',
626
- '暗黒。その人物は、呪われた運命を背負っており、世界の破滅を呼び込む可能性を持っている。この【秘密】が公開されると、そのシーンに「闇」の魔素が2点発生する。また、このセッションの間、この人物に対する【運命】が1点上昇したキャラクターは「闇」の魔素を2点獲得する。',
627
- ]
628
- return get_table_by_1d6(table)
629
- end
146
+ index = CATEGORIES.index(type)
147
+ raise ArgumentError unless index
630
148
 
631
- # 同盟表
632
- def magicalogia_alliance_table
633
- output = ""
634
- num = @randomizer.roll_once(6)
635
- if num == 1
636
- output = "精霊。その人物は、実は姿を変え、人間界に顕現した精霊だった。象徴する特技は#{magicalogia_random_skill_table_text_only}である。調査者は、そのセッションの間だけ、その特技の【精霊召喚】を修得する。また、セッションに一度だけ、その【精霊召喚】の判定を自動的に成功にすることができる。"
637
- elsif num == 2
638
- output = "騎士。その人物は、実は姿を変え、人間界に顕現した騎士だった。象徴する特技は#{magicalogia_random_skill_table_text_only}である。調査者は、そのセッションの間だけ、その特技の【騎士召喚】を修得する。また、セッションに一度だけ、その【騎士召喚】の判定を自動的に成功にすることができる。"
639
- elsif num == 3
640
- output = "魔王。その人物は、実は姿を変え、人間界に顕現した魔王だった。象徴する特技は#{magicalogia_random_skill_table_text_only}である。調査者は、そのセッションの間だけ、その特技の【魔王召喚】を修得する。また、セッションに一度だけ、その【魔王召喚】の判定を自動的に成功にすることができる。"
641
- elsif num == 4
642
- output = '魔法屋。その人物は、魔法の道具を取引するタリスモンガーだった。以降、この人物のいるシーンでは、自分のチャージしている魔素1つを別の魔素1つに交換してもらうことができる。また、この人物のいるシーンでは、自分の装備魔法1つを修得可能な別の装備魔法1つに交換してもらうことができる。'
643
- elsif num == 5
644
- output = '師匠。その人物は、かつて調査者に魔法を教えた師匠だった。以降、この人物のいるシーンでは、自分の修得している特技1つを修得可能な別の特技1つに交換してもらうことができる。また、この人物のいるシーンでは、自分の呪文魔法1つを修得可能な別の呪文魔法1つに交換してもらうことができる。'
645
- elsif num == 6
646
- output = '無垢。その人物は、汚れ無き心の持ち主だった。このNPCは、プライズとして扱う。このプライズの持ち主は、セッション中に一度、【浄化】の呪文をコストなしで使用することができる。この判定は自動的に成功する。'
149
+ @skill_table.categories[index].roll(randomizer).name
647
150
  end
648
- return output, num
649
151
  end
650
152
 
651
- # ブランク秘密表
652
- def magicalogia_blank_secret_table
653
- outtext = ""
654
- outnum = ''
655
- num = @randomizer.roll_once(6)
656
- if num == 1
657
- outtext, outnum = magicalogia_inveterate_enemy_table
658
- outtext = "宿敵。#{outtext}"
659
- elsif num == 2
660
- outtext, outnum = magicalogia_conspiracy_table
661
- outtext = "謀略。#{outtext}"
662
- elsif num == 3
663
- outtext, outnum = magicalogia_fate_table
664
- outtext = "因縁。#{outtext}"
665
- elsif num == 4
666
- outtext, outnum = magicalogia_cueball_table
667
- outtext = "奇人。#{outtext}"
668
- elsif num == 5
669
- outtext, outnum = magicalogia_force_field_table
670
- outtext = "力場。#{outtext}"
671
- elsif num == 6
672
- outtext, outnum = magicalogia_alliance_table
673
- outtext = "同盟。#{outtext}"
153
+ class FallenAfterTable
154
+ def self.from_i18n(key, locale)
155
+ table = I18n.t(key, locale: locale, raise: true)
156
+ new(table[:name], table[:items_lower], table[:items_higher])
674
157
  end
675
- outnum = "#{num},#{outnum}"
676
- return outtext, outnum
677
- end
678
-
679
- # プライズ表
680
- def magicalogia_prise_table
681
- table = [
682
- '敗者は内側から破裂し、四散する。功績点を1点獲得する。',
683
- '敗者は無数の蟲や小動物へと姿を変え、それを使い魔とする。勝者は好きな特技(魂の特技は除く)を一つ選ぶ。そのセッションの間、指定特技がその特技の【精霊召喚】【魔剣召喚】【悪夢召喚】のうち一つを修得する。',
684
- '敗者は爆発音と共にどこかへと消え、辺りには硫黄のような匂いだけが残る。勝者はそのセッション中に、一度だけ好きなタイミングで「変調」一種を回復することができる。',
685
- '敗者は奇妙な形をした数枚の金貨へと姿を変える。勝者は倒した相手のランクと等しい魔貨を獲得する',
686
- '敗者は地面から突如現れた無数の腕に引き込まれながら、勝者に向かって賞賛の言葉と共に重要な何かを語る。公開されているハンドアウト一つを選び、その【秘密】を公開する。',
687
- '敗者は無数の光の粒へとなっていき、そこから魔素を得る。勝者は好きな魔素を2点獲得する(立会人に渡してもよい)。',
688
- '敗者はバラバラのページとなって地面に散らばり、そこから未知の力を読み取る。勝者は【一時的魔力】を2点獲得する。',
689
- '敗者は妙なる音楽へと変わり、その曲は勝者の心にしみいる。勝者は倒した相手のランクと等しい魔貨を獲得する。',
690
- '敗者は一輪の花となる。勝者はそのセッション中に、一度だけ自分が振った行為判定のサイコロを振り直す権利を得る。',
691
- '敗者は言葉のかけらとなっていき、勝者はそこから未来の運命を読み取る。勝者は「事件表」を使用し、その結果を記録しておく。それ以降、そのセッション中のドラマシーンに、同じシーンに登場しているキャラクター一人を選び、一度だけその結果を適用できる。',
692
- '敗者は影となって、その場に焼き付き、異境への入り口となる。勝者は、好きな異境を一つ選ぶ。そのセッションの間、その異境へ移動できるようになる。',
693
- ]
694
- return get_table_by_2d6(table)
695
- end
696
-
697
- # 極限環境シーン表
698
- def magicalogia_extreme_environment_scene_table
699
- table = [
700
- '上下左右も分からない、完全なる闇。このシーンに登場しているPCのうち一人は、≪光≫の判定を行う。成功すると、闇の魔素二個を獲得する。失敗すると、「遮断」の変調を受ける。誰かが判定を行うと、成否に関わらずこの効果はなくなる。',
701
- '眼前に広がる業火の海。何もかも喰らい尽すような敵意は圧倒的だ。≪炎≫の判定を行う。失敗すると【魔力】が2点減少する。',
702
- '激しい天候で地形が一変する。さきほどまでの光景が嘘のようだ。≪嵐≫で判定を行う。失敗すると、【魔力】が1点減少する。',
703
- 'どこまでも続く、砂漠。舞い上がる砂塵に、目を開けていられない。≪大地≫の判定を行う。失敗すると、「封印」の変調を受ける。',
704
- '言葉さえも凍り付きそうな極寒。生き物の気配は感じられない。【魔力】が1点減少する。',
705
- lambda { return "苛酷な自然環境によってキミたちは窮地に立たされる。#{magicalogia_random_skill_table_text_only}の判定を行うこと。成功すると、なんとか使えそうなものを探し、好きな魔素が一個発生する。失敗すると、キミの負った傷は時間と空間を超えて、キミのアンカーに不幸をもたらす。「運命変転」が発生する。" },
706
- '一面の雪野原に、てんてんと足跡が残っている。どうやら、先客がいるらしい。',
707
- '切り立つ崖の上。眼下には大きな海が広がっている。上空からは海鳥の鳴き声が聞こえてくる。',
708
- '高重力の地。身体全体が鉛に変わってしまったかのように感じられる。≪重力≫の判定を行う。失敗すると【魔力】が1点減少する。',
709
- '深い水の底。青に染まった空間に、何かが漂っている。このシーンに登場しているPCのうち一人は≪海≫の判定を行うことができる。成功すると、星の魔素を三個獲得する。失敗すると、【魔力】が2点減少する。誰かが判定を行うと、成否にかかわらずこの効果はなくなる。',
710
- '鼓膜を破りそうな、轟音が鳴り響く。言葉による意思の疎通は諦めた方がよさそうだ。≪旋律≫の判定を行う。失敗すると、チャージしているまその中から好きなものを二個失う。',
711
- ]
712
- return get_table_by_2d6(table)
713
- end
714
-
715
- # 内面世界シーン表
716
- def magicalogia_innner_world_scene_table
717
- table = [
718
- '肌の色と熱い吐息で満たされた場所。無数の男女が、思いつく限りの肉の欲望を実践している。このシーンに登場しているPCのうち一人は、≪エロス≫の判定を行うことができる。成功すると【一時的魔力】を1点獲得する。失敗すると【魔力】が2点減少する。誰かが判定を行うと、成否にかかわらずこの効果はなくなる。',
719
- '壁一面に、黒光りする虫がびっしりと張り付き、羽音を立てている部屋。この精神の持ち主は、虫が好きなのだろうか、嫌いなのだろうか。このシーンに登場しているPCのうち一人は、≪蟲≫の判定を行うことができる。成功すると、元型「蟲の騎士」をそのセッションの間、相棒にできる。相棒は、破壊か消滅するまで、自分が何らかのシーンに登場すると、そのシーンの種類に関わらず、同じタイミングで召喚される。失敗すると、虫が一斉に飛び立ち、そのシーンに登場しているPC全員の【魔力】が1点減少する。誰かが判定を行うと、成否にかかわらずこの効果はなくなる。',
720
- '誰もいない教室。なぜか、ヒソヒソと囁く声がどこからともなく聞こえ、見られているような視線を感じる。このシーンに登場しているPCのうち一人は、≪不安≫の判定を行うことができる。成功すると、公開されているハンドアウトの中から、好きな【秘密】を公開することができる。失敗すると、「遮断」の変調を受ける。誰かが判定を行うと、成否にかかわらずこの効果はなくなる。',
721
- '薄暗いが暖かく、ひどく安らぐ空間。ここはまるで、母親の胎内のようだ。このシーンに登場しているPCが、魔素を消費して、【魔力】の回復を行う場合、魔素一個につき、【魔力】を2点回復できる。',
722
- '遊園地。賑やかなパレードが目の前を通り過ぎて行くが、客は一人もいない。',
723
- lambda { return "夜の道。もやもやと黒いものが後ろから、追いかけてくる。はっきりした姿も分からないのに、ひどく恐ろしく感じる。このシーンに登場するPCは、#{magicalogia_random_skill_table_text_only}の判定を行う。成功すると、好きな魔素二個を獲得できる。失敗した場合、もやもやとした黒いものは君のアンカーの前に現れる。「運命変転」が発生する。" },
724
- '夕暮れの街。なんだか寂しい気分になる。',
725
- '床、壁、天井までが赤黒い色に染まった部屋。生臭い臭いが充満している。このシーンに登場しているPCのうち一人は≪血≫で判定を行うことができる。成功すると、【一時的魔力】2点を獲得する。失敗すると【魔力】が1点減少する。誰かが判定を行うと、成否にかかわらずこの効果はなくなる。',
726
- 'どこへとも行くか知れぬ電車の中。あなたの他に乗客はいないようだが……。このシーンに登場しているPCのうち一人は≪異界≫で判定を行うことができる。成功すると、好きな異境一つに行くことができる魔法門を発見できる。失敗するとこのシーンに登場しているPC全員の【魔力】が2点減少する。誰かが判定を行うと、成否にかかわらずこの効果はなくなる。',
727
- '大勢の人が行き交う雑踏の中。誰も、あなたに関心を払わない。このシーンでは「不干渉」の世界法則を無視して、好きなキャラクターを調査することができる。',
728
- 'どことも知れぬ空間。あなたの最も愛しい人が、目の前に現れる。このシーンに登場しているPCのうち一人は、≪情熱≫の判定を行うことができる。成功すると、好きなアンカーに対する【運命】を1点上昇させることができる。失敗すると、「運命変転」が発生する。誰かが判定を行うと、成否にかかわらずこの効果はなくなる。',
729
- ]
730
- return get_table_by_2d6(table)
731
- end
732
-
733
- # 魔法都市シーン表
734
- def magicalogia_magic_city_scene_table
735
- table = [
736
- '急に爆発が起こる。誰かが実験で失敗したらしい。「綻び」の変調を受けた後、「力」の魔素を二個獲得する。',
737
- '標本の並ぶ地下室。実験によって生み出された魔法生物が、瓶詰めにされて並んでいる。',
738
- 'ごった返す市場。色とりどり食料品や日用品を始め、幻獣の目玉やマンドラゴラの根といった、魔法の触媒となる品までが商われている。このシーンに登場しているPCは、一人一度だけ、功績点1点を消費することで、好きな魔素を二個獲得することができる。',
739
- '魔法使いたちの集うサロン。ここなら、有益な情報が得られそうだ。このシーンに登場しているPCのうち一人は、≪物語≫の判定を行うことができる。成功すると、公開されているハンドアウトの中から、好きな【秘密】を公開することができる。失敗すると「封印」の変調を受ける。誰かが判定を行うと、成否にかかわらずこの効果はなくなる。',
740
- '大通り。幻獣の引く馬車や、絨毯や箒などの空飛ぶ乗り物が、せわしなく通り過ぎる。',
741
- lambda { return "広場。魔法使い同士が喧嘩を始め、魔法が飛び交い始める。このシーンに登場したPCは、#{magicalogia_random_skill_table_text_only}で判定を行う。成功すると、好きな魔素を二個獲得する。失敗すると、この場所の魔法の影響が時空を超えて、アンカーに現れる。「運命変転」が発生する。" },
742
- '賑わう酒場。客の中には妖精や魔物たちの姿も多い。このシーンに登場したPCは、【魔力】が1点回復する。',
743
- '入り組んだ路地裏。奇妙な異種族たちで構成された盗賊団に襲われる。≪雷≫で判定を行う。失敗すると【魔力】が2点減少するか、もし魔法にチャージした魔素を二個以上持っていればそれを消費するか、どちらかを選ぶ。',
744
- '都市の門。新たなる知識を求めてやってきた者、自分の世界へ帰る者、様々な世界の様々な人々が行き来する。',
745
- '歓楽街。角や尻尾、翼を持つ、肌もあらわな美女たちが、なまめかしい視線を送ってくる。このシーンに登場しているPCのうち一人は、≪エロス≫で判定を行うことができる。成功すると、元型「エロスの乙女」をそのセッションの間、相棒にできる。相棒は、破壊か消滅するまで、自分が何らかのシーンに登場すると、そのシーンの種類に関わらず、同じタイミングで召喚される。失敗すると【魔力】が1点減少する。誰かが判定を行うと、成否にかかわらずこの効果はなくなる。',
746
- '闘技場。魔法使いが、強化した元型や幻獣を競い合わせている。シーンプレイヤーのPCは、一度だけ、基本ルールブックに載っている、ランク4以下の〈書籍卿〉か〈越境者〉に、魔法戦を挑むことができる。勝利すると、「プライズ表」を使用することができる。',
747
- ]
748
- return get_table_by_2d6(table)
749
- end
750
158
 
751
- # 死後世界シーン表
752
- def magicalogia_world_after_dead_scene_table
753
- table = [
754
- '寂しげな村。影のような人々が時折行き来する。ここでは、死んだキャラクターに会うことができる。このシーンに登場しているPCのうち一人は、疵をひとつだけ、克服することができる。',
755
- 'どこまでも広がる花畑。穏やかな雰囲気に満たされている。',
756
- '裁判所。強面の裁判官が、溢れる死者の群れに、次々と裁きを下している。≪嘘≫の判定を行う。失敗すると、【魔力】が2点減少する。',
757
- '白い光に包まれた食堂。豪勢な食事と美酒が、尽きることなく振る舞われる。このシーンに登場しているPCのうち一人は、≪肉≫の判定を行うことができる。成功すると、【一時的魔力】を1点獲得する。失敗すると、「病魔」の変調を受ける。誰かが判定を行うと、成否にかかわらずこの効果はなくなる。',
758
- lambda { return "床が白い雲になっている場所。雲の隙間からは、現世のような風景が見える。#{magicalogia_random_skill_table_text_only}の判定を行う。成功すると、このセッション中一度だけ、判定のサイコロを振り直すことができる。失敗すると、時空を越えて、アンカーが死後世界を垣間見てしまう。「運命変転」が発生する。" },
759
- '広い川の岸辺。向こう岸は、現世なのだろうか。このシーンに登場しているPCのうち一人は≪円環≫の判定を行うことができる。成功すると、魔力をリセットできる。誰かが判定を行うと、成否にかかわらずこの効果はなくなる。',
760
- '礼拝堂。死んでもなお、祈り続ける魂が、無言で跪いている。このシーンに登場しているPCのうち一人は、≪祈り≫の判定を行うことができる。成功すると、【一時的魔力】を2点獲得する。失敗すると、「不運」の変調を受ける。誰かが判定を行うと、成否にかかわらずこの効果はなくなる。',
761
- 'ごく普通の住宅街。日常の営みを繰り返す魂の集う場所だ。',
762
- '拷問場。鬼たちが、使者に無限の責め苦を味合わせている。このシーンに登場しているPCのうち一人は、≪絶望≫の判定を行うことができる。成功すると、【一時的魔力】を2点獲得する。失敗すると、「綻び」の変調を受ける。誰かが判定を行うと、成否にかかわらずこの効果はなくなる。',
763
- '戦場。羽兜の乙女に率いられた戦士たちが、巨人と戦いを繰り広げている。このシーンに登場しているPCのうち一人は、≪天空≫で判定を行うことができる。成功すると、【一時的魔力】を3点獲得する。失敗すると、【魔力】が3点減少する。誰かが判定を行うと、成否にかかわらずこの効果はなくなる。',
764
- 'どことも知れぬ空間。あなたの最も愛しい人が、目の前に現れる。このシーンに登場しているPCのうち一人は、≪情熱≫の判定を行うことができる。成功すると、好きなアンカーに対する【運命】を1点上昇させることができる。失敗すると、「運命変転」が発生する。誰かが判定を行うと、成否にかかわらずこの効果はなくなる。',
765
- ]
766
- return get_table_by_2d6(table)
767
- end
768
-
769
- # 迷宮世界シーン表
770
- def magicalogia_labyrinth_world_scene_table
771
- table = [
772
- 'がらんとした、石畳の部屋。床に描かれた魔法陣が、不気味な光を放っている。このシーンに登場しているPCのうち一人は、≪異界≫で判定を行うことができる。成功すると、その魔法陣を地球に帰還できる魔法門として使用できる。失敗すると、魔法門から現れた道の怪物に襲われ、このシーンに登場しているPC全員の【魔力】が1D6減少する。誰かが判定を行うと、成否にかかわらずこの効果はなくなる。',
773
- '微かなランプの明かりに照らし出される牢獄。檻の中には、誰かの朽ちた骸が転がっている。このシーンに登場しているPCのうち一人は、≪死≫で判定を行うことができる。成功すると公開されているハンドアウトの中から、好きな【秘密】を公開することができる。失敗すると、死体が呪詛の言葉を吐き、このシーンに登場しているPC全員が「綻び」の変調を受ける。誰かが判定を行うと、成否にかかわらずこの効果はなくなる。',
774
- '通路の先に、扉と看板がある。看板の文字は宿屋と読める。このシーンに登場しているPC全員は、一度だけ、功績点1点を消費することで、調律を一度行うことができる。',
775
- '人一人通るのが、やっとの狭い通路が続いている。この廊下はどこまで伸びているのだろう?',
776
- '幾つもの扉と幾つもの分かれ道を進む。おや?いつの間にか、きみは迷ってしまった。シーンプレイヤー以外のPCが、このシーンに登場しようとする場合、≪道≫で判定を行う。失敗したPCは、このシーンに登場できない。',
777
- lambda { return "怪物が現れ、キミたちを襲う。このシーンに登場しているPC全員は、#{magicalogia_random_skill_table_text_only}の判定を行うこと。成功すると、怪物を倒し、好きな魔素が一個発生する。失敗すると、キミの負った傷は時間と空間を越えて、キミのアンカーに不幸をもたらす。「運命変転」が発生する。" },
778
- '目の前には、似たような扉がずらりとならんでいる。どの扉を開いたものか?',
779
- '暗闇の中から、うなり声が聞こえてくる。どうやら、近くに怪物が潜んでいるようだ。うまくやりすごせないものか……。≪静寂≫で判定を行う。失敗すると、【魔力】が1点減少する。',
780
- '通路が途切れ、深い谷が口を開けている。谷底まで光は届かず、まるで地の底まで続いているかのようだ。「闇」の魔素を一個獲得できる。',
781
- '金貨や銀貨、宝石に王冠、山のような宝物の積み上げられた部屋。番人は見当たらないが……。このシーンに登場しているPCのうち一人は、≪黄金≫で判定を行うことができる。成功すると1D6点の魔貨かランダムに決定した魔素三個を獲得できる。失敗すると、このシーンに登場しているPC全員の【魔力】が1点減少する。誰かが判定を行うと、成否にかかわらずこの効果はなくなる。',
782
- '行き止まりの壁には、一見、意味不明な文字が並んでいる。ここから先に進むためには、この文字の謎を解かねばならないのだろうか。このシーンに登場しているPCのうち一人は、≪謎≫で判定を行うことができる。成功すると公開されているハンドアウトの中から、好きな【秘密】を公開することができる。失敗すると、部屋に仕掛けられた罠が発動し、このシーンは強制的に終了する。誰かが判定を行うと、成否にかかわらずこの効果はなくなる。',
783
- ]
784
- return get_table_by_2d6(table)
785
- end
786
-
787
- # 大判シーン表
788
- def magicalogia_new_scene_table
789
- table = [
790
- 'ここではないどこか。魔法の力が満ちた異境の一つへ、一瞬だけ旅をする。そのシーンに星の魔素が1点発生する。',
791
- '夢の中。遠く過ぎ去った日々が、あなたの前に現れる。そのシーンに夢の魔素が1点発生する。',
792
- '強く風が吹き、雲が流されていく。遠く、雷鳴が聞こえた。そのシーンに力の魔素が1点発生する。',
793
- '静かなカフェの店内。珈琲の香りと共に、優しく穏やかな雰囲気が満ちている。',
794
- '無人の路地裏。ここならば、邪魔が入ることもないだろう。',
795
- lambda { return "周囲で〈断章〉が引き起こした魔法災厄が発生する。#{magicalogia_random_skill_table_text_only}の判定を行うこと。成功すると、そのシーンに好きな魔素が1点発生する。失敗すると、「運命変転表」を使用する。" },
796
- 'なんの変哲もないおだやかな風景。しかし、その日常の背後で魔法災厄の影を感じる。',
797
- '読んでいた本を閉じる。そこには、あなたが知りたかったことが書かれていた。なるほど、そういうことか。',
798
- '夜の街を歩く。暖かな家々の明かりが、遠く見える。そのシーンに歌の魔素が1点発生する。',
799
- '大勢で賑わう広場。祭りでも行われているのだろうか? 誰かを呼ぶ声が聞こえる。そのシーンに獣の魔素が1点発生する。',
800
- '悲劇の予感。家族の不幸、友の絶望、仲間の死......このままだと起きてしまうかもしれない出来事の幻が見える。そのシーンに闇の魔素が1点発生する。',
801
- ]
802
-
803
- return get_table_by_2d6(table)
804
- end
805
-
806
- # 指定特技(星)
807
- def magicalogia_random_skill_star_table
808
- table = [
809
- '黄金', '大地', '森', '道', '海', '静寂', '雨', '嵐', '太陽', '天空', '異界',
810
- ]
811
-
812
- return get_table_by_2d6(table)
813
- end
814
-
815
- # 指定特技(獣)
816
- def magicalogia_random_skill_beast_table
817
- table = [
818
- '肉', '蟲', '花', '血', '鱗', '混沌', '牙', '叫び', '怒り', '翼', 'エロス',
819
- ]
820
-
821
- return get_table_by_2d6(table)
822
- end
823
-
824
- # 指定特技(力)
825
- def magicalogia_random_skill_force_table
826
- table = [
827
- '重力', '風', '流れ', '水', '波', '自由', '衝撃', '雷', '炎', '光', '円環',
828
- ]
829
-
830
- return get_table_by_2d6(table)
831
- end
832
-
833
- # 指定特技(歌)
834
- def magicalogia_random_skill_poem_table
835
- table = [
836
- '物語', '旋律', '涙', '別れ', '微笑み', '想い', '勝利', '恋', '情熱', '癒し', '時',
837
- ]
838
-
839
- return get_table_by_2d6(table)
840
- end
841
-
842
- # 指定特技(夢)
843
- def magicalogia_random_skill_dream_table
844
- table = ['追憶', '謎', '嘘', '不安', '眠り', '偶然', '幻', '狂気', '祈り', '希望', '未来']
845
-
846
- return get_table_by_2d6(table)
847
- end
848
-
849
- # 指定特技(闇)
850
- def magicalogia_random_skill_night_table
851
- table = [
852
- '深淵', '腐敗', '裏切り', '迷い', '怠惰', '歪み', '不幸', 'バカ', '悪意', '絶望', '死',
853
- ]
854
-
855
- return get_table_by_2d6(table)
856
- end
857
-
858
- # 特技だけ抜きたい時用(星) あまりきれいでない
859
- def magicalogia_random_skill_table_text_only_star
860
- text, = magicalogia_random_skill_star_table
861
- return text
862
- end
863
-
864
- # 特技だけ抜きたい時用(獣) あまりきれいでない
865
- def magicalogia_random_skill_table_text_only_beast
866
- text, = magicalogia_random_skill_beast_table
867
- return text
868
- end
869
-
870
- # 特技だけ抜きたい時用(力) あまりきれいでない
871
- def magicalogia_random_skill_table_text_only_force
872
- text, = magicalogia_random_skill_force_table
873
- return text
874
- end
875
-
876
- # 特技だけ抜きたい時用(歌) あまりきれいでない
877
- def magicalogia_random_skill_table_text_only_poem
878
- text, = magicalogia_random_skill_poem_table
879
- return text
880
- end
881
-
882
- # 特技だけ抜きたい時用(夢) あまりきれいでない
883
- def magicalogia_random_skill_table_text_only_dream
884
- text, = magicalogia_random_skill_dream_table
885
- return text
886
- end
887
-
888
- # 特技だけ抜きたい時用(闇) あまりきれいでない
889
- def magicalogia_random_skill_table_text_only_night
890
- text, = magicalogia_random_skill_night_table
891
- return text
892
- end
893
-
894
- # 魔法使いの災厄
895
- def magicalogia_magi_fortune_change_table
896
- table = [
897
- '嫌悪。〈愚者〉たちを嫌悪し、〈大法典〉のやり方に疑問を覚えるようになる。この不幸が二度発生すると、その魔法使いは死亡しないで〈書籍卿〉になり、NPCとなる。この不幸が〈書籍卿〉に降り注いだ場合、不幸は無効化される。',
898
- '悪心。魔法に関する強い願いや邪悪な欲望が肥大化していく。この不幸が二度発生すると、その魔法使いは死亡した後〈禁書〉となり、NPCとなる。',
899
- '幽霊。肉体がほとんど失われ、霊的存在になる。この不幸が二度発生すると、その魔法使いは死亡ではなく消滅する。',
900
- '連鎖。運命変転が発生する。この不幸が二度発生しても死亡しない。',
901
- '変調。ランダムに変調1つを受ける。この不幸が二度発生しても死亡しない。',
902
- '消耗。【魔力】が1点減少する。この不幸が二度発生しても死亡しない。',
903
- ]
904
- return get_table_by_1d6(table)
905
- end
906
-
907
- # 魔法書架シーン表
908
- def magicalogia_magic_bookshelf_scene_table
909
- table = [
910
- lambda { return "〈禁書〉の保管庫へ入ることを許可された。幾重にも張り巡らされた決壊や、鋭い目つきの書警たちが目に付く。その隙をついて、〈禁書〉が襲い掛かってきた!このシーンに登場したPCは一人だけ《#{magicalogia_random_skill_table_text_only_force}》の判定を行う。失敗すると、【魔力】が3点減少する。成功すると、【一時的魔力】を3点得る。誰かが判定すると、成否にかかわらず、この効果はなくなる。" },
911
- '私室。狭いけれど、一番落ち着ける場所だ。このシーンに登場しているPCのうち一人は、【魔力】を上限まで回復させることができる。',
912
- '町の図書館。いつのまにか、人界に戻ってきてしまったようだ。このシーンに登場しているPCのうち一人は、好きなキャラクターを1人選び、事件表を一回振って、その効果を適用する。',
913
- '巨大な円卓がしつらえられた部屋。どうやらここは、会議場のようだ。',
914
- '長い廊下。学院の制服に身を包んだ少年少女が、笑いさざめきながら駆けていく。',
915
- lambda { return "荒れ果てた部屋。倒れた空っぽの本棚が、目に付く。これは〈大破壊〉の影響なのだろうか…。このシーンに登場するPCは、#{magicalogia_random_skill_table_text_only}の判定を行う。失敗すると、時空を超えてアンカーに影響が現れる。「運命変転」が発生する。" },
916
- '倉庫。未整理の本が山のように積まれて、司書たちが分類整理に追われている。',
917
- '誰かの研究室に迷い込む。積まれている魔導書が興味深い。',
918
- '高い天井と、天井まで続く壁を埋め尽くす、本の群れ。このすべてが、この書庫に所蔵された魔導書だ。このシーンに登場しているPCのうち一人は、【一時的魔力】を1点獲得する。',
919
- lambda { return "魔導書の閲覧室。数人の魔法使いが、熱心に魔導書を読んでいる。このシーンに登場しているPCのうち一人は、#{magicalogia_random_skill_table_text_only}の判定を行うことができる。成功すると、修得している魔法を一つ、修得可能な別の魔法に入れ替えることができる。失敗すると、「封印」の変調を受ける。誰かが判定すると、成否にかかわらず、この効果はなくなる。" },
920
- '本棚と本棚の間に、唐突に扉が浮かんでいる。この扉は、異界につながる戸口だ。一体どこにつながっているのだろう。異界シーン表の中からランダムに一つを選んで、その効果を適用する。',
921
- ]
922
-
923
- return get_table_by_2d6(table)
924
- end
925
-
926
- # 魔法学園シーン表
927
- def magicalogia_magic_academy_scene_table
928
- table = [
929
- '目の前に美しい黒龍が現れた。学院の長、ザナルパトスだ。彼は、何を告げようとしているのだろうか。',
930
- lambda { return "突然何かが襲い掛かってきた!生徒が元型の召喚に失敗したようだ。このシーンに登場しているPCのうち一人は、≪#{magicalogia_random_skill_table_text_only_force}≫の判定を行う。失敗すると、【魔力】が3点減少する。成功すると、【一時的魔力】を3点得る。誰かが判定すると、成否にかかわらず、この効果はなくなる。" },
931
- lambda { return "ここは女子寮?このシーンに男性のPCが登場した場合、その男性PCは≪#{magicalogia_random_skill_table_text_only_beast}≫の判定を行う。失敗すると、「封印」の変調を受ける。" },
932
- '寮の廊下。「どなたですか?」寮監のシグリットに呼び止められた。このシーンに登場しているPCは≪自由≫で判定を行う。失敗すると、このシーンで行う判定すべてにマイナス1の修正を受ける。',
933
- '天井の高い廊下。分厚い扉の向こうからかすかに授業を行う講師の声が聞こえてくる。',
934
- lambda { return "扉を開けて現れたのは、よく知る相手だった。なぜか、学院に迷い込んでしまったようだ。#{magicalogia_random_skill_table_text_only}で判定を行う。失敗すると、「運命変転」が発生する。" },
935
- '誰かが作った秘密の小部屋に迷い込んでしまう。学園ではあまり食べられないお菓子が山のように仕舞われているようだ。',
936
- '学院西部に広がるアーデンの森。鳥の鳴き声が聞こえる。',
937
- lambda { return "授業を行っている教室。講師が呼び出した元型がこちらに向かって飛んでくる。このシーンに登場しているPCは一人だけ#{magicalogia_random_skill_table_text_only}で判定を行う。失敗すると【魔力】が1点減少する。成功すると、その特技の精霊が召喚できる。誰かが判定すると、成否にかかわらず、この効果はなくなる。" },
938
- lambda { return "生徒に何か魔法を見せて欲しいと乞われる。このシーンに登場しているPCは一人だけ、≪#{magicalogia_random_skill_table_text_only_dream}≫の判定を行う。失敗すると、「不運」の変調を受ける。成功すると、「夢」の魔素をを2点獲得する。誰かが判定すると、成否にかかわらず、この効果はなくなる。" },
939
- lambda { return "自習室。生徒たちが必死に魔導書を理解しようとしている。このシーンに登場しているPCは一人だけ、≪#{magicalogia_random_skill_table_text_only_star}≫の判定を行う。成功すると、好きな魔素をを2点獲得する。誰かが判定すると、成否にかかわらず、この効果はなくなる。" },
940
- ]
941
-
942
- return get_table_by_2d6(table)
943
- end
944
-
945
- # クレドの塔シーン表
946
- def magicalogia_tower_credo_scene_table
947
- table = [
948
- '目の前に一人の少女が現れる。眠り姫の長、ラトゥナだ。ずっと眠り続けている筈の彼女が現れたのは、いったい何を告げるためなのだろうか。',
949
- lambda { return "突然何かが襲い掛かってきた!未熟な魔法使いが元型の召喚に失敗したようだ。このシーンに登場しているPCは一人だけ、≪#{magicalogia_random_skill_table_text_only_force}≫の判定を行う。失敗すると、【魔力】が3点減少する。成功すると、【一時的魔力】を3点得る。誰かが判定すると、成否にかかわらず、この効果はなくなる。" },
950
- lambda { return "話しかけてきた天涯預言者が、不幸な未来を予言する。このシーンに登場しているPCは一人だけ、≪#{magicalogia_random_skill_table_text_only_dream}≫の判定を行う。失敗すると、【魔力】が1点減少する。成功すると、「夢」の魔素をを1点獲得する。誰かが判定すると、成否にかかわらず、この効果はなくなる。" },
951
- '塔の内側の壁に並ぶ、無数の魔道書の前。この中から、なにかの手がかりが得られるかも知れない。このシーンに登場しているPCのうち一人は、【一時的魔力】を1点獲得する。',
952
- '小さな客間で〈大法典〉からの使者との会合が行われている。天涯が新たな予言を伝えているのかも知れない。',
953
- lambda { return "こんな場所にいる筈のない人が君の前にあらわれる。眠り姫の眠りの中に迷い込んでしまったらしい。#{magicalogia_random_skill_table_text_only}で判定を行う。失敗すると、「運命変転」が発生する。" },
954
- '塔の上。山脈の連なりとその上に浮かぶ月が、塔を静かに見下ろしている。',
955
- '塔の外壁に作られた螺旋階段の上。強い風が吹き付けている。',
956
- 'クレドの塔に続く、険しい山道。何かが潜んでいるんだろうか…。「獣」の魔素を1点獲得できる。',
957
- '幻夢殿の中。眠り姫達の安らかな寝息が聞こえてくる。こちらも眠くなってくる。',
958
- '突然、目の前に扉が現れる。この扉は、異界につながる戸口だ。一体どこにつながっているのだろう。異界シーン表の中からランダムに一つを選んで、その効果を適用する。',
959
- ]
960
-
961
- return get_table_by_2d6(table)
962
- end
963
-
964
- # 並行世界シーン表
965
- def magicalogia_parallel_world_scene_table
966
- table = [
967
- 'カフェのテーブル。FMラジオは、去年解散したはずのバンドの、先日発表した新曲を流している。このシーンに登場しているPCのうち一人は、「時の流れ表」を1回振り、効果を適用する。',
968
- lambda { return "賑やかな通り。向こうから、あなたにそっくりな人物が歩いてくる。あれはこの世界の、あなた自身だろうか。このシーンに登場しているPCの一人は、#{magicalogia_random_skill_table_text_only}の判定を行う。成功すると、好きな魔素をを2点獲得する。失敗すると、「病魔」の変調を受ける。誰かが判定すると、成否にかかわらず、この効果はなくなる。" },
969
- '夜の街を歩く。よく知っている筈の風景なのに、どこか違うという違和感がぬぐえない。',
970
- '買い物客でにぎわう商店街。つぶれたはずの店が健在であったり、繁盛しているはずの店が潰れていたりしている。',
971
- '繁華街。ビルの大型ビジョンから、知らない国同士の戦争に関するニュースが流れている。',
972
- lambda { return "縁のある人の家の前。玄関から、見知らぬ人が現れ、こちらを不審げに眺めている。この人はもしかして…?#{magicalogia_random_skill_table_text_only}で判定を行う。失敗すると、「運命変転」が発生する。" },
973
- '乗客のいない電車の中。時折、聞き覚えのない駅名がアナウンスされる。',
974
- '学校帰りの学生たちが目立つ、駅前のロータリー。あの学校の制服のリボンは、赤だっただろうか?',
975
- '洋館の前。ここに、こんな建物はなかった筈だが。',
976
- lambda { return "小学校の前を通る。音楽室の窓から、見知らぬ音楽家の肖像が見える。≪#{magicalogia_random_skill_table_text_only_poem}≫の判定を行う。失敗すると、「封印」の変調を受ける。" },
977
- '目の前で、以前、経験した出来事が起きる。この世界では、これは、今から起きる出来事なのだ。このシーンに登場しているPCのうち一人は、このシーンの間、判定に+1の修正を受ける。',
978
- ]
979
-
980
- return get_table_by_2d6(table)
981
- end
982
-
983
- # 終末シーン表
984
- def magicalogia_post_apocalypse_scene_table
985
- table = [
986
- '夜。雨宿りのために足を踏み入れた寺院に危険は気配はなく、ゆっくり休めそうだ。静に時が流れていく。',
987
- '夜。雑草が生い茂り、ツタに覆われた人気のない山村で巨大な肉食獣が襲い掛かってくる。このシーンに登場しているPCのうち一人は、≪牙≫の判定を行わなければならない。失敗すると、【魔力】が2点減少する。誰かが判定すると、成否にかかわらず、この効果はなくなる。',
988
- '夜。大規模な爆撃で地平線と化した戦場跡。どこの国ともわからぬ国旗が夜風に吠えている。虚憑が一体襲い掛かってくる。魔法戦を行うこと。この魔法戦はゲーム中に一度だけ発生する。',
989
- lambda { return "夜。もはや廃墟と化した埃っぽい都市。〈愚者〉が虚憑に襲われている。このシーンに登場しているPCの一人は、#{magicalogia_random_skill_table_text_only}の判定することができる。成功すれば救出でき、助け出した〈愚者〉に対し、好きな属性で運命を1点獲得する。失敗すると【魔力】を3点失う。" },
990
- '夜。虚憑の群れに付きまとわれる。シーンプレイヤーは≪悪意≫の判定を行う。失敗するとこのシーンの間、あらゆる判定がマイナス2される。',
991
- '夜明け前。ハイウェイが一直線に突き抜ける灰色の荒野。静かすぎて自らの鼓動を感じるほどだ。虚憑が一体襲い掛かってくる。魔法戦を開始すること。2ラウンド経過するまでは夜、以降のラウンドは昼として処理する。この魔法戦はゲーム中に一度だけ発生する。',
992
- '昼。〈愚者〉の子供が、歴史的な遺産を遊び場に、一人遊びをしている。この子の未来はどうなるのだろうか。',
993
- '昼。世界大戦で墜落した戦闘機が、砂漠の砂に半ば埋もれている。だが、そのエンジンは死んでいない。このシーンに登場しているPCの一人は≪風≫で判定を行うことができる。成功すると魔力のリセットを行う。成否にかかわらず、この効果は一度だけ発生する。',
994
- '昼。広い建物が並ぶ美しい海岸。かつてはリゾート地だったそこには、白い遺骨が大量に打ち上げられ、潮騒に洗われている。誰か一人が≪別れ≫の特技の判定に成功すると、ランダムに選んだ魔素3点を獲得する。誰かが判定すると、成否にかかわらず、この効果はなくなる。',
995
- '昼。崩壊した農村のかたわらで、美味しそうな果実を発見する。≪大地≫の判定に成功すると【魔力】が2点回復する。',
996
- '夕刻。錆び付いた線路。その先までたくさんのしゃれこうべが無造作に転がっている。虚憑が一体襲い掛かってくる。魔法戦を開始すること。2ラウンド経過するまでは昼、以降のラウンドは夜として処理する。この魔法戦はゲーム中に一度だけ発生する。',
997
- ]
998
-
999
- return get_table_by_2d6(table)
1000
- end
1001
-
1002
- # 異世界酒場シーン表
1003
- def magicalogia_god_bar_scene_table
1004
- table = [
1005
- 'マスターの雷神に絡まれる。このシーンに登場しているPCのうち一人は、雷神相手に「事件表」を振る。',
1006
- '神々しく光輝く、威厳に溢れた神が現れ、場の雰囲気を支配する。このシーンの間、「世界法則」に「調査阻害」が加わる。',
1007
- '上の階に登ろうとすると、キマイラが待ち構えている。このシーンに登場しているPCのうち一人は、≪炎≫で判定を行う。失敗すると、【魔力】が1点減少する。成功するまで判定を行うこと。この効果は一度だけ発生する。',
1008
- '「かんぱーい!」注がれた酒をつい飲んでしまう。ずいぶん強いスピリッツのようだが。このシーンに登場しているPCのうち一人は、≪水≫で判定を行うことができる。成功すると魔貨を1点手に入れる。成否にかかわらずこの効果は一度だけ発生する。',
1009
- '乾杯のかけ声、酔っ払いの笑い声、あちこちのテーブルでは大きな話し声…。どこにでもある、酒場の光景だ。',
1010
- lambda { return "客の一人に、無理矢理酒を飲まされる。なんて強い酒だろう。#{magicalogia_random_skill_table_text_only}で判定を行う。失敗すると、「運命変転」が発生する。" },
1011
- '階段を上っている。いったいいつから登り始めたのか記憶にない。これはどこまで続くのだろう。',
1012
- '建物の中の筈なのに、雷雲が立ちこめ、嵐が巻き起こる。神々がケンカしている!このシーンに登場しているPCのうち一人は、≪嵐≫で判定を行う。失敗すると、【魔力】が2点減少する。成否にかかわらずこの効果は一度だけ発生する。',
1013
- '扉の前に、妖怪が張り付いていて、通してくれない。妖怪は何かくれと強請ってくる。このシーンに登場しているPCのうち一人は、好きな魔素を1点減少する。減少する魔素がない場合、【魔力】が1点減少する。',
1014
- '上の階に登ろうとすると、竜が待ち構えている。このシーンに登場しているPCのうち一人は、≪牙≫で判定を行う。失敗すると、「綻び」の変調を受ける。成否にかかわらず、この効果は一度だけ発生する。',
1015
- '美しい女神が、鏡をのぞき込んでいる。どうやら、運命が映る鏡だと言うのだが。このシーンに登場しているPCのうち一人は、≪未来≫で判定を行っても良い。成功すると好きなアンカーとの【運命】が1点上昇する。成否にかかわらず、この効果は一度だけ発生する。',
1016
- ]
1017
-
1018
- return get_table_by_2d6(table)
1019
- end
1020
-
1021
- # ほしかげシーン表
1022
- def magicalogia_starlight_scene_table
1023
- table = [
1024
- 'あなたの持つ「切符」は無効であると車掌に告げられる。他の乗客の視線を感じる。このシーンに登場しているPCのうち一人は、もう一度「切符」を調達しなければならない。魂の特技の判定を、成功するまで繰り返すこと。',
1025
- 'ごとごと。ごとごと。ガラスより透き通る銀河の水辺を走る。色とりどりの花々が星の光に冴え渡っては通り過ぎて行く。',
1026
- 'ふと目を覚ます。汽車に揺られていつの間にか眠っていたらしい。夢の中で誰かと会っていた気がしてならない。シーンプレイヤーが≪深淵≫の判定に成功すると、ランダムに選んだアンカーとの運命が1点上昇する。',
1027
- '銀河の水辺にぽつりと浮かぶ島に、目の覚めるような白い立派な十字架がそびえたっている。このシーンに登場しているPCのうち一人は、≪祈り≫で判定を行うことができる。成功すると、以降このゲーム中に発生する魔法災厄が一回だけ無効化される。誰かが判定すると、成否にかかわらず、この効果はなくなる。',
1028
- '窓から銀河を見つめる、黒い外套を着た少女がいる。あなたに気づくとお菓子を差し出し、にこりと笑って去っていく。シーンプレイヤーはランダムに選んだ魔素を1点獲得する。',
1029
- 'ノイズ混じりの車内放送が「停車駅」への到着を告げる。しばらくすると「汽車」が止まった。キャラクターは「停車駅」で降りることができる。降りる場合、「停車駅」の世界法則を決定し、その法則に従ってシーンを進めること。',
1030
- '車窓の向こうに、星明りに照らされたススキ野原が青白く広がる。そんな中で、不思議な紋様の書かれた三角標が何本か、ぽつり、ぽつりと立ち尽くしているのが見えた。',
1031
- '気づくと誰もいない。青いビロウドを張った座席だけが、空間をむなしく彩っている。シーンプレイヤー以外のPCが、このシーンに登場しようとする場合、≪静寂≫で判定を行う。失敗したPCは、このシーンに登場できない。',
1032
- lambda { return "「この席、よろしいかな?」あなたの隣に〈書籍卿〉が座る。#{magicalogia_random_skill_table_text_only}の判定に成功すると公開されているハンドアウトの中から、好きなものを選び、その【秘密】を公開することができる。誰かが判定すると、成否にかかわらず、この効果はなくなる。" },
1033
- '銀河を超える渡り鳥の群れ。しばし「汽車」と並走し、やがて離れ、天の川のようにきらきらした光の帯になっていく。このシーンに登場しているPCのうち一人は、≪翼≫で判定を行うことができる。成功すると魔力をリセットできる。誰かが判定すると、成否にかかわらず、この効果はなくなる。',
1034
- '隣の車輛から誰かが移ってきた。なんと、あなたのアンカーである。このシーンに登場しているPCをランダムに一人選び、そのPCのアンカーの中から、この異境に存在しない〈愚者〉のアンカーをランダムで一人選ぶこと。そのアンカーが、元の世界へ無事戻ることができたら、ゲーム終了時に功績点を1点獲得する。',
1035
- ]
1036
-
1037
- return get_table_by_2d6(table)
1038
- end
159
+ def initialize(name, items_lower, items_higher)
160
+ @name = name
161
+ @lower = items_lower
162
+ @higher = items_higher
163
+ end
1039
164
 
1040
- # 世界法則追加表
1041
- def magicalogia_world_low_add_table
1042
- table = [
1043
- '世界法則「楽園」。この「停車駅」は美しく、慰めに満ちている。この「停車駅」で降りた〈愚者〉は魅了され、ここで一生を過ごすことになる。「刻印百景」の特技で判定に成功すると、これを押しとどめることができる。この判定は、対象の〈愚者〉一人につき一回しかできない。',
1044
- '世界法則「夜祭」。星の明かりや提灯を頼りに、終わらないお祭りが続いている。このシーンに登場しているキャラクターは、「刻印百景」の特技で判定に成功すると、【手当】の俗呪を使用したとき、消費した魔素1点につき、【魔力】を2点回復できるようになる。',
1045
- '世界法則「遺棄」。この「停車駅」の周辺は、様々なモノが捨てられている。シーンプレイヤーが「刻印百景」の特技で判定に成功すると、魔法【回想】と同じ効果が一回だけ発生する。誰を対象とするかは、シーンに登場しているキャラクターの中から、ランダムに選ばれる。',
1046
- '世界法則「妖蝶」。この「停車駅」の周辺は、魔素を帯びた不思議な色合いの羽をもつ蝶が生息している。このシーンに登場しているキャラクターは、「刻印百景」の特技で判定に成功すると、任意の魔素を2点獲得できる。失敗すると、ランダムに選んだ変調1つを受ける。',
1047
- 'この「停車駅」の周辺は死んだ〈愚者〉たちの終着点でもある。もしここで降りる〈愚者〉がいれば、その人物は死んでいたことになる。このシーンに登場しているキャラクターがその〈愚者〉をアンカーとしている場合、「刻印百景」の特技で判定に成功すると、「疵」になることなく運命欄から消去できる。',
1048
- '世界法則「魔法門」。他の異境への入り口が存在する。「刻印百景」の特技で判定に成功すると、その魔法門を発見できる。',
1049
- ]
1050
- return get_table_by_1d6(table)
1051
- end
165
+ def roll(randomizer)
166
+ val1, val2 = randomizer.roll_barabara(2, 6)
1052
167
 
1053
- # さまよう怪物表
1054
- def magicalogia_wondaring_monster_table
1055
- table = [
1056
- lambda { return "トロールに率いられたオークとゴブリンの大軍団に遭遇する。数百という怪物たちが野蛮な叫び声をあげながら、魔法使いたちに襲い掛かってくる。≪#{magicalogia_random_skill_table_text_only_star}≫の判定を行う。全員の判定が終わったら、失敗したPCは1d6点のダメージを受ける。このとき、判定に成功したPCの数だけそのダメージの値を軽減できる。" },
1057
- lambda { return "大きな猛牛の頭をした巨漢…ミノタウロスが立ち塞がる。手に持った青銅の斧を振りかぶる。シーンに登場しているPCの中からランダムに代表を1人選ぶ。代表は≪#{magicalogia_random_skill_table_text_only_beast}≫の判定を行う。失敗すると、PC全員は2点のダメージと「綻び」の変調を受ける。" },
1058
- lambda { return "突如、ドラゴンが現れる。深紅の鱗に覆われた巨影は、鎌首をもたげると、数瞬後、強烈な炎を吐いた。シーンに登場しているPC全員は≪#{magicalogia_random_skill_table_text_only_force}≫の判定を行う。全員の判定が終わったら、PC全員は、1+判定に失敗した人数点のダメージを受ける。" },
1059
- lambda { return "白銀の鎧に身を包んだ騎士が現れる。騎士は一対一の勝負を挑んできた。シーンに登場しているPCの中から代表を1人選ぶ。代表は≪#{magicalogia_random_skill_table_text_only_poem}≫の判定を行う。失敗すると代表は5点のダメージを受ける。" },
1060
- lambda { return "美しい上半身と獣の下半身を持つ女怪が現れる。艶めかしくその体をくゆらせながら、手を差し出してくる。シーンに登場しているPC全員は≪#{magicalogia_random_skill_table_text_only_dream}≫の判定を行う。失敗したPCは、3点のダメージを受け、好きな魔素を3点失う。" },
1061
- lambda { return "黒いローブをまとった幽鬼が現れる。枯れ木のような細い腕を振り上げて、勇気は呪いの言葉を叫ぶ。幽鬼の【魔力】は4点。シーンに登場しているPC全員は≪#{magicalogia_random_skill_table_text_only_night}≫の判定を行う。失敗したPCは、「不幸」の変調を受け、運命変転が発生する。" },
1062
- ]
1063
- return get_table_by_1d6(table)
1064
- end
168
+ table = val1 <= 3 ? @lower : @higher
1065
169
 
1066
- # 落花表
1067
- def magicalogia_fallen_flower_table
1068
- table = [
1069
- '肉体が枯れるように崩壊する。その苦痛は耐え難いもののようだ。人の言葉にならない断末魔が聞く者を苛み、死ぬ。〈永遠〉をアンカーにしているものは、それが疵になる。',
1070
- '精神が壊れる。その唇から、〈永遠〉が抱く夢や願望だけが小さく小さく、壊れた楽器のように吐き出され、季節が変わる頃に、死ぬ。〈永遠〉をアンカーにしているものは、それが疵になる。',
1071
- 'その生命力が暴走し、死と再生が繰り返される。助けてくれと懇願する声すら出せない。1d6ヶ月後、死ぬ。〈永遠〉をアンカーにしているものは、それが疵になる。',
1072
- '〈禁書〉とともに封印に飲み込まれる。運命を結んでいるPCの夢に、暗い、怖い、助けてくれと繰り返し現れるが、次の新月の夜にふつりと途切れる。〈永遠〉をアンカーにしているものは、それが疵になる。',
1073
- 'その時は何も起きない。運良く助かったか、〈愚者〉に戻れたようにも見える。だが一度でも眠りにつけば、目を覚ますことなく死ぬ。〈永遠〉をアンカーにしているものは、それが疵になる。',
1074
- '身体がしおれ、「種」が落ちる。しかし、再生することはない。もし大地に埋めてやれば、何かの植物として芽吹くだろう。(〈永遠〉をアンカーにしているものは、そのアンカーを失う。疵にはならない)',
1075
- ]
1076
- return get_table_by_1d6(table)
170
+ "#{@name}(#{val1},#{val2}) > #{table[val2 - 1]}"
171
+ end
1077
172
  end
1078
173
 
1079
- # 旧図書館シーン表
1080
- def magicalogia_old_library_scene_table
1081
- table = [
1082
- lambda { return "曲がり角。唐突に〈禁書〉が現れ、襲いかかってきた!このシーンに登場するPCは、#{magicalogia_random_skill_table_text_only}で判定を行う。失敗すると、【魔力】を3点失う。" },
1083
- '通路の真ん中。扉を開けて〈旧世界秩序〉の〈書籍卿〉「古き書物の化身」が現れた。彼はこのシーンに登場しているPCに協力を申し出る。このシーンに登場しているPCの一人は、《嘘》で判定を行う。成功すると〈書籍卿〉はこのシナリオの間、そのPCが行う魔法戦で、一度だけ立会人になる。失敗すると〈書籍卿〉は怒り出し、次のシーンでそのPCに対して、魔法戦をしかけてくる。誰かが判定すると、成否にかかわらず、この効果はなくなる。',
1084
- '元・研究室。壊れた実験道具が床に散らばっている。',
1085
- '元・閲覧室。数人の魔法使いたちが休んでいる。ここならば、色々な話が聞けそうだ。',
1086
- '空の書架が並ぶ、開けた空間。ここならば、一息つけるだろう。',
1087
- lambda { return "破壊された魔導書が、山のように積み重なる場所。本の山に隠れていた〈断章〉が襲い掛かってくる。このシーンに登場するPCは、#{magicalogia_random_skill_table_text_only}で判定を行う。成功すると、〈断章〉を倒し、好きな魔素を一個手に入れる。失敗すると、時空を超えてアンカーに影響が現れる。「運命変転」が発生する。" },
1088
- '破壊された書架が重なり合って作り上げた、迷路のような通路が続く。この先には、何があるのだろうか',
1089
- '元・宿舎。簡素な寝台が、いくつか残っている。',
1090
- '通路の行き止まり。目の前になぜか大きな箱がある。このシーンに登場しているPCの一人は、《謎》で判定を行うことができる。成功すると、箱の中にプライズを発見する。「プライズ表」を1回使用することができる。失敗すると、トラップが発動する。箱は爆発し、このシーンに登場しているPC全員の【魔力】が1点減少する。誰かが判定すると、成否にかかわらず、この効果はなくなる。',
1091
- lambda { return "どこからか湧き出した水が、床の上に泉を作っている場所。泉の上に何者かの呼び出した元型が浮かんでいる。#{magicalogia_random_skill_table_text_only}で判定を行う。成功すると、【一時的魔力】を1点手に入れる。失敗すると、攻撃され、【魔力】が1点減少する。誰かが判定すると、成否にかかわらず、この効果はなくなる。" },
1092
- 'なぜ、君がここに?扉を開けると、そこにはPCのアンカーがいた。シーンプレイヤーのアンカーの中から、ランダムに一人を選ぶ。そのアンカーが登場する。シーンプレイヤーは、そのアンカーに「事件」を行っても、行動済みにならない。',
1093
- ]
1094
- return get_table_by_2d6(table)
1095
- end
174
+ class << self
175
+ private
1096
176
 
1097
- # 大判時の流れ表
1098
- def magicalogia_new_time_passage_table
1099
- table = [
1100
- lambda { return "波乱万丈の人生を送る。この時代に起きた有名な事件の背後では、多くの魔法的存在が暗躍していた。あなたも、その事件に関わり、〈禁書〉や〈書籍卿〉たちと戦いを繰り広げる。#{magicalogia_random_skill_table_text_only}の判定を行う。成功するとセッション終了時に追加で功績点を1点獲得する。失敗すると、自分に「運命変転」が発生する。" },
1101
- lambda { return "冒険の日々の途中、大きな幸せがおとずれる。#{magicalogia_random_skill_table_text_only}の判定を行う。成功すると、自分のアンカーが負っている不幸か、自分が負っている疵一つを無効化する。" },
1102
- '瞑想していたのか。それとも何か封印されていたのか。長い眠りから目を覚ます。もうそんな時間か。おかげで十分に休息できた。ランダムに魔素を三個獲得するか、自分が「魔力のリセット」を行うか、自分の受けている変調をすべて回復する。',
1103
- '特殊な異境に旅をしていた。そのせいか、人界で何が起きていたのかまったく分からない。浦島太郎になった気分だ。異境の土産として、魔貨を1d6点獲得する。',
1104
- '市井の人々に交じって平穏な日々をおくる。そんな日々の中にも、ちょっとした事件が起きた。自分のアンカーを一人目標に選んで「事件表」を振ることができる。',
1105
- '日々研鑚を重ね、魔法の修行に精進した。もしも望むなら、蔵書欄にある魔法を、自分の修得可能な別の魔法に変更して構わない。もしも、魔素がチャージされていた魔法を未習得にした場合、その魔素は失われる。',
1106
- ]
1107
- return get_table_by_1d6(table)
1108
- end
177
+ def translate_skill_table(locale)
178
+ DiceTable::SaiFicSkillTable.from_i18n(
179
+ "MagicaLogia.skill_table",
180
+ locale,
181
+ rttn: ["RTS", "RTB", "RTF", "RTP", "RTD", "RTN"]
182
+ )
183
+ end
1109
184
 
1110
- # その後表
1111
- def magicalogia_fallen_after_table_low
1112
- table = [
1113
- '成就者は、邪悪な魔法の力にひかれるようになる。成就者が、そのセッションで〈断章〉に憑依されていたり、魔法災厄の犠牲になったりしていた場合、【堕落値】が1点上昇し、堕落チェックを行う。堕落チェックに失敗した場合、成就者は命を落とし、そのPCの疵となる。',
1114
- '成就者は、自分の不幸が魔法使いによるものだと信じるようになる。成就者が何らかの不幸に見舞われていた場合、【堕落値】が1点上昇し、堕落チェックを行う。堕落チェックに失敗した場合、願いを叶えたPCの成就者との【運命】の値が2点減少する。',
1115
- '成就者は、自分が特別な人間だと信じるようになる。願いを叶える努力を放棄するようになり、自堕落になる。成就者の【堕落値】が2点上昇する。堕落チェックを行う。堕落チェックに失敗した場合、「運命変転表『狂気的災厄』」を使用し、その不幸を受ける。',
1116
- '成就者は、願いが叶い、欲望が増大する。次はより大きな願いを求めるようになるだろう。成就者の【堕落値】が1点上昇する。堕落チェックを行う。堕落チェックに失敗した場合、「運命変転表『社会的災厄』」を使用し、その不幸を受ける。',
1117
- '成就者は、自分の願いを叶えたのが魔法によるものだと気付く。成就者の【堕落値】が1点上昇する。堕落チェックを行う。堕落チェックに失敗した場合、「運命変転表『超常的災厄』」を使用し、その不幸を受ける。',
1118
- '成就者は、自分の願いを叶えたのがPCだと気付く。成就者の【堕落値】が、そのPCの成就者との【運命】の値と同じ値になる。もし、この効果によって【堕落値】が以前より増えていた場合、堕落チェックを行う。堕落チェックに失敗した場合、成就者は〈愚者〉ではなくなり、魔法使いとなる。',
1119
- ]
1120
- return get_table_by_1d6(table)
185
+ def translate_tables(locale, skill_table)
186
+ inveterate_enemy_table = SkillExpandTable.from_i18n("MagicaLogia.inveterate_enemy_table", locale, skill_table)
187
+ conspiracy_table = DiceTable::Table.from_i18n("MagicaLogia.conspiracy_table", locale)
188
+ fate_table = DiceTable::Table.from_i18n("MagicaLogia.fate_table", locale)
189
+ cueball_table = DiceTable::Table.from_i18n("MagicaLogia.cueball_table", locale)
190
+ force_field_table = DiceTable::Table.from_i18n("MagicaLogia.force_field_table", locale)
191
+ alliance_table = SkillExpandTable.from_i18n("MagicaLogia.alliance_table", locale, skill_table)
192
+
193
+ {
194
+ "TPT" => SkillExpandTable.from_i18n("MagicaLogia.tables.TPT", locale, skill_table),
195
+ "ST" => SkillExpandTable.from_i18n("MagicaLogia.tables.ST", locale, skill_table),
196
+ "FT" => DiceTable::Table.from_i18n("MagicaLogia.tables.FT", locale),
197
+ "WT" => SkillExpandTable.from_i18n("MagicaLogia.tables.WT", locale, skill_table),
198
+ "FCT" => DiceTable::Table.from_i18n("MagicaLogia.tables.FCT", locale),
199
+ "AT" => SkillExpandTable.from_i18n("MagicaLogia.tables.AT", locale, skill_table),
200
+ "BGT" => DiceTable::Table.from_i18n("MagicaLogia.tables.BGT", locale),
201
+ "DAT" => DiceTable::Table.from_i18n("MagicaLogia.tables.DAT", locale),
202
+ "FAT" => DiceTable::Table.from_i18n("MagicaLogia.tables.FAT", locale),
203
+ "WIT" => DiceTable::Table.from_i18n("MagicaLogia.tables.WIT", locale),
204
+ "TCT" => DiceTable::Table.from_i18n("MagicaLogia.tables.TCT", locale),
205
+ "PCT" => DiceTable::Table.from_i18n("MagicaLogia.tables.PCT", locale),
206
+ "MCT" => DiceTable::Table.from_i18n("MagicaLogia.tables.MCT", locale),
207
+ "ICT" => DiceTable::Table.from_i18n("MagicaLogia.tables.ICT", locale),
208
+ "SCT" => DiceTable::Table.from_i18n("MagicaLogia.tables.SCT", locale),
209
+ "XCT" => DiceTable::Table.from_i18n("MagicaLogia.tables.XCT", locale),
210
+ "WCT" => DiceTable::Table.from_i18n("MagicaLogia.tables.WCT", locale),
211
+ "CCT" => DiceTable::Table.from_i18n("MagicaLogia.tables.CCT", locale),
212
+ "MIT" => inveterate_enemy_table,
213
+ "MOT" => conspiracy_table,
214
+ "MAT" => fate_table,
215
+ "MUT" => cueball_table,
216
+ "MFT" => force_field_table,
217
+ "MLT" => alliance_table,
218
+ "BST" => DiceTable::ChainTable.new(
219
+ I18n.translate("MagicaLogia.tables.BST.name", raise: true, locale: locale),
220
+ "1D6",
221
+ [
222
+ inveterate_enemy_table,
223
+ conspiracy_table,
224
+ fate_table,
225
+ cueball_table,
226
+ force_field_table,
227
+ alliance_table,
228
+ ]
229
+ ),
230
+ "PT" => DiceTable::Table.from_i18n("MagicaLogia.tables.PT", locale),
231
+ "XEST" => SkillExpandTable.from_i18n("MagicaLogia.tables.XEST", locale, skill_table),
232
+ "IWST" => SkillExpandTable.from_i18n("MagicaLogia.tables.IWST", locale, skill_table),
233
+ "MCST" => SkillExpandTable.from_i18n("MagicaLogia.tables.MCST", locale, skill_table),
234
+ "WDST" => SkillExpandTable.from_i18n("MagicaLogia.tables.WDST", locale, skill_table),
235
+ "LWST" => SkillExpandTable.from_i18n("MagicaLogia.tables.LWST", locale, skill_table),
236
+ "STB" => SkillExpandTable.from_i18n("MagicaLogia.tables.STB", locale, skill_table),
237
+ "MGCT" => DiceTable::Table.from_i18n("MagicaLogia.tables.MGCT", locale),
238
+ "MBST" => SkillExpandTable.from_i18n("MagicaLogia.tables.MBST", locale, skill_table),
239
+ "MAST" => SkillExpandTable.from_i18n("MagicaLogia.tables.MAST", locale, skill_table),
240
+ "TCST" => SkillExpandTable.from_i18n("MagicaLogia.tables.TCST", locale, skill_table),
241
+ "PWST" => SkillExpandTable.from_i18n("MagicaLogia.tables.PWST", locale, skill_table),
242
+ "PAST" => SkillExpandTable.from_i18n("MagicaLogia.tables.PAST", locale, skill_table),
243
+ "GBST" => SkillExpandTable.from_i18n("MagicaLogia.tables.GBST", locale, skill_table),
244
+ "SLST" => SkillExpandTable.from_i18n("MagicaLogia.tables.SLST", locale, skill_table),
245
+ "WLAT" => DiceTable::Table.from_i18n("MagicaLogia.tables.WLAT", locale),
246
+ "WMT" => SkillExpandTable.from_i18n("MagicaLogia.tables.WMT", locale, skill_table),
247
+ "FFT" => DiceTable::Table.from_i18n("MagicaLogia.tables.FFT", locale),
248
+ "OLST" => SkillExpandTable.from_i18n("MagicaLogia.tables.OLST", locale, skill_table),
249
+ "TPTB" => SkillExpandTable.from_i18n("MagicaLogia.tables.TPTB", locale, skill_table),
250
+ "FLT" => FallenAfterTable.from_i18n("MagicaLogia.tables.FLT", locale),
251
+ }
252
+ end
1121
253
  end
1122
254
 
1123
- def magicalogia_fallen_after_table_high
1124
- table = [
1125
- '成就者は、突如自分に訪れた幸運に罪悪感を覚えるようになる。もし成就者の【堕落値】が1点以上だった場合、堕落チェックを行う。堕落チェックに失敗した場合、「運命変転表『精神的災厄』」を使用し、その不幸を受ける。',
1126
- '成就者は、願いを叶えたPCに対して不信感を感じるようになる。自分は利用されているのでは無いかと疑い始め、願いを叶えたPCと距離を取る。成就者との【運命】の値が1点減少する。',
1127
- '成就者は、叶えて貰った願いを失うことになる。堕落チェックを行う。堕落チェックに成功すると、【堕落値】が1点減少する。',
1128
- '成就者は、願いを叶えたPCが魔法使いだと気付く。以降、その成就者の【堕落値】が上昇することがあった場合、その上昇値が1点増える(この効果は累積しない)。この効果が気に入らない場合、PCはその成就者の自分に関する記憶を消すことで、この効果を無効化することもできる。その場合、PCの成就者との【運命】の値は1になる。',
1129
- '成就者は、突然の幸運に感謝しつつも、自分の日常と戦っていく。もし、成就者に【堕落値】が1点以上ある場合、その値が1点減少する。',
1130
- '成就者は、信じれば夢が叶うと思うようになり、少しだけ前向きになる。PCは功績点を1点獲得する。',
1131
- ]
1132
- return get_table_by_1d6(table)
1133
- end
255
+ SKILL_TABLE = translate_skill_table(:ja_jp)
256
+ TABLES = translate_tables(:ja_jp, SKILL_TABLE)
1134
257
 
1135
- def magicalogia_fallen_after_table
1136
- num = @randomizer.roll_once(6)
1137
- if num <= 3
1138
- outtext, outnum = magicalogia_fallen_after_table_low
1139
- else
1140
- outtext, outnum = magicalogia_fallen_after_table_high
1141
- end
1142
- outtext = outtext.to_s
1143
- outnum = "#{num},#{outnum}"
1144
- return outtext, outnum
1145
- end
258
+ register_prefix(SKILL_TABLE.prefixes)
259
+ register_prefix(TABLES.keys)
1146
260
  end
1147
261
  end
1148
262
  end