bcdice 3.0.0.pre.alpha.1

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 (258) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +21 -0
  3. data/.github/.codecov.yaml +10 -0
  4. data/.github/workflows/coverage.yaml +21 -0
  5. data/.github/workflows/lint.yaml +13 -0
  6. data/.github/workflows/test.yml +20 -0
  7. data/.gitignore +14 -0
  8. data/.rubocop.yml +96 -0
  9. data/.rubocop_todo.yml +113 -0
  10. data/CHANGELOG.md +868 -0
  11. data/Gemfile +11 -0
  12. data/LICENSE +29 -0
  13. data/README.md +38 -0
  14. data/ROADMAP.md +30 -0
  15. data/Rakefile +118 -0
  16. data/bcdice.gemspec +27 -0
  17. data/bin/repl.rb +21 -0
  18. data/docs/README.txt +2028 -0
  19. data/docs/dicebot_sort_key.md +72 -0
  20. data/docs/how_to_make_dicebot.md +453 -0
  21. data/lib/bcdice.rb +8 -0
  22. data/lib/bcdice/arithmetic_evaluator.rb +167 -0
  23. data/lib/bcdice/base.rb +423 -0
  24. data/lib/bcdice/command_parser.rb +242 -0
  25. data/lib/bcdice/common_command.rb +23 -0
  26. data/lib/bcdice/common_command/add_dice.rb +54 -0
  27. data/lib/bcdice/common_command/add_dice/node.rb +488 -0
  28. data/lib/bcdice/common_command/add_dice/parser.rb +282 -0
  29. data/lib/bcdice/common_command/add_dice/randomizer.rb +48 -0
  30. data/lib/bcdice/common_command/barabara_dice.rb +57 -0
  31. data/lib/bcdice/common_command/calc.rb +39 -0
  32. data/lib/bcdice/common_command/choice.rb +35 -0
  33. data/lib/bcdice/common_command/d66_dice.rb +63 -0
  34. data/lib/bcdice/common_command/reroll_dice.rb +190 -0
  35. data/lib/bcdice/common_command/upper_dice.rb +165 -0
  36. data/lib/bcdice/common_command/version.rb +26 -0
  37. data/lib/bcdice/dice_table.rb +8 -0
  38. data/lib/bcdice/dice_table/chain_table.rb +33 -0
  39. data/lib/bcdice/dice_table/d66_grid_table.rb +26 -0
  40. data/lib/bcdice/dice_table/d66_range_table.rb +26 -0
  41. data/lib/bcdice/dice_table/d66_table.rb +34 -0
  42. data/lib/bcdice/dice_table/range_table.rb +267 -0
  43. data/lib/bcdice/dice_table/roll_result.rb +43 -0
  44. data/lib/bcdice/dice_table/sai_fic_skill_table.rb +32 -0
  45. data/lib/bcdice/dice_table/table.rb +35 -0
  46. data/lib/bcdice/enum.rb +15 -0
  47. data/lib/bcdice/format.rb +36 -0
  48. data/lib/bcdice/game_system.rb +187 -0
  49. data/lib/bcdice/game_system/AFF2e.rb +141 -0
  50. data/lib/bcdice/game_system/AceKillerGene.rb +55 -0
  51. data/lib/bcdice/game_system/Airgetlamh.rb +117 -0
  52. data/lib/bcdice/game_system/Alsetto.rb +124 -0
  53. data/lib/bcdice/game_system/Alshard.rb +27 -0
  54. data/lib/bcdice/game_system/AlterRaise.rb +282 -0
  55. data/lib/bcdice/game_system/Amadeus.rb +622 -0
  56. data/lib/bcdice/game_system/Amadeus_Korean.rb +501 -0
  57. data/lib/bcdice/game_system/AnimaAnimus.rb +96 -0
  58. data/lib/bcdice/game_system/Arianrhod.rb +50 -0
  59. data/lib/bcdice/game_system/ArsMagica.rb +149 -0
  60. data/lib/bcdice/game_system/Avandner.rb +101 -0
  61. data/lib/bcdice/game_system/BBN.rb +143 -0
  62. data/lib/bcdice/game_system/BadLife.rb +435 -0
  63. data/lib/bcdice/game_system/BarnaKronika.rb +188 -0
  64. data/lib/bcdice/game_system/BattleTech.rb +530 -0
  65. data/lib/bcdice/game_system/BeastBindTrinity.rb +348 -0
  66. data/lib/bcdice/game_system/BeginningIdol.rb +2527 -0
  67. data/lib/bcdice/game_system/BeginningIdol_Korean.rb +2378 -0
  68. data/lib/bcdice/game_system/BladeOfArcana.rb +252 -0
  69. data/lib/bcdice/game_system/BlindMythos.rb +460 -0
  70. data/lib/bcdice/game_system/BloodCrusade.rb +423 -0
  71. data/lib/bcdice/game_system/BloodMoon.rb +213 -0
  72. data/lib/bcdice/game_system/CardRanker.rb +249 -0
  73. data/lib/bcdice/game_system/ChaosFlare.rb +181 -0
  74. data/lib/bcdice/game_system/Chill.rb +163 -0
  75. data/lib/bcdice/game_system/Chill3.rb +52 -0
  76. data/lib/bcdice/game_system/CodeLayerd.rb +132 -0
  77. data/lib/bcdice/game_system/ColossalHunter.rb +569 -0
  78. data/lib/bcdice/game_system/CrashWorld.rb +81 -0
  79. data/lib/bcdice/game_system/Cthulhu.rb +252 -0
  80. data/lib/bcdice/game_system/Cthulhu7th.rb +767 -0
  81. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +386 -0
  82. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +383 -0
  83. data/lib/bcdice/game_system/CthulhuTech.rb +263 -0
  84. data/lib/bcdice/game_system/Cthulhu_ChineseTraditional.rb +243 -0
  85. data/lib/bcdice/game_system/Cthulhu_Korean.rb +240 -0
  86. data/lib/bcdice/game_system/DarkBlaze.rb +207 -0
  87. data/lib/bcdice/game_system/DarkDaysDrive.rb +425 -0
  88. data/lib/bcdice/game_system/DarkSouls.rb +91 -0
  89. data/lib/bcdice/game_system/DeadlineHeroes.rb +583 -0
  90. data/lib/bcdice/game_system/DemonParasite.rb +524 -0
  91. data/lib/bcdice/game_system/DetatokoSaga.rb +310 -0
  92. data/lib/bcdice/game_system/DetatokoSaga_Korean.rb +310 -0
  93. data/lib/bcdice/game_system/DiceBot.rb +17 -0
  94. data/lib/bcdice/game_system/DiceOfTheDead.rb +111 -0
  95. data/lib/bcdice/game_system/DoubleCross.rb +373 -0
  96. data/lib/bcdice/game_system/DoubleCross_Korean.rb +371 -0
  97. data/lib/bcdice/game_system/Dracurouge.rb +1856 -0
  98. data/lib/bcdice/game_system/Dracurouge_Korean.rb +310 -0
  99. data/lib/bcdice/game_system/DungeonsAndDragons.rb +19 -0
  100. data/lib/bcdice/game_system/EarthDawn.rb +225 -0
  101. data/lib/bcdice/game_system/EarthDawn3.rb +275 -0
  102. data/lib/bcdice/game_system/EarthDawn4.rb +272 -0
  103. data/lib/bcdice/game_system/EclipsePhase.rb +51 -0
  104. data/lib/bcdice/game_system/Elric.rb +36 -0
  105. data/lib/bcdice/game_system/Elysion.rb +1213 -0
  106. data/lib/bcdice/game_system/EmbryoMachine.rb +227 -0
  107. data/lib/bcdice/game_system/EndBreaker.rb +132 -0
  108. data/lib/bcdice/game_system/EtrianOdysseySRS.rb +27 -0
  109. data/lib/bcdice/game_system/Fiasco.rb +123 -0
  110. data/lib/bcdice/game_system/Fiasco_Korean.rb +122 -0
  111. data/lib/bcdice/game_system/FilledWith.rb +1543 -0
  112. data/lib/bcdice/game_system/FullMetalPanic.rb +27 -0
  113. data/lib/bcdice/game_system/FutariSousa.rb +994 -0
  114. data/lib/bcdice/game_system/FutariSousa_Korean.rb +994 -0
  115. data/lib/bcdice/game_system/Garako.rb +559 -0
  116. data/lib/bcdice/game_system/GardenOrder.rb +451 -0
  117. data/lib/bcdice/game_system/GehennaAn.rb +136 -0
  118. data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +120 -0
  119. data/lib/bcdice/game_system/GoblinSlayer.rb +168 -0
  120. data/lib/bcdice/game_system/GoldenSkyStories.rb +77 -0
  121. data/lib/bcdice/game_system/Gorilla.rb +44 -0
  122. data/lib/bcdice/game_system/GranCrest.rb +518 -0
  123. data/lib/bcdice/game_system/Gundog.rb +52 -0
  124. data/lib/bcdice/game_system/GundogRevised.rb +294 -0
  125. data/lib/bcdice/game_system/GundogZero.rb +261 -0
  126. data/lib/bcdice/game_system/Gurps.rb +403 -0
  127. data/lib/bcdice/game_system/GurpsFW.rb +2330 -0
  128. data/lib/bcdice/game_system/HarnMaster.rb +208 -0
  129. data/lib/bcdice/game_system/HatsuneMiku.rb +706 -0
  130. data/lib/bcdice/game_system/Hieizan.rb +48 -0
  131. data/lib/bcdice/game_system/HouraiGakuen.rb +270 -0
  132. data/lib/bcdice/game_system/HuntersMoon.rb +503 -0
  133. data/lib/bcdice/game_system/Illusio.rb +89 -0
  134. data/lib/bcdice/game_system/InfiniteFantasia.rb +51 -0
  135. data/lib/bcdice/game_system/Insane.rb +822 -0
  136. data/lib/bcdice/game_system/Insane_Korean.rb +773 -0
  137. data/lib/bcdice/game_system/IthaWenUa.rb +38 -0
  138. data/lib/bcdice/game_system/JamesBond.rb +45 -0
  139. data/lib/bcdice/game_system/Kamigakari.rb +394 -0
  140. data/lib/bcdice/game_system/Kamigakari_Korean.rb +428 -0
  141. data/lib/bcdice/game_system/KanColle.rb +938 -0
  142. data/lib/bcdice/game_system/KemonoNoMori.rb +258 -0
  143. data/lib/bcdice/game_system/KillDeathBusiness.rb +1420 -0
  144. data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +1510 -0
  145. data/lib/bcdice/game_system/KurayamiCrying.rb +49 -0
  146. data/lib/bcdice/game_system/LiveraDoll.rb +375 -0
  147. data/lib/bcdice/game_system/LogHorizon.rb +3567 -0
  148. data/lib/bcdice/game_system/LogHorizon_Korean.rb +1407 -0
  149. data/lib/bcdice/game_system/LostRecord.rb +30 -0
  150. data/lib/bcdice/game_system/LostRoyal.rb +242 -0
  151. data/lib/bcdice/game_system/MagicaLogia.rb +1148 -0
  152. data/lib/bcdice/game_system/MeikyuDays.rb +415 -0
  153. data/lib/bcdice/game_system/MeikyuKingdom.rb +466 -0
  154. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +269 -0
  155. data/lib/bcdice/game_system/MetalHead.rb +249 -0
  156. data/lib/bcdice/game_system/MetalHeadExtream.rb +917 -0
  157. data/lib/bcdice/game_system/MetallicGuardian.rb +31 -0
  158. data/lib/bcdice/game_system/MonotoneMuseum.rb +354 -0
  159. data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +304 -0
  160. data/lib/bcdice/game_system/Nechronica.rb +211 -0
  161. data/lib/bcdice/game_system/Nechronica_Korean.rb +160 -0
  162. data/lib/bcdice/game_system/NeverCloud.rb +74 -0
  163. data/lib/bcdice/game_system/NightWizard.rb +231 -0
  164. data/lib/bcdice/game_system/NightWizard3rd.rb +24 -0
  165. data/lib/bcdice/game_system/NightmareHunterDeep.rb +117 -0
  166. data/lib/bcdice/game_system/NinjaSlayer.rb +274 -0
  167. data/lib/bcdice/game_system/NjslyrBattle.rb +54 -0
  168. data/lib/bcdice/game_system/Nuekagami.rb +293 -0
  169. data/lib/bcdice/game_system/OneWayHeroics.rb +134 -0
  170. data/lib/bcdice/game_system/OracleEngine.rb +265 -0
  171. data/lib/bcdice/game_system/OrgaRain.rb +77 -0
  172. data/lib/bcdice/game_system/Oukahoushin3rd.rb +162 -0
  173. data/lib/bcdice/game_system/Paradiso.rb +323 -0
  174. data/lib/bcdice/game_system/Paranoia.rb +64 -0
  175. data/lib/bcdice/game_system/ParanoiaRebooted.rb +109 -0
  176. data/lib/bcdice/game_system/ParasiteBlood.rb +231 -0
  177. data/lib/bcdice/game_system/Pathfinder.rb +21 -0
  178. data/lib/bcdice/game_system/Peekaboo.rb +324 -0
  179. data/lib/bcdice/game_system/Pendragon.rb +39 -0
  180. data/lib/bcdice/game_system/PhantasmAdventure.rb +73 -0
  181. data/lib/bcdice/game_system/Postman.rb +185 -0
  182. data/lib/bcdice/game_system/PulpCthulhu.rb +184 -0
  183. data/lib/bcdice/game_system/Raisondetre.rb +171 -0
  184. data/lib/bcdice/game_system/RecordOfLodossWar.rb +58 -0
  185. data/lib/bcdice/game_system/RecordOfSteam.rb +149 -0
  186. data/lib/bcdice/game_system/RokumonSekai2.rb +110 -0
  187. data/lib/bcdice/game_system/RoleMaster.rb +24 -0
  188. data/lib/bcdice/game_system/RuneQuest.rb +47 -0
  189. data/lib/bcdice/game_system/RyuTuber.rb +266 -0
  190. data/lib/bcdice/game_system/Ryutama.rb +199 -0
  191. data/lib/bcdice/game_system/SRS.rb +348 -0
  192. data/lib/bcdice/game_system/SamsaraBallad.rb +111 -0
  193. data/lib/bcdice/game_system/Satasupe.rb +1173 -0
  194. data/lib/bcdice/game_system/ScreamHighSchool.rb +128 -0
  195. data/lib/bcdice/game_system/SevenFortressMobius.rb +34 -0
  196. data/lib/bcdice/game_system/ShadowRun.rb +26 -0
  197. data/lib/bcdice/game_system/ShadowRun4.rb +49 -0
  198. data/lib/bcdice/game_system/ShadowRun5.rb +80 -0
  199. data/lib/bcdice/game_system/SharedFantasia.rb +69 -0
  200. data/lib/bcdice/game_system/ShinMegamiTenseiKakuseihen.rb +85 -0
  201. data/lib/bcdice/game_system/ShinkuuGakuen.rb +506 -0
  202. data/lib/bcdice/game_system/ShinobiGami.rb +680 -0
  203. data/lib/bcdice/game_system/ShoujoTenrankai.rb +677 -0
  204. data/lib/bcdice/game_system/Skynauts.rb +324 -0
  205. data/lib/bcdice/game_system/SteamPunkers.rb +485 -0
  206. data/lib/bcdice/game_system/StellarKnights.rb +856 -0
  207. data/lib/bcdice/game_system/SterileLife.rb +452 -0
  208. data/lib/bcdice/game_system/StrangerOfSwordCity.rb +103 -0
  209. data/lib/bcdice/game_system/StratoShout.rb +316 -0
  210. data/lib/bcdice/game_system/StratoShout_Korean.rb +314 -0
  211. data/lib/bcdice/game_system/Strave.rb +223 -0
  212. data/lib/bcdice/game_system/SwordWorld.rb +491 -0
  213. data/lib/bcdice/game_system/SwordWorld2_0.rb +295 -0
  214. data/lib/bcdice/game_system/SwordWorld2_5.rb +121 -0
  215. data/lib/bcdice/game_system/TherapieSein.rb +93 -0
  216. data/lib/bcdice/game_system/TokumeiTenkousei.rb +96 -0
  217. data/lib/bcdice/game_system/TokyoGhostResearch.rb +122 -0
  218. data/lib/bcdice/game_system/TokyoNova.rb +19 -0
  219. data/lib/bcdice/game_system/Torg.rb +364 -0
  220. data/lib/bcdice/game_system/Torg1_5.rb +139 -0
  221. data/lib/bcdice/game_system/TorgEternity.rb +414 -0
  222. data/lib/bcdice/game_system/TrinitySeven.rb +364 -0
  223. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +287 -0
  224. data/lib/bcdice/game_system/TwilightGunsmoke.rb +527 -0
  225. data/lib/bcdice/game_system/Utakaze.rb +153 -0
  226. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +132 -0
  227. data/lib/bcdice/game_system/Villaciel.rb +555 -0
  228. data/lib/bcdice/game_system/WARPS.rb +33 -0
  229. data/lib/bcdice/game_system/WaresBlade.rb +34 -0
  230. data/lib/bcdice/game_system/Warhammer.rb +336 -0
  231. data/lib/bcdice/game_system/WitchQuest.rb +275 -0
  232. data/lib/bcdice/game_system/WorldOfDarkness.rb +135 -0
  233. data/lib/bcdice/game_system/YankeeYogSothoth.rb +440 -0
  234. data/lib/bcdice/game_system/YearZeroEngine.rb +134 -0
  235. data/lib/bcdice/game_system/ZettaiReido.rb +142 -0
  236. data/lib/bcdice/game_system/meikyu_kingdom/item_table.rb +383 -0
  237. data/lib/bcdice/game_system/meikyu_kingdom/kingdom_name_table.rb +89 -0
  238. data/lib/bcdice/game_system/meikyu_kingdom/landscape_table.rb +196 -0
  239. data/lib/bcdice/game_system/meikyu_kingdom/name_tables.rb +223 -0
  240. data/lib/bcdice/game_system/meikyu_kingdom/placename_table.rb +214 -0
  241. data/lib/bcdice/game_system/meikyu_kingdom/tables.rb +610 -0
  242. data/lib/bcdice/game_system/meikyu_kingdom/word_table.rb +117 -0
  243. data/lib/bcdice/game_system/meikyu_kingdom_basic/item_table.rb +380 -0
  244. data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +184 -0
  245. data/lib/bcdice/game_system/meikyu_kingdom_basic/name_table.rb +417 -0
  246. data/lib/bcdice/game_system/meikyu_kingdom_basic/table.rb +912 -0
  247. data/lib/bcdice/game_system/meikyu_kingdom_basic/word_table.rb +121 -0
  248. data/lib/bcdice/game_system/one_way_heroics/dungeon_table.rb +67 -0
  249. data/lib/bcdice/game_system/one_way_heroics/random_event_table.rb +166 -0
  250. data/lib/bcdice/game_system/one_way_heroics/tables.rb +668 -0
  251. data/lib/bcdice/loader.rb +37 -0
  252. data/lib/bcdice/normalize.rb +38 -0
  253. data/lib/bcdice/preprocessor.rb +87 -0
  254. data/lib/bcdice/randomizer.rb +137 -0
  255. data/lib/bcdice/repl.rb +155 -0
  256. data/lib/bcdice/user_defined_dice_table.rb +153 -0
  257. data/lib/bcdice/version.rb +3 -0
  258. metadata +304 -0
@@ -0,0 +1,117 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class Airgetlamh < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'Airgetlamh'
8
+
9
+ # ゲームシステム名
10
+ NAME = '朱の孤塔のエアゲトラム'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'あけのことうのえあけとらむ'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~MESSAGETEXT
17
+ 【Reg2.0『THE ANSWERER』~】
18
+ ・調査判定(成功数を表示):[n]AA[m]
19
+ ・命中判定(ダメージ表示):[n]AA[m]*p[+t][Cx]
20
+ 【~Reg1.1『昇華』】
21
+ ・調査判定(成功数を表示):[n]AL[m]
22
+ ・命中判定(ダメージ表示):[n]AL[m]*p
23
+ ----------------------------------------
24
+ []内のコマンドは省略可能。
25
+
26
+ 「n」でダイス数(攻撃回数)を指定。省略時は「2」。
27
+ 「m」で目標値を指定。省略時は「6」。
28
+ 「p」で威力を指定。「*」は「x」で代用可。
29
+ 「+t」でクリティカルトリガーを指定。省略可。
30
+ 「Cx」でクリティカル値を指定。省略時は「1」、最大値は「3」、「0」でクリティカル無し。
31
+
32
+ 攻撃力指定で命中判定となり、成功数ではなく、ダメージを結果表示します。
33
+ クリティカルヒットの分だけ、自動で振り足し処理を行います。
34
+ (ALコマンドではクリティカル処理を行いません)
35
+
36
+ 【書式例】
37
+ ・AL → 2d10で目標値6の調査判定。
38
+ ・5AA7*12 → 5d10で目標値7、威力12の命中判定。
39
+ ・AA7x28+5 → 2d10で目標値7、威力28、クリティカルトリガー5の命中判定。
40
+ ・9aa5*10C2 → 9d10で目標値5、威力10、クリティカル値2の命中判定。
41
+ ・15AAx4c0 → 15d10で目標値6、威力4、クリティカル無しの命中判定。
42
+ MESSAGETEXT
43
+
44
+ register_prefix([
45
+ ['(\d+)?A(A|L)(\d+)?((x|\*)(\d+)(\+(\d+))?)?(C(\d+))?']
46
+ ])
47
+
48
+ def initialize(command)
49
+ super(command)
50
+ @sort_add_dice = true # ダイスのソート有
51
+ end
52
+
53
+ def eval_game_system_specific_command(command)
54
+ # AA/ALコマンド:調査判定, 成功判定
55
+ if command =~ /(\d+)?A(A|L)(\d+)?((x|\*)(\d+)(\+(\d+))?)?(C(\d+))?$/i
56
+ diceCount = (Regexp.last_match(1) || 2).to_i
57
+ target = (Regexp.last_match(3) || 6).to_i
58
+ damage = (Regexp.last_match(6) || 0).to_i
59
+
60
+ if Regexp.last_match(2) == 'L' # 旧Ver対応
61
+ criticalTrigger = 0
62
+ criticalNumber = 0
63
+ else
64
+ criticalTrigger = (Regexp.last_match(8) || 0).to_i
65
+ criticalNumber = (Regexp.last_match(10) || 1).to_i
66
+ end
67
+ criticalNumber = 3 if criticalNumber > 4
68
+
69
+ return checkRoll(diceCount, target, damage, criticalTrigger, criticalNumber)
70
+ end
71
+
72
+ return nil
73
+ end
74
+
75
+ def checkRoll(diceCount, target, damage, criticalTrigger, criticalNumber)
76
+ totalSuccessCount = 0
77
+ totalCriticalCount = 0
78
+ text = ""
79
+
80
+ rollCount = diceCount
81
+
82
+ while rollCount > 0
83
+ diceArray = @randomizer.roll_barabara(rollCount, 10).sort
84
+ diceText = diceArray.join(",")
85
+
86
+ successCount = diceArray.count { |i| i <= target }
87
+ criticalCount = diceArray.count { |i| i <= criticalNumber }
88
+
89
+ totalSuccessCount += successCount
90
+ totalCriticalCount += criticalCount
91
+
92
+ text += "+" unless text.empty?
93
+ text += "#{successCount}[#{diceText}]"
94
+
95
+ rollCount = criticalCount
96
+ end
97
+
98
+ result = ""
99
+ isDamage = (damage != 0)
100
+
101
+ if isDamage
102
+ totalDamage = totalSuccessCount * damage + totalCriticalCount * criticalTrigger
103
+
104
+ result += "(#{diceCount}D10\<\=#{target}) > #{text} > Hits:#{totalSuccessCount}*#{damage}"
105
+ result += " + Trigger:#{totalCriticalCount}*#{criticalTrigger}" if criticalTrigger > 0
106
+ result += " > #{totalDamage}ダメージ"
107
+ else
108
+ result += "(#{diceCount}D10\<\=#{target}) > #{text} > 成功数:#{totalSuccessCount}"
109
+ end
110
+
111
+ result += " / #{totalCriticalCount}クリティカル" if totalCriticalCount > 0
112
+
113
+ return result
114
+ end
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,124 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class Alsetto < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'Alsetto'
8
+
9
+ # ゲームシステム名
10
+ NAME = '詩片のアルセット'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'うたかたのあるせつと'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~MESSAGETEXT
17
+ ・成功判定:nAL[m]    ・トライアンフ無し:nALC[m]
18
+ ・命中判定:nAL[m]*p   ・トライアンフ無し:nALC[m]*p
19
+ ・命中判定(ガンスリンガーの根源詩):nALG[m]*p
20
+ []内は省略可能。
21
+
22
+ ALコマンドはトライアンフの分だけ、自動で振り足し処理を行います。
23
+ 「n」でダイス数を指定。
24
+ 「m」で目標値を指定。省略時は、デフォルトの「3」が使用されます。
25
+ 「p」で攻撃力を指定。「*」は「x」でも可。
26
+ 攻撃力指定で命中判定となり、成功数ではなく、ダメージを結果表示します。
27
+
28
+ ALCコマンドはトライアンフ無しで、成功数、ダメージを結果表示します。
29
+ ALGコマンドは「2以下」でトライアンフ処理を行います。
30
+
31
+ 【書式例】
32
+ ・5AL → 5d6で目標値3。
33
+ ・5ALC → 5d6で目標値3。トライアンフ無し。
34
+ ・6AL2 → 6d6で目標値2。
35
+ ・4AL*5 → 4d6で目標値3、攻撃力5の命中判定。
36
+ ・7AL2x10 → 7d6で目標値2、攻撃力10の命中判定。
37
+ ・8ALC4x5 → 8d6で目標値4、攻撃力5、トライアンフ無しの命中判定。
38
+ MESSAGETEXT
39
+
40
+ register_prefix(['\d+AL(C|G)?(\d+)?(x|\*)\d+', '\d+ALC?(\d+)?'])
41
+
42
+ def initialize(command)
43
+ super(command)
44
+ @sort_add_dice = true # ダイスのソート有
45
+ end
46
+
47
+ def eval_game_system_specific_command(command)
48
+ # ALCコマンド:命中判定
49
+ # ALCコマンド:成功判定
50
+ if command =~ /(\d+)AL(C|G)?(\d+)?((x|\*)(\d+))?$/i
51
+ rapid = Regexp.last_match(1).to_i
52
+ isCritical = Regexp.last_match(2).nil?
53
+ if isCritical
54
+ criticalNumber = 1
55
+ else
56
+ if Regexp.last_match(2) == "G"
57
+ isCritical = true
58
+ criticalNumber = 2
59
+ else
60
+ criticalNumber = 0
61
+ end
62
+ end
63
+ target = (Regexp.last_match(3) || 3).to_i
64
+ damage = (Regexp.last_match(6) || 0).to_i
65
+ return checkRoll(rapid, target, damage, isCritical, criticalNumber)
66
+ end
67
+
68
+ return nil
69
+ end
70
+
71
+ def checkRoll(rapid, target, damage, isCritical, criticalNumber)
72
+ totalSuccessCount = 0
73
+ totalCriticalCount = 0
74
+ text = ""
75
+
76
+ rollCount = rapid
77
+
78
+ while rollCount > 0
79
+ diceArray = @randomizer.roll_barabara(rollCount, 6).sort
80
+ diceText = diceArray.join(",")
81
+
82
+ successCount = 0
83
+ criticalCount = 0
84
+
85
+ diceArray.each do |i|
86
+ if i <= target
87
+ successCount += 1
88
+ end
89
+
90
+ if i <= criticalNumber
91
+ criticalCount += 1
92
+ end
93
+ end
94
+
95
+ totalSuccessCount += successCount
96
+ totalCriticalCount += 1 unless criticalCount == 0
97
+
98
+ text += "+" unless text.empty?
99
+ text += "#{successCount}[#{diceText}]"
100
+
101
+ break unless isCritical
102
+
103
+ rollCount = criticalCount
104
+ end
105
+
106
+ isDamage = (damage != 0)
107
+
108
+ if isDamage
109
+ totalDamage = totalSuccessCount * damage
110
+
111
+ result = "(#{rapid}D6\<\=#{target}) > #{text} > Hits:#{totalSuccessCount}*#{damage} > #{totalDamage}ダメージ"
112
+ else
113
+ result = "(#{rapid}D6\<\=#{target}) > #{text} > 成功数:#{totalSuccessCount}"
114
+ end
115
+
116
+ if isCritical
117
+ result += " / #{totalCriticalCount}トライアンフ"
118
+ end
119
+
120
+ return result
121
+ end
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bcdice/game_system/SRS'
4
+
5
+ # アルシャードのダイスボット
6
+ module BCDice
7
+ module GameSystem
8
+ class Alshard < SRS
9
+ # ゲームシステム名
10
+ NAME = 'アルシャード'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'あるしやあと'
14
+
15
+ # ゲームシステムの識別子
16
+ ID = 'Alshard'
17
+
18
+ # 固有のコマンドの接頭辞を設定する
19
+ register_prefix(['2D6.*', 'AL.*'])
20
+
21
+ # 成功判定のエイリアスコマンドを設定する
22
+ set_aliases_for_srs_roll('AL')
23
+
24
+ HELP_MESSAGE = help_message()
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,282 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class AlterRaise < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'AlterRaise'
8
+
9
+ # ゲームシステム名
10
+ NAME = 'アルトレイズ'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'あるとれいす'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~MESSAGETEXT
17
+ ◆解放判定:EMA[x]
18
+
19
+ [x]で達成値を指定してください。省略時はダイスロールします。
20
+
21
+
22
+ 【各種表】
23
+ ◆性格傾向表:PER[n]       ◆場所表:LOC[ab]
24
+ ◆平穏・経験表:QUI[ab]     ◆喜び・経験表:DEL[ab]
25
+ ◆心の傷・経験表:TRA[ab]    ◆シーン演出表:SCE[n]
26
+ ◆スタンス表:STA[n]       ◆感情表:EMO[ab]
27
+
28
+ []内のコマンドを省略でダイスロール、指定でROC結果を表示します。
29
+ [n]は「1D6」、[ab]は「D66」の出目を指定してください。
30
+
31
+ 【書式例】
32
+ PER3:性格傾向表の「3」をROC
33
+ LOC52:場所表の「52」をROC
34
+ QUI:平穏・経験表をダイスロール
35
+ MESSAGETEXT
36
+
37
+ register_prefix([
38
+ 'EMA(\d+)?', 'PER(\d+)?', 'LOC(\d+)?', 'QUI(\d+)?', 'DEL(\d+)?',
39
+ 'TRA(\d+)?', 'SCE(\d+)?', 'STA(\d+)?', 'EMO(\d+)?'
40
+ ])
41
+
42
+ def eval_game_system_specific_command(command)
43
+ output =
44
+ case command.upcase
45
+
46
+ when /EMA(\d+)?$/i
47
+ roc = (Regexp.last_match(1) || 0).to_i
48
+ get_emancipation_table(roc)
49
+
50
+ when /PER(\d+)?$/i
51
+ roc = (Regexp.last_match(1) || 0).to_i
52
+ get_personality_table(roc)
53
+
54
+ when /LOC(\d+)?$/i
55
+ roc = (Regexp.last_match(1) || 0).to_i
56
+ get_location_table(roc)
57
+
58
+ when /QUI(\d+)?$/i
59
+ roc = (Regexp.last_match(1) || 0).to_i
60
+ get_quiet_table(roc)
61
+
62
+ when /DEL(\d+)?$/i
63
+ roc = (Regexp.last_match(1) || 0).to_i
64
+ get_delight_table(roc)
65
+
66
+ when /TRA(\d+)?$/i
67
+ roc = (Regexp.last_match(1) || 0).to_i
68
+ get_trauma_table(roc)
69
+
70
+ when /SCE(\d+)?$/i
71
+ roc = (Regexp.last_match(1) || 0).to_i
72
+ get_scene_production_table(roc)
73
+
74
+ when /STA(\d+)?$/i
75
+ roc = (Regexp.last_match(1) || 0).to_i
76
+ get_stance_table(roc)
77
+
78
+ when /EMO(\d+)?$/i
79
+ roc = (Regexp.last_match(1) || 0).to_i
80
+ get_emotion_table(roc)
81
+
82
+ end
83
+
84
+ return output
85
+ end
86
+
87
+ def get_emancipation_table(roc)
88
+ name = "解放判定表"
89
+ table = [
90
+ [2, '激闘。今回の端末は想定をはるかに上回る脅威だった。幾本もの太刀筋と永遠のような時間の果てに、君たちは勝利した。深手を負ったが、ギリギリ致命傷ではない。'],
91
+ [4, '辛勝。今回の端末は想定以上の大物だった。刃と牙のせめぎ合いの果て、君たちは辛くも勝利した。'],
92
+ [6, '勝利。今回の端末は、おおむね想定される程度の個体であった。多少の傷は負ったが、君たちは問題なく勝利できた。'],
93
+ [8, '快勝。今回の端末には、危うげも無く勝利できた。君とペアのコンビネーションの賜物だろう。かすり傷を負ったが、勲章のようなものだ。'],
94
+ [10, '圧勝。今回の端末は、君たちの敵ではなかった。君とペアの剣撃は瞬く間に端末を寸断し、粒子の光に還元した。'],
95
+ [12, '刹那。端末をその切っ先に捉えた刹那、君たちの前で粒子の光が舞う。それ以上何も起こることはなく、世界は色を取り戻した。'],
96
+ ]
97
+
98
+ if roc > 1
99
+ dice = roc
100
+ dice = 12 if dice > 12
101
+ diceText = ''
102
+ else
103
+ dice_list = @randomizer.roll_barabara(2, 6)
104
+ dice = dice_list.sum()
105
+ diceText = "(#{dice_list.join(',')})"
106
+ end
107
+
108
+ tableText = get_table_by_number(dice, table)
109
+ # ''だと\nは文字列扱いに。
110
+ tableText += "\n【達成値7以上】GM:攻撃ルーチン1つを開示(番号はペアPLが指定) PL:戦闘開始時のアクセルレベル+1" if dice >= 7
111
+ return "#{name} > #{dice}#{diceText}:#{tableText}"
112
+ end
113
+
114
+ def get_personality_table(roc)
115
+ name = "性格傾向表"
116
+ table = [
117
+ [1, '挑戦'],
118
+ [2, '調和'],
119
+ [3, '感性'],
120
+ [4, '信念'],
121
+ [5, '論理'],
122
+ [6, '思慮']
123
+ ]
124
+ return get_AlterRaise_1d6_table_result(name, table, roc)
125
+ end
126
+
127
+ def get_location_table(roc)
128
+ name = "場所表"
129
+ table = [
130
+ [13, '教室'],
131
+ [16, '部室'],
132
+ [23, '商店街'],
133
+ [26, '田舎'],
134
+ [33, '都会'],
135
+ [36, '駅'],
136
+ [43, 'バイト'],
137
+ [46, 'ステージ'],
138
+ [53, '図書館'],
139
+ [56, '病院'],
140
+ [63, '自然'],
141
+ [66, '家']
142
+ ]
143
+ return get_AlterRaise_d66_table_result(name, table, roc)
144
+ end
145
+
146
+ def get_quiet_table(roc)
147
+ name = "平穏・経験表"
148
+ table = [
149
+ [13, '友達'],
150
+ [16, '幼馴染み'],
151
+ [23, '両親'],
152
+ [26, '兄弟'],
153
+ [33, '親戚'],
154
+ [36, '理解者'],
155
+ [43, '友人'],
156
+ [46, '仲間'],
157
+ [53, '趣味'],
158
+ [56, '練習'],
159
+ [63, '一人'],
160
+ [66, 'お気に入り']
161
+ ]
162
+ return get_AlterRaise_d66_table_result(name, table, roc)
163
+ end
164
+
165
+ def get_delight_table(roc)
166
+ name = "喜び・経験表"
167
+ table = [
168
+ [13, '勝利'],
169
+ [16, '優勝'],
170
+ [23, '出会い'],
171
+ [26, '理解'],
172
+ [33, '幸運'],
173
+ [36, 'プレゼント'],
174
+ [43, '成就'],
175
+ [46, '成長'],
176
+ [53, '創造'],
177
+ [56, '好転'],
178
+ [63, '証明'],
179
+ [66, '生還']
180
+ ]
181
+ return get_AlterRaise_d66_table_result(name, table, roc)
182
+ end
183
+
184
+ def get_trauma_table(roc)
185
+ name = "心の傷・経験表"
186
+ table = [
187
+ [13, '敗北'],
188
+ [16, '仲違い'],
189
+ [23, '失恋'],
190
+ [26, '無理解'],
191
+ [33, '無力'],
192
+ [36, '孤独'],
193
+ [43, '別離'],
194
+ [46, '死別'],
195
+ [53, '損壊'],
196
+ [56, '喪失'],
197
+ [63, '病'],
198
+ [66, '事故']
199
+ ]
200
+ return get_AlterRaise_d66_table_result(name, table, roc)
201
+ end
202
+
203
+ def get_scene_production_table(roc)
204
+ name = "シーン演出表"
205
+ table = [
206
+ [1, '相談。君は相手に相談したいことがあった。'],
207
+ [2, '遊び。君は相手と遊びたかった。'],
208
+ [3, '案内。君は自身のアリウス・パーソナルを案内したかった。'],
209
+ [4, '勝負。君は相手と何らかの勝負をしたかった。'],
210
+ [5, 'お願い。君は相手にお願いしたいことがあった。'],
211
+ [6, '扉を開く前に。アクセルダイブ・ゲートをくぐる前に、君は相手に話したいことがあった。(*ダイブした後のシーンも演出すること)']
212
+ ]
213
+ return get_AlterRaise_1d6_table_result(name, table, roc)
214
+ end
215
+
216
+ def get_stance_table(roc)
217
+ name = "スタンス表"
218
+ table = [
219
+ [1, '友人'],
220
+ [2, '恋愛'],
221
+ [3, '師事'],
222
+ [4, 'ライバル'],
223
+ [5, '家族'],
224
+ [6, '守護']
225
+ ]
226
+ return get_AlterRaise_1d6_table_result(name, table, roc)
227
+ end
228
+
229
+ def get_emotion_table(roc)
230
+ name = "感情表"
231
+ table = [
232
+ [13, '勇気'],
233
+ [16, '怒り'],
234
+ [23, '悲しみ'],
235
+ [26, '喜び'],
236
+ [33, '驚き'],
237
+ [36, '恐れ'],
238
+ [43, '安らぎ'],
239
+ [46, '誠意'],
240
+ [53, '庇護'],
241
+ [56, '謝意'],
242
+ [63, '信頼'],
243
+ [66, '好意']
244
+ ]
245
+ return get_AlterRaise_d66_table_result(name, table, roc)
246
+ end
247
+
248
+ def get_AlterRaise_1d6_table_result(name, table, roc)
249
+ if roc > 0
250
+ dice = roc
251
+ dice = 6 if dice > 6
252
+ else
253
+ dice = @randomizer.roll_once(6)
254
+ end
255
+ tableText = get_table_by_number(dice, table)
256
+ return "#{name} > #{dice}:#{tableText}"
257
+ end
258
+
259
+ def get_AlterRaise_d66_table_result(name, table, roc)
260
+ if roc > 10
261
+ diceText = roc.to_s
262
+ dice1 = diceText[0, 1].to_i
263
+ dice1 = 6 if dice1 > 6
264
+ dice2 = diceText[1, 1].to_i
265
+ dice2 = 1 if dice2 < 1
266
+ dice2 = 6 if dice2 > 6
267
+ elsif roc > 0
268
+ dice1 = roc
269
+ dice1 = 6 if dice1 > 6
270
+ dice2 = @randomizer.roll_once(6)
271
+ else
272
+ dice1 = @randomizer.roll_once(6)
273
+ dice2 = @randomizer.roll_once(6)
274
+ end
275
+ dice = dice1 * 10 + dice2
276
+ diceText = "#{dice1},#{dice2}"
277
+ tableText = get_table_by_number(dice, table)
278
+ return "#{name} > #{diceText}:#{tableText}"
279
+ end
280
+ end
281
+ end
282
+ end