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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +1 -1
  3. data/.rubocop.yml +12 -0
  4. data/.rubocop_todo.yml +1 -0
  5. data/CHANGELOG.md +34 -0
  6. data/Gemfile +6 -3
  7. data/Rakefile +52 -18
  8. data/bcdice.gemspec +2 -0
  9. data/i18n/Amadeus/ja_jp.yml +386 -0
  10. data/i18n/Amadeus/ko_kr.yml +148 -0
  11. data/i18n/Cthulhu/ja_jp.yml +11 -0
  12. data/i18n/Cthulhu/ko_kr.yml +11 -0
  13. data/i18n/Cthulhu/zh_hant.yml +11 -0
  14. data/i18n/DetatokoSaga/ja_jp.yml +74 -0
  15. data/i18n/DetatokoSaga/ko_kr.yml +74 -0
  16. data/i18n/DoubleCross/ja_jp.yml +53 -0
  17. data/i18n/DoubleCross/ko_kr.yml +53 -0
  18. data/i18n/Dracurouge/ja_jp.yml +1374 -0
  19. data/i18n/Dracurouge/ko_kr.yml +295 -0
  20. data/i18n/Fiasco/ja_jp.yml +10 -0
  21. data/i18n/Fiasco/ko_kr.yml +10 -0
  22. data/i18n/FutariSousa/ja_jp.yml +720 -0
  23. data/i18n/FutariSousa/ko_kr.yml +746 -0
  24. data/i18n/Insane/ja_jp.yml +454 -0
  25. data/i18n/Insane/ko_kr.yml +502 -0
  26. data/i18n/Kamigakari/ja_jp.yml +276 -0
  27. data/i18n/Kamigakari/ko_kr.yml +204 -0
  28. data/i18n/KillDeathBusiness/ja_jp.yml +1092 -0
  29. data/i18n/KillDeathBusiness/ko_kr.yml +1062 -0
  30. data/i18n/LogHorizon/ja_jp.yml +3082 -0
  31. data/i18n/LogHorizon/ko_kr.yml +923 -0
  32. data/i18n/MagicaLogia/ja_jp.yml +564 -0
  33. data/i18n/MonotoneMuseum/ja_jp.yml +525 -0
  34. data/i18n/MonotoneMuseum/ko_kr.yml +89 -0
  35. data/i18n/Nechronica/ja_jp.yml +57 -0
  36. data/i18n/Nechronica/ko_kr.yml +14 -0
  37. data/i18n/StratoShout/ja_jp.yml +160 -0
  38. data/i18n/StratoShout/ko_kr.yml +160 -0
  39. data/i18n/ja_jp.yml +5 -0
  40. data/i18n/ko_kr.yml +7 -0
  41. data/i18n/zh_hant.yml +3 -0
  42. data/lib/bcdice/arithmetic/node.rb +154 -0
  43. data/lib/bcdice/base.rb +87 -101
  44. data/lib/bcdice/common_command.rb +2 -0
  45. data/lib/bcdice/common_command/add_dice.rb +5 -41
  46. data/lib/bcdice/common_command/add_dice/node.rb +92 -16
  47. data/lib/bcdice/common_command/add_dice/parser.rb +374 -274
  48. data/lib/bcdice/common_command/add_dice/parser.y +153 -0
  49. data/lib/bcdice/common_command/add_dice/randomizer.rb +25 -33
  50. data/lib/bcdice/common_command/barabara_dice.rb +6 -47
  51. data/lib/bcdice/common_command/barabara_dice/node.rb +84 -0
  52. data/lib/bcdice/common_command/barabara_dice/parser.rb +336 -0
  53. data/lib/bcdice/common_command/barabara_dice/parser.y +107 -0
  54. data/lib/bcdice/common_command/calc.rb +7 -30
  55. data/lib/bcdice/common_command/calc/node.rb +30 -0
  56. data/lib/bcdice/common_command/calc/parser.rb +271 -0
  57. data/lib/bcdice/common_command/calc/parser.y +79 -0
  58. data/lib/bcdice/common_command/choice.rb +137 -19
  59. data/lib/bcdice/common_command/d66_dice.rb +48 -34
  60. data/lib/bcdice/common_command/lexer.rb +46 -0
  61. data/lib/bcdice/common_command/repeat.rb +102 -0
  62. data/lib/bcdice/common_command/reroll_dice.rb +8 -158
  63. data/lib/bcdice/common_command/reroll_dice/node.rb +198 -0
  64. data/lib/bcdice/common_command/reroll_dice/parser.rb +421 -0
  65. data/lib/bcdice/common_command/reroll_dice/parser.y +158 -0
  66. data/lib/bcdice/common_command/upper_dice.rb +10 -129
  67. data/lib/bcdice/common_command/upper_dice/node.rb +181 -0
  68. data/lib/bcdice/common_command/upper_dice/parser.rb +412 -0
  69. data/lib/bcdice/common_command/upper_dice/parser.y +143 -0
  70. data/lib/bcdice/common_command/version.rb +9 -17
  71. data/lib/bcdice/deprecated/checker.rb +78 -0
  72. data/lib/bcdice/dice_table/d66_grid_table.rb +8 -0
  73. data/lib/bcdice/dice_table/d66_table.rb +10 -0
  74. data/lib/bcdice/dice_table/sai_fic_skill_table.rb +75 -17
  75. data/lib/bcdice/dice_table/sai_fic_skill_table/category.rb +25 -0
  76. data/lib/bcdice/dice_table/sai_fic_skill_table/skill.rb +23 -0
  77. data/lib/bcdice/dice_table/table.rb +8 -0
  78. data/lib/bcdice/game_system.rb +7 -1
  79. data/lib/bcdice/game_system/AFF2e.rb +1 -1
  80. data/lib/bcdice/game_system/AceKillerGene.rb +2 -2
  81. data/lib/bcdice/game_system/Airgetlamh.rb +3 -3
  82. data/lib/bcdice/game_system/Alsetto.rb +1 -1
  83. data/lib/bcdice/game_system/Alshard.rb +1 -1
  84. data/lib/bcdice/game_system/AlterRaise.rb +2 -2
  85. data/lib/bcdice/game_system/Amadeus.rb +46 -507
  86. data/lib/bcdice/game_system/Amadeus_Korean.rb +12 -456
  87. data/lib/bcdice/game_system/AnimaAnimus.rb +1 -1
  88. data/lib/bcdice/game_system/Arianrhod.rb +0 -1
  89. data/lib/bcdice/game_system/ArsMagica.rb +1 -1
  90. data/lib/bcdice/game_system/Avandner.rb +1 -1
  91. data/lib/bcdice/game_system/BBN.rb +1 -1
  92. data/lib/bcdice/game_system/BadLife.rb +1 -1
  93. data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
  94. data/lib/bcdice/game_system/BeastBindTrinity.rb +1 -2
  95. data/lib/bcdice/game_system/BeginningIdol.rb +2 -3
  96. data/lib/bcdice/game_system/BeginningIdol_Korean.rb +2 -3
  97. data/lib/bcdice/game_system/BladeOfArcana.rb +2 -2
  98. data/lib/bcdice/game_system/BlindMythos.rb +1 -1
  99. data/lib/bcdice/game_system/BloodCrusade.rb +0 -1
  100. data/lib/bcdice/game_system/BloodMoon.rb +0 -1
  101. data/lib/bcdice/game_system/CardRanker.rb +1 -2
  102. data/lib/bcdice/game_system/ChaosFlare.rb +1 -1
  103. data/lib/bcdice/game_system/Chill.rb +1 -1
  104. data/lib/bcdice/game_system/CodeLayerd.rb +1 -1
  105. data/lib/bcdice/game_system/ColossalHunter.rb +1 -2
  106. data/lib/bcdice/game_system/Comes.rb +50 -0
  107. data/lib/bcdice/game_system/CrashWorld.rb +1 -1
  108. data/lib/bcdice/game_system/Cthulhu.rb +94 -97
  109. data/lib/bcdice/game_system/Cthulhu7th.rb +108 -67
  110. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
  111. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
  112. data/lib/bcdice/game_system/CthulhuTech.rb +8 -14
  113. data/lib/bcdice/game_system/Cthulhu_ChineseTraditional.rb +7 -190
  114. data/lib/bcdice/game_system/Cthulhu_Korean.rb +5 -186
  115. data/lib/bcdice/game_system/DarkBlaze.rb +9 -5
  116. data/lib/bcdice/game_system/DarkDaysDrive.rb +17 -15
  117. data/lib/bcdice/game_system/DarkSouls.rb +1 -1
  118. data/lib/bcdice/game_system/DeadlineHeroes.rb +2 -2
  119. data/lib/bcdice/game_system/DemonParasite.rb +1 -2
  120. data/lib/bcdice/game_system/DetatokoSaga.rb +48 -149
  121. data/lib/bcdice/game_system/DetatokoSaga_Korean.rb +6 -274
  122. data/lib/bcdice/game_system/DiceOfTheDead.rb +9 -6
  123. data/lib/bcdice/game_system/DoubleCross.rb +102 -81
  124. data/lib/bcdice/game_system/DoubleCross_Korean.rb +13 -330
  125. data/lib/bcdice/game_system/Dracurouge.rb +376 -1678
  126. data/lib/bcdice/game_system/Dracurouge_Korean.rb +16 -271
  127. data/lib/bcdice/game_system/EarthDawn.rb +1 -1
  128. data/lib/bcdice/game_system/EarthDawn3.rb +1 -1
  129. data/lib/bcdice/game_system/EarthDawn4.rb +1 -1
  130. data/lib/bcdice/game_system/Elysion.rb +3 -4
  131. data/lib/bcdice/game_system/EmbryoMachine.rb +1 -1
  132. data/lib/bcdice/game_system/Emoklore.rb +131 -0
  133. data/lib/bcdice/game_system/EndBreaker.rb +1 -2
  134. data/lib/bcdice/game_system/EtrianOdysseySRS.rb +1 -1
  135. data/lib/bcdice/game_system/Fiasco.rb +87 -70
  136. data/lib/bcdice/game_system/Fiasco_Korean.rb +7 -95
  137. data/lib/bcdice/game_system/FilledWith.rb +462 -566
  138. data/lib/bcdice/game_system/FullMetalPanic.rb +1 -1
  139. data/lib/bcdice/game_system/FutariSousa.rb +103 -938
  140. data/lib/bcdice/game_system/FutariSousa_Korean.rb +7 -948
  141. data/lib/bcdice/game_system/{Gurps.rb → GURPS.rb} +184 -217
  142. data/lib/bcdice/game_system/Garako.rb +131 -39
  143. data/lib/bcdice/game_system/GardenOrder.rb +2 -2
  144. data/lib/bcdice/game_system/GehennaAn.rb +1 -1
  145. data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +1 -1
  146. data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
  147. data/lib/bcdice/game_system/GoldenSkyStories.rb +1 -1
  148. data/lib/bcdice/game_system/Gorilla.rb +1 -1
  149. data/lib/bcdice/game_system/GranCrest.rb +2 -3
  150. data/lib/bcdice/game_system/GundogRevised.rb +1 -1
  151. data/lib/bcdice/game_system/GundogZero.rb +1 -1
  152. data/lib/bcdice/game_system/GurpsFW.rb +2 -3
  153. data/lib/bcdice/game_system/HarnMaster.rb +2 -2
  154. data/lib/bcdice/game_system/HatsuneMiku.rb +1 -2
  155. data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
  156. data/lib/bcdice/game_system/HuntersMoon.rb +1 -2
  157. data/lib/bcdice/game_system/Illusio.rb +2 -2
  158. data/lib/bcdice/game_system/Insane.rb +90 -717
  159. data/lib/bcdice/game_system/Insane_Korean.rb +7 -719
  160. data/lib/bcdice/game_system/Kamigakari.rb +47 -242
  161. data/lib/bcdice/game_system/Kamigakari_Korean.rb +6 -394
  162. data/lib/bcdice/game_system/KanColle.rb +3 -3
  163. data/lib/bcdice/game_system/KemonoNoMori.rb +1 -1
  164. data/lib/bcdice/game_system/KillDeathBusiness.rb +162 -1144
  165. data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +6 -1459
  166. data/lib/bcdice/game_system/KurayamiCrying.rb +1 -1
  167. data/lib/bcdice/game_system/LiveraDoll.rb +2 -2
  168. data/lib/bcdice/game_system/LogHorizon.rb +350 -3379
  169. data/lib/bcdice/game_system/LogHorizon_Korean.rb +55 -1357
  170. data/lib/bcdice/game_system/LostRecord.rb +0 -1
  171. data/lib/bcdice/game_system/LostRoyal.rb +1 -2
  172. data/lib/bcdice/game_system/MagicaLogia.rb +158 -1044
  173. data/lib/bcdice/game_system/MeikyuDays.rb +1 -2
  174. data/lib/bcdice/game_system/MeikyuKingdom.rb +4 -4
  175. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +4 -5
  176. data/lib/bcdice/game_system/MetalHead.rb +1 -1
  177. data/lib/bcdice/game_system/MetalHeadExtream.rb +2 -2
  178. data/lib/bcdice/game_system/MetallicGuardian.rb +1 -1
  179. data/lib/bcdice/game_system/MonotoneMuseum.rb +38 -239
  180. data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +10 -270
  181. data/lib/bcdice/game_system/NSSQ.rb +159 -0
  182. data/lib/bcdice/game_system/Nechronica.rb +34 -73
  183. data/lib/bcdice/game_system/Nechronica_Korean.rb +11 -128
  184. data/lib/bcdice/game_system/NeverCloud.rb +1 -1
  185. data/lib/bcdice/game_system/NightWizard.rb +1 -1
  186. data/lib/bcdice/game_system/NightWizard3rd.rb +1 -1
  187. data/lib/bcdice/game_system/NinjaSlayer.rb +12 -11
  188. data/lib/bcdice/game_system/NjslyrBattle.rb +1 -1
  189. data/lib/bcdice/game_system/OneWayHeroics.rb +1 -2
  190. data/lib/bcdice/game_system/OracleEngine.rb +1 -1
  191. data/lib/bcdice/game_system/OrgaRain.rb +2 -2
  192. data/lib/bcdice/game_system/Paradiso.rb +1 -1
  193. data/lib/bcdice/game_system/Paranoia.rb +1 -1
  194. data/lib/bcdice/game_system/ParanoiaRebooted.rb +1 -1
  195. data/lib/bcdice/game_system/ParasiteBlood.rb +1 -1
  196. data/lib/bcdice/game_system/Peekaboo.rb +22 -122
  197. data/lib/bcdice/game_system/Postman.rb +2 -2
  198. data/lib/bcdice/game_system/PulpCthulhu.rb +3 -3
  199. data/lib/bcdice/game_system/Raisondetre.rb +2 -2
  200. data/lib/bcdice/game_system/RecordOfLodossWar.rb +1 -1
  201. data/lib/bcdice/game_system/RecordOfSteam.rb +1 -1
  202. data/lib/bcdice/game_system/RokumonSekai2.rb +1 -1
  203. data/lib/bcdice/game_system/RuinBreakers.rb +296 -0
  204. data/lib/bcdice/game_system/Ryutama.rb +1 -1
  205. data/lib/bcdice/game_system/SRS.rb +1 -2
  206. data/lib/bcdice/game_system/SamsaraBallad.rb +1 -1
  207. data/lib/bcdice/game_system/Satasupe.rb +1 -2
  208. data/lib/bcdice/game_system/ScreamHighSchool.rb +2 -2
  209. data/lib/bcdice/game_system/SevenFortressMobius.rb +1 -1
  210. data/lib/bcdice/game_system/ShadowRun5.rb +2 -2
  211. data/lib/bcdice/game_system/SharedFantasia.rb +1 -1
  212. data/lib/bcdice/game_system/ShinMegamiTenseiKakuseihen.rb +1 -1
  213. data/lib/bcdice/game_system/ShinkuuGakuen.rb +2 -2
  214. data/lib/bcdice/game_system/ShinobiGami.rb +1 -2
  215. data/lib/bcdice/game_system/ShoujoTenrankai.rb +2 -2
  216. data/lib/bcdice/game_system/Skynauts.rb +1 -1
  217. data/lib/bcdice/game_system/SteamPunkers.rb +1 -1
  218. data/lib/bcdice/game_system/StellarKnights.rb +1 -2
  219. data/lib/bcdice/game_system/SterileLife.rb +1 -1
  220. data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -2
  221. data/lib/bcdice/game_system/StratoShout.rb +44 -247
  222. data/lib/bcdice/game_system/StratoShout_Korean.rb +6 -282
  223. data/lib/bcdice/game_system/Strave.rb +2 -2
  224. data/lib/bcdice/game_system/SwordWorld.rb +8 -9
  225. data/lib/bcdice/game_system/SwordWorld2_0.rb +2 -3
  226. data/lib/bcdice/game_system/SwordWorld2_5.rb +2 -3
  227. data/lib/bcdice/game_system/TherapieSein.rb +1 -1
  228. data/lib/bcdice/game_system/TokumeiTenkousei.rb +1 -1
  229. data/lib/bcdice/game_system/TokyoGhostResearch.rb +2 -2
  230. data/lib/bcdice/game_system/Torg.rb +2 -2
  231. data/lib/bcdice/game_system/Torg1_5.rb +1 -1
  232. data/lib/bcdice/game_system/TorgEternity.rb +1 -1
  233. data/lib/bcdice/game_system/TrinitySeven.rb +1 -1
  234. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +1 -1
  235. data/lib/bcdice/game_system/TwilightGunsmoke.rb +1 -2
  236. data/lib/bcdice/game_system/UnsungDuet.rb +139 -0
  237. data/lib/bcdice/game_system/Utakaze.rb +1 -1
  238. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +1 -1
  239. data/lib/bcdice/game_system/Villaciel.rb +1 -2
  240. data/lib/bcdice/game_system/Warhammer.rb +1 -1
  241. data/lib/bcdice/game_system/Warhammer4.rb +329 -0
  242. data/lib/bcdice/game_system/WitchQuest.rb +1 -1
  243. data/lib/bcdice/game_system/WorldOfDarkness.rb +1 -1
  244. data/lib/bcdice/game_system/YankeeYogSothoth.rb +15 -15
  245. data/lib/bcdice/game_system/YearZeroEngine.rb +1 -1
  246. data/lib/bcdice/game_system/ZettaiReido.rb +1 -1
  247. data/lib/bcdice/game_system/filled_with/cook_tables.rb +119 -0
  248. data/lib/bcdice/game_system/filled_with/lot_tables.rb +155 -0
  249. data/lib/bcdice/loader.rb +6 -8
  250. data/lib/bcdice/preprocessor.rb +15 -40
  251. data/lib/bcdice/repl.rb +1 -1
  252. data/lib/bcdice/result.rb +83 -0
  253. data/lib/bcdice/translate.rb +11 -0
  254. data/lib/bcdice/version.rb +1 -1
  255. metadata +80 -4
@@ -22,7 +22,7 @@ module BCDice
22
22
   例)SET1 SET48
23
23
  MESSAGETEXT
24
24
 
25
- register_prefix(['WQ\d+', 'SET\d+'])
25
+ register_prefix('WQ\d+', 'SET\d+')
26
26
 
27
27
  def eval_game_system_specific_command(command)
28
28
  case command
@@ -23,7 +23,7 @@ module BCDice
23
23
   自動成功=省略時0
24
24
  INFO_MESSAGE_TEXT
25
25
 
26
- register_prefix(['\d+ST.*'])
26
+ register_prefix('\d+ST.*')
27
27
 
28
28
  def initialize(command)
29
29
  super(command)
@@ -23,7 +23,8 @@ module BCDice
23
23
  ※うろつき~決闘フェイズ
24
24
  FT ファンブル表
25
25
  WT 変調表
26
- RTT ランダム特技決定表
26
+ RTTn ランダム特技決定表(n:分野番号、省略可能)
27
+ RCT ランダム分野決定表
27
28
  KKT 関係表
28
29
  DBRT 他愛のない会話表
29
30
  TKT 戦う理由表
@@ -44,7 +45,6 @@ module BCDice
44
45
 
45
46
  def initialize(command)
46
47
  super(command)
47
- @enabled_d66 = true
48
48
  @d66_sort_type = D66SortType::ASC
49
49
  end
50
50
 
@@ -65,7 +65,7 @@ module BCDice
65
65
  end
66
66
 
67
67
  def eval_game_system_specific_command(command)
68
- roll_tables(command, TABLES)
68
+ roll_tables(command, TABLES) || RTT.roll_command(randomizer, command)
69
69
  end
70
70
 
71
71
  NICKNAME_TABLE1 = DiceTable::D66Table.new(
@@ -180,18 +180,18 @@ module BCDice
180
180
  }
181
181
  )
182
182
 
183
+ RTT = DiceTable::SaiFicSkillTable.new(
184
+ [
185
+ ['苦手', ['大人', '勉強', '敗北', '昆虫', '親', '異性', '孤独', '高所', '暗がり', 'ホラー', '子供']],
186
+ ['部活', ['柔道', 'プロレス', 'テコンドー', '空手', 'ボクシング', '帰宅', '剣道', '野球', '応援団', '科学', '文系']],
187
+ ['中学時代', ['悪ガキ', '統一', 'バイト', '習い事', '喧嘩', 'サボり', 'マジメくん', '遊び歩き', '真似ごと', '部活', '何もしない']],
188
+ ['趣味', ['すけべ', '車・バイク', '家事', '料理', '運動', '修行', 'ファッション', 'つるむ', '寝る', 'ゲーム', '読書']],
189
+ ['スタイル', ['テキトー', 'ばか', 'オラオラ', '熱血', '硬派', '自然体', '軟派', '自分大好き', '腹黒', 'クール', 'インテリ']],
190
+ ['好み', ['だらだら', '食事', '逆転', '家族', '支配', '褒められる', '恋愛', '友情', '勝利', '金', '静寂']],
191
+ ],
192
+ rtt_format: "ランダム指定特技表(%<category_dice>d,%<row_dice>d) > %<text>s"
193
+ )
183
194
  TABLES = {
184
- "RTT" => DiceTable::SaiFicSkillTable.new(
185
- [
186
- ['苦手', ['大人', '勉強', '敗北', '昆虫', '親', '異性', '孤独', '高所', '暗がり', 'ホラー', '子供']],
187
- ['部活', ['柔道', 'プロレス', 'テコンドー', '空手', 'ボクシング', '帰宅', '剣道', '野球', '応援団', '科学', '文系']],
188
- ['中学時代', ['悪ガキ', '統一', 'バイト', '習い事', '喧嘩', 'サボり', 'マジメくん', '遊び歩き', '真似ごと', '部活', '何もしない']],
189
- ['趣味', ['すけべ', '車・バイク', '家事', '料理', '運動', '修行', 'ファッション', 'つるむ', '寝る', 'ゲーム', '読書']],
190
- ['スタイル', ['テキトー', 'ばか', 'オラオラ', '熱血', '硬派', '自然体', '軟派', '自分大好き', '腹黒', 'クール', 'インテリ']],
191
- ['好み', ['だらだら', '食事', '逆転', '家族', '支配', '褒められる', '恋愛', '友情', '勝利', '金', '静寂']],
192
- ],
193
- peekaboo_style: true
194
- ),
195
195
  "FTNT" => DiceTable::ChainTable.new(
196
196
  "二つ名決定表",
197
197
  "1D6",
@@ -434,7 +434,7 @@ module BCDice
434
434
  ),
435
435
  }.freeze
436
436
 
437
- register_prefix(TABLES.keys)
437
+ register_prefix(RTT.prefixes, TABLES.keys)
438
438
  end
439
439
  end
440
440
  end
@@ -29,7 +29,7 @@ module BCDice
29
29
  SKILL_INDEX = 5 # 技能値ダイスのインデックス
30
30
  MODIFIED_INDEX = 7 # 修正ダイスのインデックス
31
31
 
32
- register_prefix(['(\d+)?(YZE|MYZ).*'])
32
+ register_prefix('(\d+)?(YZE|MYZ).*')
33
33
 
34
34
  def dice_info_init()
35
35
  @total_success_dice = 0
@@ -20,7 +20,7 @@ module BCDice
20
20
  DPの取得の有無も表示されます。
21
21
  INFO_MESSAGE_TEXT
22
22
 
23
- register_prefix(['\d+\-2DR.*'])
23
+ register_prefix('\d+\-2DR.*')
24
24
 
25
25
  def eval_game_system_specific_command(command)
26
26
  return nil unless command =~ /^(\d+)-2DR([\+\-\d]*)(>=(\d+))?$/i
@@ -0,0 +1,119 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bcdice/dice_table/range_table"
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class FilledWith
8
+ # マジカルクッキング表
9
+ #
10
+ # 別の表に飛ぶ場合は、遅延評価のためにlambdaでジャンプ先の表を括る。
11
+ COOK_TABLES = {
12
+ 1 => DiceTable::RangeTable.new(
13
+ "マジカルクッキング(Lv 1)",
14
+ "1D6",
15
+ [
16
+ [1, "おべんとミートボール"],
17
+ [2, "パリパリ小魚"],
18
+ [3, "キャロットタルト"],
19
+ [4, "おにぎり"],
20
+ [5..6, lambda { COOK_TABLES[2] }],
21
+ ]
22
+ ).freeze,
23
+
24
+ 2 => DiceTable::RangeTable.new(
25
+ "マジカルクッキング(Lv 2)",
26
+ "1D6",
27
+ [
28
+ [1, "カリカリミミズ肉"],
29
+ [2, "竹つきチクワ"],
30
+ [3, "トロピカルジュース"],
31
+ [4, "イナリ寿司"],
32
+ [5..6, lambda { COOK_TABLES[3] }],
33
+ ]
34
+ ).freeze,
35
+
36
+ 3 => DiceTable::RangeTable.new(
37
+ "マジカルクッキング(Lv 3)",
38
+ "1D6",
39
+ [
40
+ [1, "ホットミートパイ"],
41
+ [2, "魔界魚の目玉"],
42
+ [3, "パンプキンプリン"],
43
+ [4, "スタミナ丼"],
44
+ [5..6, lambda { COOK_TABLES[4] }],
45
+ ]
46
+ ).freeze,
47
+
48
+ 4 => DiceTable::RangeTable.new(
49
+ "マジカルクッキング(Lv 4)",
50
+ "1D6",
51
+ [
52
+ [1, "ジャンボ串焼き"],
53
+ [2, "シルヴァまっしぐら"],
54
+ [3, "フラウアイスクリーム"],
55
+ [4, "ピクニックランチ"],
56
+ [5..6, lambda { COOK_TABLES[5] }],
57
+ ]
58
+ ).freeze,
59
+
60
+ 5 => DiceTable::RangeTable.new(
61
+ "マジカルクッキング(Lv 5)",
62
+ "1D6",
63
+ [
64
+ [1, "グラント風香草焼き"],
65
+ [2, "エドマエスシ"],
66
+ [3, "スターフルーツパフェ"],
67
+ [4, "具沢山本格カレー"],
68
+ [5..6, lambda { COOK_TABLES[6] }],
69
+ ]
70
+ ).freeze,
71
+
72
+ 6 => DiceTable::RangeTable.new(
73
+ "マジカルクッキング(Lv 6)",
74
+ "1D6",
75
+ [
76
+ [1, "ドラゴンステーキ"],
77
+ [2, "刺身盛り合わせ"],
78
+ [3, "エデンのアップルパイ"],
79
+ [4, "フォートレス炒飯"],
80
+ [5..6, lambda { COOK_TABLES[7] }],
81
+ ]
82
+ ).freeze,
83
+
84
+ 7 => DiceTable::RangeTable.new(
85
+ "マジカルクッキング(Lv 7)",
86
+ "1D6",
87
+ [
88
+ [1, "マツザカスペシャル"],
89
+ [2, "オオトロスシ"],
90
+ [3, "スノーホワイトボンブ"],
91
+ [4, "よもつへぐい"],
92
+ [5..6, lambda { COOK_TABLES[8] }],
93
+ ]
94
+ ).freeze,
95
+
96
+ 8 => DiceTable::RangeTable.new(
97
+ "マジカルクッキング(Lv 8)",
98
+ "1D6",
99
+ [
100
+ [1, "超特大マンガ肉"],
101
+ [2, "特上うな丼"],
102
+ [3, "魔将樹のかき氷"],
103
+ [4, "ヘブンズランチ"],
104
+ [5..6, lambda { COOK_TABLES[9] }],
105
+ ]
106
+ ).freeze,
107
+
108
+ 9 => DiceTable::RangeTable.new(
109
+ "マジカルクッキング(Lv 9)",
110
+ "1D6",
111
+ [
112
+ [1..3, "世界樹のサラダ"],
113
+ [4..6, "黄金のラダマン鍋"],
114
+ ]
115
+ ).freeze,
116
+ }.freeze
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,155 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bcdice/dice_table/range_table"
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class FilledWith
8
+ # ナンバーワンノーマルくじ表(GURPS-FW版)
9
+ #
10
+ # 別の表に飛ぶ場合は、遅延評価のためにlambdaでジャンプ先の表を括る。
11
+ LOT_NORMAL_TABLES = {
12
+ 1 => DiceTable::RangeTable.new(
13
+ "ナンバーワンノーマルくじ(phase 1)",
14
+ "1D6",
15
+ [
16
+ [1..3, "イレブンチキン"],
17
+ [4..5, lambda { LOT_NORMAL_TABLES[2] }],
18
+ [6, lambda { LOT_NORMAL_TABLES[3] }],
19
+ ]
20
+ ).freeze,
21
+
22
+ 2 => DiceTable::RangeTable.new(
23
+ "ナンバーワンノーマルくじ(phase 2)",
24
+ "1D6",
25
+ [
26
+ [1, "バロールたわし"],
27
+ [2, "イグニスジッポ"],
28
+ [3, "ヤコ仮面or梟の文鎮(選択可)"],
29
+ [4, "ナレッジのハンモックorジンジャビースト"],
30
+ [5..6, lambda { LOT_NORMAL_TABLES[3] }],
31
+ ]
32
+ ).freeze,
33
+
34
+ 3 => DiceTable::RangeTable.new(
35
+ "ナンバーワンノーマルくじ(phase 3)",
36
+ "1D6",
37
+ [
38
+ [1, "特性HPポーション"],
39
+ [2, "特性MPポーション"],
40
+ [3, "黒い甲冑"],
41
+ [4, "天体望遠鏡"],
42
+ [5, "金獅子の剥製"],
43
+ [6, lambda { LOT_NORMAL_TABLES[4] }],
44
+ ]
45
+ ).freeze,
46
+
47
+ 4 => DiceTable::RangeTable.new(
48
+ "ナンバーワンノーマルくじ(phase 4)",
49
+ "1D6",
50
+ [
51
+ [1, "特性スタミナポーション"],
52
+ [2, "戦乙女の兜"],
53
+ [3, "フェンリルの首輪"],
54
+ [4, "フェニックスカーペット"],
55
+ [5, "動くアダマンゴーレム"],
56
+ [6, lambda { LOT_NORMAL_TABLES[5] }],
57
+ ]
58
+ ).freeze,
59
+
60
+ 5 => DiceTable::RangeTable.new(
61
+ "ナンバーワンノーマルくじ(phase 5)",
62
+ "1D6",
63
+ [
64
+ [1, "キャンディークッション"],
65
+ [2, "屑鉄の金床"],
66
+ [3, "薪割り王の斧"],
67
+ [4, "ロジエの水差し"],
68
+ [5, "箱舟の模型"],
69
+ [6, lambda { LOT_PREMIUM_TABLES[5] }],
70
+ ]
71
+ ).freeze,
72
+ }.freeze
73
+
74
+ # ナンバーワンプレミアムくじ表(GURPS-FW版)
75
+ #
76
+ # 別の表に飛ぶ場合は、遅延評価のためにlambdaでジャンプ先の表を括る。
77
+ LOT_PREMIUM_TABLES = {
78
+ 1 => DiceTable::RangeTable.new(
79
+ "ナンバーワンプレミアムくじ(phase 1)",
80
+ "1D6",
81
+ [
82
+ [1..3, "プレミアムチキン"],
83
+ [4, lambda { LOT_NORMAL_TABLES[3] }],
84
+ [5..6, lambda { LOT_PREMIUM_TABLES[2] }],
85
+ ]
86
+ ).freeze,
87
+
88
+ 2 => DiceTable::RangeTable.new(
89
+ "ナンバーワンプレミアムくじ(phase 2)",
90
+ "1D6",
91
+ [
92
+ [1, "親衛隊バッジ"],
93
+ [2, "ハタモトチャブダイ"],
94
+ [3, "星のコンパス"],
95
+ [4, "白銀の甲冑"],
96
+ [5, lambda { LOT_NORMAL_TABLES[4] }],
97
+ [6, lambda { LOT_PREMIUM_TABLES[3] }],
98
+ ]
99
+ ).freeze,
100
+
101
+ 3 => DiceTable::RangeTable.new(
102
+ "ナンバーワンプレミアムくじ(phase 3)",
103
+ "1D6",
104
+ [
105
+ [1, "特性クイックHPポーション"],
106
+ [2, "特性クイックMPポーション"],
107
+ [3, "特製クイックスタミナポーション"],
108
+ [4, "火龍のフィギュアor氷龍のフィギュア(選択可)"],
109
+ [5, "ヒメショーグンドレス"],
110
+ [6, lambda { LOT_PREMIUM_TABLES[4] }],
111
+ ]
112
+ ).freeze,
113
+
114
+ 4 => DiceTable::RangeTable.new(
115
+ "ナンバーワンプレミアムくじ(phase 4)",
116
+ "1D6",
117
+ [
118
+ [1, "クイックユグドラポーション"],
119
+ [2, "銀河龍のフィギュア/ドラゴン"],
120
+ [3, "銀河龍のフィギュア/魔族"],
121
+ [4, "魔族チェスセット"],
122
+ [5, "イグニスコンロ"],
123
+ [6, lambda { LOT_PREMIUM_TABLES[5] }],
124
+ ]
125
+ ).freeze,
126
+
127
+ 5 => DiceTable::RangeTable.new(
128
+ "ナンバーワンプレミアムくじ(phase 5)",
129
+ "1D6",
130
+ [
131
+ [1, "グレヴディバリウス"],
132
+ [2, "天使の望遠鏡orデスの目覚まし時計(選択可)"],
133
+ [3, "世界樹の蔦"],
134
+ [4, "死神の飾りドレス"],
135
+ [5, "ザバーニヤ等身大フィギュア"],
136
+ [6, lambda { LOT_PREMIUM_TABLES[6] }],
137
+ ]
138
+ ).freeze,
139
+
140
+ 6 => DiceTable::RangeTable.new(
141
+ "ナンバーワンプレミアムくじ(phase 6)",
142
+ "1D6",
143
+ [
144
+ [1, "イレブンチキン"],
145
+ [2, "イレブンチキン(2ピース)"],
146
+ [3, "イレブンチキン(3ピース)"],
147
+ [4, "イレブンチキン(6ピース)"],
148
+ [5, "イレブンチキン(12ピース)"],
149
+ [6, "wish star"],
150
+ ]
151
+ ).freeze,
152
+ }.freeze
153
+ end
154
+ end
155
+ end
@@ -1,13 +1,11 @@
1
1
  module BCDice
2
2
  class << self
3
- # クラス名を指定してゲームシステムのクラスを取得する
3
+ # IDを指定してゲームシステムのクラスを取得する
4
4
  #
5
- # @param class_name [String] クラス名
5
+ # @param id [String] ID
6
6
  # @return [Class, nil]
7
- def game_system_class(class_name)
8
- BCDice::GameSystem.const_get(class_name)
9
- rescue NameError
10
- return nil
7
+ def game_system_class(id)
8
+ all_game_systems.find { |game_system| game_system::ID == id }
11
9
  end
12
10
 
13
11
  # 現在ロードされているゲームシステムのクラス一覧を返す
@@ -29,8 +27,8 @@ module BCDice
29
27
 
30
28
  require "bcdice/game_system/#{class_name}"
31
29
 
32
- return game_system_class(class_name)
33
- rescue LoadError
30
+ return BCDice::GameSystem.const_get(class_name)
31
+ rescue LoadError, NameError
34
32
  return nil
35
33
  end
36
34
  end
@@ -1,33 +1,30 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BCDice
2
4
  # 入力文字列に対して前処理を行う
3
5
  #
4
6
  # @example
5
7
  # Preprocessor.process(
6
- # "1d6+[2D6]+[40..50]+4D+(3*4) 切り取られる部分",
7
- # randomizer,
8
+ # "1d6+4D+(3*4) 切り取られる部分",
8
9
  # game_system
9
- # ) #=> "1d6+3+46+4D6+7"
10
+ # ) #=> "1d6+4D6+7"
10
11
  class Preprocessor
11
12
  # @param (see #initialize)
12
13
  # @return [String]
13
- def self.process(text, randomizer, game_system)
14
- Preprocessor.new(text, randomizer, game_system).process()
14
+ def self.process(text, game_system)
15
+ Preprocessor.new(text, game_system).process()
15
16
  end
16
17
 
17
18
  # @param text [String]
18
- # @param randomizer [Randomizer]
19
19
  # @param game_system [Base]
20
- def initialize(text, randomizer, game_system)
20
+ def initialize(text, game_system)
21
21
  @text = text
22
- @randomizer = randomizer
23
22
  @game_system = game_system
24
23
  end
25
24
 
26
25
  # @return [String]
27
26
  def process
28
27
  trim_after_whitespace()
29
- replace_preroll()
30
- replace_range()
31
28
  replace_parentheses()
32
29
 
33
30
  @text = @game_system.change_text(@text)
@@ -44,38 +41,16 @@ module BCDice
44
41
  @text = @text.strip.split(/\s/, 2).first
45
42
  end
46
43
 
47
- # [1D6]のような部分を事前ダイスロールする
48
- def replace_preroll()
49
- @text = @text.gsub(/\[\d+D\d+\]/i) do |matched|
50
- # Remove '[' and ']'
51
- command = matched[1..-2].upcase
52
- times, sides = command.split("D").map(&:to_i)
53
-
54
- @randomizer.roll_sum(times, sides)
55
- end
56
- end
57
-
58
- # [1...6]のような部分を事前ダイスロールする
59
- def replace_range
60
- @text = @text.gsub(/\[(\d+)\.\.\.(\d+)\]/) do |matched|
61
- first = Regexp.last_match(1).to_i
62
- last = Regexp.last_match(2).to_i
63
-
64
- if first > last
65
- matched
66
- else
67
- steps = last - first + 1
68
- dice = @randomizer.roll_once(steps)
69
-
70
- first + dice - 1
71
- end
72
- end
73
- end
74
-
75
44
  # カッコ書きの数式を事前計算する
76
45
  def replace_parentheses
77
- @text = @text.gsub(%r{\([\d/\+\*\-\(\)]+\)}) do |expr|
78
- ArithmeticEvaluator.eval(expr, round_type: @game_system.round_type)
46
+ loop do
47
+ prev = @text
48
+ @text = @text.gsub(%r{\([\d/\+\*\-]+\)}) do |expr|
49
+ ae = ArithmeticEvaluator.new(expr, round_type: @game_system.round_type)
50
+ val = ae.eval
51
+ ae.error? ? expr : val
52
+ end
53
+ break if prev == @text
79
54
  end
80
55
  end
81
56