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

Sign up to get free protection for your applications and to get access to all the features.
Files changed (255) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +1 -1
  3. data/.rubocop.yml +12 -0
  4. data/.rubocop_todo.yml +1 -0
  5. data/CHANGELOG.md +34 -0
  6. data/Gemfile +6 -3
  7. data/Rakefile +52 -18
  8. data/bcdice.gemspec +2 -0
  9. data/i18n/Amadeus/ja_jp.yml +386 -0
  10. data/i18n/Amadeus/ko_kr.yml +148 -0
  11. data/i18n/Cthulhu/ja_jp.yml +11 -0
  12. data/i18n/Cthulhu/ko_kr.yml +11 -0
  13. data/i18n/Cthulhu/zh_hant.yml +11 -0
  14. data/i18n/DetatokoSaga/ja_jp.yml +74 -0
  15. data/i18n/DetatokoSaga/ko_kr.yml +74 -0
  16. data/i18n/DoubleCross/ja_jp.yml +53 -0
  17. data/i18n/DoubleCross/ko_kr.yml +53 -0
  18. data/i18n/Dracurouge/ja_jp.yml +1374 -0
  19. data/i18n/Dracurouge/ko_kr.yml +295 -0
  20. data/i18n/Fiasco/ja_jp.yml +10 -0
  21. data/i18n/Fiasco/ko_kr.yml +10 -0
  22. data/i18n/FutariSousa/ja_jp.yml +720 -0
  23. data/i18n/FutariSousa/ko_kr.yml +746 -0
  24. data/i18n/Insane/ja_jp.yml +454 -0
  25. data/i18n/Insane/ko_kr.yml +502 -0
  26. data/i18n/Kamigakari/ja_jp.yml +276 -0
  27. data/i18n/Kamigakari/ko_kr.yml +204 -0
  28. data/i18n/KillDeathBusiness/ja_jp.yml +1092 -0
  29. data/i18n/KillDeathBusiness/ko_kr.yml +1062 -0
  30. data/i18n/LogHorizon/ja_jp.yml +3082 -0
  31. data/i18n/LogHorizon/ko_kr.yml +923 -0
  32. data/i18n/MagicaLogia/ja_jp.yml +564 -0
  33. data/i18n/MonotoneMuseum/ja_jp.yml +525 -0
  34. data/i18n/MonotoneMuseum/ko_kr.yml +89 -0
  35. data/i18n/Nechronica/ja_jp.yml +57 -0
  36. data/i18n/Nechronica/ko_kr.yml +14 -0
  37. data/i18n/StratoShout/ja_jp.yml +160 -0
  38. data/i18n/StratoShout/ko_kr.yml +160 -0
  39. data/i18n/ja_jp.yml +5 -0
  40. data/i18n/ko_kr.yml +7 -0
  41. data/i18n/zh_hant.yml +3 -0
  42. data/lib/bcdice/arithmetic/node.rb +154 -0
  43. data/lib/bcdice/base.rb +87 -101
  44. data/lib/bcdice/common_command.rb +2 -0
  45. data/lib/bcdice/common_command/add_dice.rb +5 -41
  46. data/lib/bcdice/common_command/add_dice/node.rb +92 -16
  47. data/lib/bcdice/common_command/add_dice/parser.rb +374 -274
  48. data/lib/bcdice/common_command/add_dice/parser.y +153 -0
  49. data/lib/bcdice/common_command/add_dice/randomizer.rb +25 -33
  50. data/lib/bcdice/common_command/barabara_dice.rb +6 -47
  51. data/lib/bcdice/common_command/barabara_dice/node.rb +84 -0
  52. data/lib/bcdice/common_command/barabara_dice/parser.rb +336 -0
  53. data/lib/bcdice/common_command/barabara_dice/parser.y +107 -0
  54. data/lib/bcdice/common_command/calc.rb +7 -30
  55. data/lib/bcdice/common_command/calc/node.rb +30 -0
  56. data/lib/bcdice/common_command/calc/parser.rb +271 -0
  57. data/lib/bcdice/common_command/calc/parser.y +79 -0
  58. data/lib/bcdice/common_command/choice.rb +137 -19
  59. data/lib/bcdice/common_command/d66_dice.rb +48 -34
  60. data/lib/bcdice/common_command/lexer.rb +46 -0
  61. data/lib/bcdice/common_command/repeat.rb +102 -0
  62. data/lib/bcdice/common_command/reroll_dice.rb +8 -158
  63. data/lib/bcdice/common_command/reroll_dice/node.rb +198 -0
  64. data/lib/bcdice/common_command/reroll_dice/parser.rb +421 -0
  65. data/lib/bcdice/common_command/reroll_dice/parser.y +158 -0
  66. data/lib/bcdice/common_command/upper_dice.rb +10 -129
  67. data/lib/bcdice/common_command/upper_dice/node.rb +181 -0
  68. data/lib/bcdice/common_command/upper_dice/parser.rb +412 -0
  69. data/lib/bcdice/common_command/upper_dice/parser.y +143 -0
  70. data/lib/bcdice/common_command/version.rb +9 -17
  71. data/lib/bcdice/deprecated/checker.rb +78 -0
  72. data/lib/bcdice/dice_table/d66_grid_table.rb +8 -0
  73. data/lib/bcdice/dice_table/d66_table.rb +10 -0
  74. data/lib/bcdice/dice_table/sai_fic_skill_table.rb +75 -17
  75. data/lib/bcdice/dice_table/sai_fic_skill_table/category.rb +25 -0
  76. data/lib/bcdice/dice_table/sai_fic_skill_table/skill.rb +23 -0
  77. data/lib/bcdice/dice_table/table.rb +8 -0
  78. data/lib/bcdice/game_system.rb +7 -1
  79. data/lib/bcdice/game_system/AFF2e.rb +1 -1
  80. data/lib/bcdice/game_system/AceKillerGene.rb +2 -2
  81. data/lib/bcdice/game_system/Airgetlamh.rb +3 -3
  82. data/lib/bcdice/game_system/Alsetto.rb +1 -1
  83. data/lib/bcdice/game_system/Alshard.rb +1 -1
  84. data/lib/bcdice/game_system/AlterRaise.rb +2 -2
  85. data/lib/bcdice/game_system/Amadeus.rb +46 -507
  86. data/lib/bcdice/game_system/Amadeus_Korean.rb +12 -456
  87. data/lib/bcdice/game_system/AnimaAnimus.rb +1 -1
  88. data/lib/bcdice/game_system/Arianrhod.rb +0 -1
  89. data/lib/bcdice/game_system/ArsMagica.rb +1 -1
  90. data/lib/bcdice/game_system/Avandner.rb +1 -1
  91. data/lib/bcdice/game_system/BBN.rb +1 -1
  92. data/lib/bcdice/game_system/BadLife.rb +1 -1
  93. data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
  94. data/lib/bcdice/game_system/BeastBindTrinity.rb +1 -2
  95. data/lib/bcdice/game_system/BeginningIdol.rb +2 -3
  96. data/lib/bcdice/game_system/BeginningIdol_Korean.rb +2 -3
  97. data/lib/bcdice/game_system/BladeOfArcana.rb +2 -2
  98. data/lib/bcdice/game_system/BlindMythos.rb +1 -1
  99. data/lib/bcdice/game_system/BloodCrusade.rb +0 -1
  100. data/lib/bcdice/game_system/BloodMoon.rb +0 -1
  101. data/lib/bcdice/game_system/CardRanker.rb +1 -2
  102. data/lib/bcdice/game_system/ChaosFlare.rb +1 -1
  103. data/lib/bcdice/game_system/Chill.rb +1 -1
  104. data/lib/bcdice/game_system/CodeLayerd.rb +1 -1
  105. data/lib/bcdice/game_system/ColossalHunter.rb +1 -2
  106. data/lib/bcdice/game_system/Comes.rb +50 -0
  107. data/lib/bcdice/game_system/CrashWorld.rb +1 -1
  108. data/lib/bcdice/game_system/Cthulhu.rb +94 -97
  109. data/lib/bcdice/game_system/Cthulhu7th.rb +108 -67
  110. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
  111. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
  112. data/lib/bcdice/game_system/CthulhuTech.rb +8 -14
  113. data/lib/bcdice/game_system/Cthulhu_ChineseTraditional.rb +7 -190
  114. data/lib/bcdice/game_system/Cthulhu_Korean.rb +5 -186
  115. data/lib/bcdice/game_system/DarkBlaze.rb +9 -5
  116. data/lib/bcdice/game_system/DarkDaysDrive.rb +17 -15
  117. data/lib/bcdice/game_system/DarkSouls.rb +1 -1
  118. data/lib/bcdice/game_system/DeadlineHeroes.rb +2 -2
  119. data/lib/bcdice/game_system/DemonParasite.rb +1 -2
  120. data/lib/bcdice/game_system/DetatokoSaga.rb +48 -149
  121. data/lib/bcdice/game_system/DetatokoSaga_Korean.rb +6 -274
  122. data/lib/bcdice/game_system/DiceOfTheDead.rb +9 -6
  123. data/lib/bcdice/game_system/DoubleCross.rb +102 -81
  124. data/lib/bcdice/game_system/DoubleCross_Korean.rb +13 -330
  125. data/lib/bcdice/game_system/Dracurouge.rb +376 -1678
  126. data/lib/bcdice/game_system/Dracurouge_Korean.rb +16 -271
  127. data/lib/bcdice/game_system/EarthDawn.rb +1 -1
  128. data/lib/bcdice/game_system/EarthDawn3.rb +1 -1
  129. data/lib/bcdice/game_system/EarthDawn4.rb +1 -1
  130. data/lib/bcdice/game_system/Elysion.rb +3 -4
  131. data/lib/bcdice/game_system/EmbryoMachine.rb +1 -1
  132. data/lib/bcdice/game_system/Emoklore.rb +131 -0
  133. data/lib/bcdice/game_system/EndBreaker.rb +1 -2
  134. data/lib/bcdice/game_system/EtrianOdysseySRS.rb +1 -1
  135. data/lib/bcdice/game_system/Fiasco.rb +87 -70
  136. data/lib/bcdice/game_system/Fiasco_Korean.rb +7 -95
  137. data/lib/bcdice/game_system/FilledWith.rb +462 -566
  138. data/lib/bcdice/game_system/FullMetalPanic.rb +1 -1
  139. data/lib/bcdice/game_system/FutariSousa.rb +103 -938
  140. data/lib/bcdice/game_system/FutariSousa_Korean.rb +7 -948
  141. data/lib/bcdice/game_system/{Gurps.rb → GURPS.rb} +184 -217
  142. data/lib/bcdice/game_system/Garako.rb +131 -39
  143. data/lib/bcdice/game_system/GardenOrder.rb +2 -2
  144. data/lib/bcdice/game_system/GehennaAn.rb +1 -1
  145. data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +1 -1
  146. data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
  147. data/lib/bcdice/game_system/GoldenSkyStories.rb +1 -1
  148. data/lib/bcdice/game_system/Gorilla.rb +1 -1
  149. data/lib/bcdice/game_system/GranCrest.rb +2 -3
  150. data/lib/bcdice/game_system/GundogRevised.rb +1 -1
  151. data/lib/bcdice/game_system/GundogZero.rb +1 -1
  152. data/lib/bcdice/game_system/GurpsFW.rb +2 -3
  153. data/lib/bcdice/game_system/HarnMaster.rb +2 -2
  154. data/lib/bcdice/game_system/HatsuneMiku.rb +1 -2
  155. data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
  156. data/lib/bcdice/game_system/HuntersMoon.rb +1 -2
  157. data/lib/bcdice/game_system/Illusio.rb +2 -2
  158. data/lib/bcdice/game_system/Insane.rb +90 -717
  159. data/lib/bcdice/game_system/Insane_Korean.rb +7 -719
  160. data/lib/bcdice/game_system/Kamigakari.rb +47 -242
  161. data/lib/bcdice/game_system/Kamigakari_Korean.rb +6 -394
  162. data/lib/bcdice/game_system/KanColle.rb +3 -3
  163. data/lib/bcdice/game_system/KemonoNoMori.rb +1 -1
  164. data/lib/bcdice/game_system/KillDeathBusiness.rb +162 -1144
  165. data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +6 -1459
  166. data/lib/bcdice/game_system/KurayamiCrying.rb +1 -1
  167. data/lib/bcdice/game_system/LiveraDoll.rb +2 -2
  168. data/lib/bcdice/game_system/LogHorizon.rb +350 -3379
  169. data/lib/bcdice/game_system/LogHorizon_Korean.rb +55 -1357
  170. data/lib/bcdice/game_system/LostRecord.rb +0 -1
  171. data/lib/bcdice/game_system/LostRoyal.rb +1 -2
  172. data/lib/bcdice/game_system/MagicaLogia.rb +158 -1044
  173. data/lib/bcdice/game_system/MeikyuDays.rb +1 -2
  174. data/lib/bcdice/game_system/MeikyuKingdom.rb +4 -4
  175. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +4 -5
  176. data/lib/bcdice/game_system/MetalHead.rb +1 -1
  177. data/lib/bcdice/game_system/MetalHeadExtream.rb +2 -2
  178. data/lib/bcdice/game_system/MetallicGuardian.rb +1 -1
  179. data/lib/bcdice/game_system/MonotoneMuseum.rb +38 -239
  180. data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +10 -270
  181. data/lib/bcdice/game_system/NSSQ.rb +159 -0
  182. data/lib/bcdice/game_system/Nechronica.rb +34 -73
  183. data/lib/bcdice/game_system/Nechronica_Korean.rb +11 -128
  184. data/lib/bcdice/game_system/NeverCloud.rb +1 -1
  185. data/lib/bcdice/game_system/NightWizard.rb +1 -1
  186. data/lib/bcdice/game_system/NightWizard3rd.rb +1 -1
  187. data/lib/bcdice/game_system/NinjaSlayer.rb +12 -11
  188. data/lib/bcdice/game_system/NjslyrBattle.rb +1 -1
  189. data/lib/bcdice/game_system/OneWayHeroics.rb +1 -2
  190. data/lib/bcdice/game_system/OracleEngine.rb +1 -1
  191. data/lib/bcdice/game_system/OrgaRain.rb +2 -2
  192. data/lib/bcdice/game_system/Paradiso.rb +1 -1
  193. data/lib/bcdice/game_system/Paranoia.rb +1 -1
  194. data/lib/bcdice/game_system/ParanoiaRebooted.rb +1 -1
  195. data/lib/bcdice/game_system/ParasiteBlood.rb +1 -1
  196. data/lib/bcdice/game_system/Peekaboo.rb +22 -122
  197. data/lib/bcdice/game_system/Postman.rb +2 -2
  198. data/lib/bcdice/game_system/PulpCthulhu.rb +3 -3
  199. data/lib/bcdice/game_system/Raisondetre.rb +2 -2
  200. data/lib/bcdice/game_system/RecordOfLodossWar.rb +1 -1
  201. data/lib/bcdice/game_system/RecordOfSteam.rb +1 -1
  202. data/lib/bcdice/game_system/RokumonSekai2.rb +1 -1
  203. data/lib/bcdice/game_system/RuinBreakers.rb +296 -0
  204. data/lib/bcdice/game_system/Ryutama.rb +1 -1
  205. data/lib/bcdice/game_system/SRS.rb +1 -2
  206. data/lib/bcdice/game_system/SamsaraBallad.rb +1 -1
  207. data/lib/bcdice/game_system/Satasupe.rb +1 -2
  208. data/lib/bcdice/game_system/ScreamHighSchool.rb +2 -2
  209. data/lib/bcdice/game_system/SevenFortressMobius.rb +1 -1
  210. data/lib/bcdice/game_system/ShadowRun5.rb +2 -2
  211. data/lib/bcdice/game_system/SharedFantasia.rb +1 -1
  212. data/lib/bcdice/game_system/ShinMegamiTenseiKakuseihen.rb +1 -1
  213. data/lib/bcdice/game_system/ShinkuuGakuen.rb +2 -2
  214. data/lib/bcdice/game_system/ShinobiGami.rb +1 -2
  215. data/lib/bcdice/game_system/ShoujoTenrankai.rb +2 -2
  216. data/lib/bcdice/game_system/Skynauts.rb +1 -1
  217. data/lib/bcdice/game_system/SteamPunkers.rb +1 -1
  218. data/lib/bcdice/game_system/StellarKnights.rb +1 -2
  219. data/lib/bcdice/game_system/SterileLife.rb +1 -1
  220. data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -2
  221. data/lib/bcdice/game_system/StratoShout.rb +44 -247
  222. data/lib/bcdice/game_system/StratoShout_Korean.rb +6 -282
  223. data/lib/bcdice/game_system/Strave.rb +2 -2
  224. data/lib/bcdice/game_system/SwordWorld.rb +8 -9
  225. data/lib/bcdice/game_system/SwordWorld2_0.rb +2 -3
  226. data/lib/bcdice/game_system/SwordWorld2_5.rb +2 -3
  227. data/lib/bcdice/game_system/TherapieSein.rb +1 -1
  228. data/lib/bcdice/game_system/TokumeiTenkousei.rb +1 -1
  229. data/lib/bcdice/game_system/TokyoGhostResearch.rb +2 -2
  230. data/lib/bcdice/game_system/Torg.rb +2 -2
  231. data/lib/bcdice/game_system/Torg1_5.rb +1 -1
  232. data/lib/bcdice/game_system/TorgEternity.rb +1 -1
  233. data/lib/bcdice/game_system/TrinitySeven.rb +1 -1
  234. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +1 -1
  235. data/lib/bcdice/game_system/TwilightGunsmoke.rb +1 -2
  236. data/lib/bcdice/game_system/UnsungDuet.rb +139 -0
  237. data/lib/bcdice/game_system/Utakaze.rb +1 -1
  238. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +1 -1
  239. data/lib/bcdice/game_system/Villaciel.rb +1 -2
  240. data/lib/bcdice/game_system/Warhammer.rb +1 -1
  241. data/lib/bcdice/game_system/Warhammer4.rb +329 -0
  242. data/lib/bcdice/game_system/WitchQuest.rb +1 -1
  243. data/lib/bcdice/game_system/WorldOfDarkness.rb +1 -1
  244. data/lib/bcdice/game_system/YankeeYogSothoth.rb +15 -15
  245. data/lib/bcdice/game_system/YearZeroEngine.rb +1 -1
  246. data/lib/bcdice/game_system/ZettaiReido.rb +1 -1
  247. data/lib/bcdice/game_system/filled_with/cook_tables.rb +119 -0
  248. data/lib/bcdice/game_system/filled_with/lot_tables.rb +155 -0
  249. data/lib/bcdice/loader.rb +6 -8
  250. data/lib/bcdice/preprocessor.rb +15 -40
  251. data/lib/bcdice/repl.rb +1 -1
  252. data/lib/bcdice/result.rb +83 -0
  253. data/lib/bcdice/translate.rb +11 -0
  254. data/lib/bcdice/version.rb +1 -1
  255. metadata +80 -4
@@ -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