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.
- checksums.yaml +7 -0
- data/.editorconfig +21 -0
- data/.github/.codecov.yaml +10 -0
- data/.github/workflows/coverage.yaml +21 -0
- data/.github/workflows/lint.yaml +13 -0
- data/.github/workflows/test.yml +20 -0
- data/.gitignore +14 -0
- data/.rubocop.yml +96 -0
- data/.rubocop_todo.yml +113 -0
- data/CHANGELOG.md +868 -0
- data/Gemfile +11 -0
- data/LICENSE +29 -0
- data/README.md +38 -0
- data/ROADMAP.md +30 -0
- data/Rakefile +118 -0
- data/bcdice.gemspec +27 -0
- data/bin/repl.rb +21 -0
- data/docs/README.txt +2028 -0
- data/docs/dicebot_sort_key.md +72 -0
- data/docs/how_to_make_dicebot.md +453 -0
- data/lib/bcdice.rb +8 -0
- data/lib/bcdice/arithmetic_evaluator.rb +167 -0
- data/lib/bcdice/base.rb +423 -0
- data/lib/bcdice/command_parser.rb +242 -0
- data/lib/bcdice/common_command.rb +23 -0
- data/lib/bcdice/common_command/add_dice.rb +54 -0
- data/lib/bcdice/common_command/add_dice/node.rb +488 -0
- data/lib/bcdice/common_command/add_dice/parser.rb +282 -0
- data/lib/bcdice/common_command/add_dice/randomizer.rb +48 -0
- data/lib/bcdice/common_command/barabara_dice.rb +57 -0
- data/lib/bcdice/common_command/calc.rb +39 -0
- data/lib/bcdice/common_command/choice.rb +35 -0
- data/lib/bcdice/common_command/d66_dice.rb +63 -0
- data/lib/bcdice/common_command/reroll_dice.rb +190 -0
- data/lib/bcdice/common_command/upper_dice.rb +165 -0
- data/lib/bcdice/common_command/version.rb +26 -0
- data/lib/bcdice/dice_table.rb +8 -0
- data/lib/bcdice/dice_table/chain_table.rb +33 -0
- data/lib/bcdice/dice_table/d66_grid_table.rb +26 -0
- data/lib/bcdice/dice_table/d66_range_table.rb +26 -0
- data/lib/bcdice/dice_table/d66_table.rb +34 -0
- data/lib/bcdice/dice_table/range_table.rb +267 -0
- data/lib/bcdice/dice_table/roll_result.rb +43 -0
- data/lib/bcdice/dice_table/sai_fic_skill_table.rb +32 -0
- data/lib/bcdice/dice_table/table.rb +35 -0
- data/lib/bcdice/enum.rb +15 -0
- data/lib/bcdice/format.rb +36 -0
- data/lib/bcdice/game_system.rb +187 -0
- data/lib/bcdice/game_system/AFF2e.rb +141 -0
- data/lib/bcdice/game_system/AceKillerGene.rb +55 -0
- data/lib/bcdice/game_system/Airgetlamh.rb +117 -0
- data/lib/bcdice/game_system/Alsetto.rb +124 -0
- data/lib/bcdice/game_system/Alshard.rb +27 -0
- data/lib/bcdice/game_system/AlterRaise.rb +282 -0
- data/lib/bcdice/game_system/Amadeus.rb +622 -0
- data/lib/bcdice/game_system/Amadeus_Korean.rb +501 -0
- data/lib/bcdice/game_system/AnimaAnimus.rb +96 -0
- data/lib/bcdice/game_system/Arianrhod.rb +50 -0
- data/lib/bcdice/game_system/ArsMagica.rb +149 -0
- data/lib/bcdice/game_system/Avandner.rb +101 -0
- data/lib/bcdice/game_system/BBN.rb +143 -0
- data/lib/bcdice/game_system/BadLife.rb +435 -0
- data/lib/bcdice/game_system/BarnaKronika.rb +188 -0
- data/lib/bcdice/game_system/BattleTech.rb +530 -0
- data/lib/bcdice/game_system/BeastBindTrinity.rb +348 -0
- data/lib/bcdice/game_system/BeginningIdol.rb +2527 -0
- data/lib/bcdice/game_system/BeginningIdol_Korean.rb +2378 -0
- data/lib/bcdice/game_system/BladeOfArcana.rb +252 -0
- data/lib/bcdice/game_system/BlindMythos.rb +460 -0
- data/lib/bcdice/game_system/BloodCrusade.rb +423 -0
- data/lib/bcdice/game_system/BloodMoon.rb +213 -0
- data/lib/bcdice/game_system/CardRanker.rb +249 -0
- data/lib/bcdice/game_system/ChaosFlare.rb +181 -0
- data/lib/bcdice/game_system/Chill.rb +163 -0
- data/lib/bcdice/game_system/Chill3.rb +52 -0
- data/lib/bcdice/game_system/CodeLayerd.rb +132 -0
- data/lib/bcdice/game_system/ColossalHunter.rb +569 -0
- data/lib/bcdice/game_system/CrashWorld.rb +81 -0
- data/lib/bcdice/game_system/Cthulhu.rb +252 -0
- data/lib/bcdice/game_system/Cthulhu7th.rb +767 -0
- data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +386 -0
- data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +383 -0
- data/lib/bcdice/game_system/CthulhuTech.rb +263 -0
- data/lib/bcdice/game_system/Cthulhu_ChineseTraditional.rb +243 -0
- data/lib/bcdice/game_system/Cthulhu_Korean.rb +240 -0
- data/lib/bcdice/game_system/DarkBlaze.rb +207 -0
- data/lib/bcdice/game_system/DarkDaysDrive.rb +425 -0
- data/lib/bcdice/game_system/DarkSouls.rb +91 -0
- data/lib/bcdice/game_system/DeadlineHeroes.rb +583 -0
- data/lib/bcdice/game_system/DemonParasite.rb +524 -0
- data/lib/bcdice/game_system/DetatokoSaga.rb +310 -0
- data/lib/bcdice/game_system/DetatokoSaga_Korean.rb +310 -0
- data/lib/bcdice/game_system/DiceBot.rb +17 -0
- data/lib/bcdice/game_system/DiceOfTheDead.rb +111 -0
- data/lib/bcdice/game_system/DoubleCross.rb +373 -0
- data/lib/bcdice/game_system/DoubleCross_Korean.rb +371 -0
- data/lib/bcdice/game_system/Dracurouge.rb +1856 -0
- data/lib/bcdice/game_system/Dracurouge_Korean.rb +310 -0
- data/lib/bcdice/game_system/DungeonsAndDragons.rb +19 -0
- data/lib/bcdice/game_system/EarthDawn.rb +225 -0
- data/lib/bcdice/game_system/EarthDawn3.rb +275 -0
- data/lib/bcdice/game_system/EarthDawn4.rb +272 -0
- data/lib/bcdice/game_system/EclipsePhase.rb +51 -0
- data/lib/bcdice/game_system/Elric.rb +36 -0
- data/lib/bcdice/game_system/Elysion.rb +1213 -0
- data/lib/bcdice/game_system/EmbryoMachine.rb +227 -0
- data/lib/bcdice/game_system/EndBreaker.rb +132 -0
- data/lib/bcdice/game_system/EtrianOdysseySRS.rb +27 -0
- data/lib/bcdice/game_system/Fiasco.rb +123 -0
- data/lib/bcdice/game_system/Fiasco_Korean.rb +122 -0
- data/lib/bcdice/game_system/FilledWith.rb +1543 -0
- data/lib/bcdice/game_system/FullMetalPanic.rb +27 -0
- data/lib/bcdice/game_system/FutariSousa.rb +994 -0
- data/lib/bcdice/game_system/FutariSousa_Korean.rb +994 -0
- data/lib/bcdice/game_system/Garako.rb +559 -0
- data/lib/bcdice/game_system/GardenOrder.rb +451 -0
- data/lib/bcdice/game_system/GehennaAn.rb +136 -0
- data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +120 -0
- data/lib/bcdice/game_system/GoblinSlayer.rb +168 -0
- data/lib/bcdice/game_system/GoldenSkyStories.rb +77 -0
- data/lib/bcdice/game_system/Gorilla.rb +44 -0
- data/lib/bcdice/game_system/GranCrest.rb +518 -0
- data/lib/bcdice/game_system/Gundog.rb +52 -0
- data/lib/bcdice/game_system/GundogRevised.rb +294 -0
- data/lib/bcdice/game_system/GundogZero.rb +261 -0
- data/lib/bcdice/game_system/Gurps.rb +403 -0
- data/lib/bcdice/game_system/GurpsFW.rb +2330 -0
- data/lib/bcdice/game_system/HarnMaster.rb +208 -0
- data/lib/bcdice/game_system/HatsuneMiku.rb +706 -0
- data/lib/bcdice/game_system/Hieizan.rb +48 -0
- data/lib/bcdice/game_system/HouraiGakuen.rb +270 -0
- data/lib/bcdice/game_system/HuntersMoon.rb +503 -0
- data/lib/bcdice/game_system/Illusio.rb +89 -0
- data/lib/bcdice/game_system/InfiniteFantasia.rb +51 -0
- data/lib/bcdice/game_system/Insane.rb +822 -0
- data/lib/bcdice/game_system/Insane_Korean.rb +773 -0
- data/lib/bcdice/game_system/IthaWenUa.rb +38 -0
- data/lib/bcdice/game_system/JamesBond.rb +45 -0
- data/lib/bcdice/game_system/Kamigakari.rb +394 -0
- data/lib/bcdice/game_system/Kamigakari_Korean.rb +428 -0
- data/lib/bcdice/game_system/KanColle.rb +938 -0
- data/lib/bcdice/game_system/KemonoNoMori.rb +258 -0
- data/lib/bcdice/game_system/KillDeathBusiness.rb +1420 -0
- data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +1510 -0
- data/lib/bcdice/game_system/KurayamiCrying.rb +49 -0
- data/lib/bcdice/game_system/LiveraDoll.rb +375 -0
- data/lib/bcdice/game_system/LogHorizon.rb +3567 -0
- data/lib/bcdice/game_system/LogHorizon_Korean.rb +1407 -0
- data/lib/bcdice/game_system/LostRecord.rb +30 -0
- data/lib/bcdice/game_system/LostRoyal.rb +242 -0
- data/lib/bcdice/game_system/MagicaLogia.rb +1148 -0
- data/lib/bcdice/game_system/MeikyuDays.rb +415 -0
- data/lib/bcdice/game_system/MeikyuKingdom.rb +466 -0
- data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +269 -0
- data/lib/bcdice/game_system/MetalHead.rb +249 -0
- data/lib/bcdice/game_system/MetalHeadExtream.rb +917 -0
- data/lib/bcdice/game_system/MetallicGuardian.rb +31 -0
- data/lib/bcdice/game_system/MonotoneMuseum.rb +354 -0
- data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +304 -0
- data/lib/bcdice/game_system/Nechronica.rb +211 -0
- data/lib/bcdice/game_system/Nechronica_Korean.rb +160 -0
- data/lib/bcdice/game_system/NeverCloud.rb +74 -0
- data/lib/bcdice/game_system/NightWizard.rb +231 -0
- data/lib/bcdice/game_system/NightWizard3rd.rb +24 -0
- data/lib/bcdice/game_system/NightmareHunterDeep.rb +117 -0
- data/lib/bcdice/game_system/NinjaSlayer.rb +274 -0
- data/lib/bcdice/game_system/NjslyrBattle.rb +54 -0
- data/lib/bcdice/game_system/Nuekagami.rb +293 -0
- data/lib/bcdice/game_system/OneWayHeroics.rb +134 -0
- data/lib/bcdice/game_system/OracleEngine.rb +265 -0
- data/lib/bcdice/game_system/OrgaRain.rb +77 -0
- data/lib/bcdice/game_system/Oukahoushin3rd.rb +162 -0
- data/lib/bcdice/game_system/Paradiso.rb +323 -0
- data/lib/bcdice/game_system/Paranoia.rb +64 -0
- data/lib/bcdice/game_system/ParanoiaRebooted.rb +109 -0
- data/lib/bcdice/game_system/ParasiteBlood.rb +231 -0
- data/lib/bcdice/game_system/Pathfinder.rb +21 -0
- data/lib/bcdice/game_system/Peekaboo.rb +324 -0
- data/lib/bcdice/game_system/Pendragon.rb +39 -0
- data/lib/bcdice/game_system/PhantasmAdventure.rb +73 -0
- data/lib/bcdice/game_system/Postman.rb +185 -0
- data/lib/bcdice/game_system/PulpCthulhu.rb +184 -0
- data/lib/bcdice/game_system/Raisondetre.rb +171 -0
- data/lib/bcdice/game_system/RecordOfLodossWar.rb +58 -0
- data/lib/bcdice/game_system/RecordOfSteam.rb +149 -0
- data/lib/bcdice/game_system/RokumonSekai2.rb +110 -0
- data/lib/bcdice/game_system/RoleMaster.rb +24 -0
- data/lib/bcdice/game_system/RuneQuest.rb +47 -0
- data/lib/bcdice/game_system/RyuTuber.rb +266 -0
- data/lib/bcdice/game_system/Ryutama.rb +199 -0
- data/lib/bcdice/game_system/SRS.rb +348 -0
- data/lib/bcdice/game_system/SamsaraBallad.rb +111 -0
- data/lib/bcdice/game_system/Satasupe.rb +1173 -0
- data/lib/bcdice/game_system/ScreamHighSchool.rb +128 -0
- data/lib/bcdice/game_system/SevenFortressMobius.rb +34 -0
- data/lib/bcdice/game_system/ShadowRun.rb +26 -0
- data/lib/bcdice/game_system/ShadowRun4.rb +49 -0
- data/lib/bcdice/game_system/ShadowRun5.rb +80 -0
- data/lib/bcdice/game_system/SharedFantasia.rb +69 -0
- data/lib/bcdice/game_system/ShinMegamiTenseiKakuseihen.rb +85 -0
- data/lib/bcdice/game_system/ShinkuuGakuen.rb +506 -0
- data/lib/bcdice/game_system/ShinobiGami.rb +680 -0
- data/lib/bcdice/game_system/ShoujoTenrankai.rb +677 -0
- data/lib/bcdice/game_system/Skynauts.rb +324 -0
- data/lib/bcdice/game_system/SteamPunkers.rb +485 -0
- data/lib/bcdice/game_system/StellarKnights.rb +856 -0
- data/lib/bcdice/game_system/SterileLife.rb +452 -0
- data/lib/bcdice/game_system/StrangerOfSwordCity.rb +103 -0
- data/lib/bcdice/game_system/StratoShout.rb +316 -0
- data/lib/bcdice/game_system/StratoShout_Korean.rb +314 -0
- data/lib/bcdice/game_system/Strave.rb +223 -0
- data/lib/bcdice/game_system/SwordWorld.rb +491 -0
- data/lib/bcdice/game_system/SwordWorld2_0.rb +295 -0
- data/lib/bcdice/game_system/SwordWorld2_5.rb +121 -0
- data/lib/bcdice/game_system/TherapieSein.rb +93 -0
- data/lib/bcdice/game_system/TokumeiTenkousei.rb +96 -0
- data/lib/bcdice/game_system/TokyoGhostResearch.rb +122 -0
- data/lib/bcdice/game_system/TokyoNova.rb +19 -0
- data/lib/bcdice/game_system/Torg.rb +364 -0
- data/lib/bcdice/game_system/Torg1_5.rb +139 -0
- data/lib/bcdice/game_system/TorgEternity.rb +414 -0
- data/lib/bcdice/game_system/TrinitySeven.rb +364 -0
- data/lib/bcdice/game_system/TunnelsAndTrolls.rb +287 -0
- data/lib/bcdice/game_system/TwilightGunsmoke.rb +527 -0
- data/lib/bcdice/game_system/Utakaze.rb +153 -0
- data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +132 -0
- data/lib/bcdice/game_system/Villaciel.rb +555 -0
- data/lib/bcdice/game_system/WARPS.rb +33 -0
- data/lib/bcdice/game_system/WaresBlade.rb +34 -0
- data/lib/bcdice/game_system/Warhammer.rb +336 -0
- data/lib/bcdice/game_system/WitchQuest.rb +275 -0
- data/lib/bcdice/game_system/WorldOfDarkness.rb +135 -0
- data/lib/bcdice/game_system/YankeeYogSothoth.rb +440 -0
- data/lib/bcdice/game_system/YearZeroEngine.rb +134 -0
- data/lib/bcdice/game_system/ZettaiReido.rb +142 -0
- data/lib/bcdice/game_system/meikyu_kingdom/item_table.rb +383 -0
- data/lib/bcdice/game_system/meikyu_kingdom/kingdom_name_table.rb +89 -0
- data/lib/bcdice/game_system/meikyu_kingdom/landscape_table.rb +196 -0
- data/lib/bcdice/game_system/meikyu_kingdom/name_tables.rb +223 -0
- data/lib/bcdice/game_system/meikyu_kingdom/placename_table.rb +214 -0
- data/lib/bcdice/game_system/meikyu_kingdom/tables.rb +610 -0
- data/lib/bcdice/game_system/meikyu_kingdom/word_table.rb +117 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/item_table.rb +380 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +184 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/name_table.rb +417 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/table.rb +912 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/word_table.rb +121 -0
- data/lib/bcdice/game_system/one_way_heroics/dungeon_table.rb +67 -0
- data/lib/bcdice/game_system/one_way_heroics/random_event_table.rb +166 -0
- data/lib/bcdice/game_system/one_way_heroics/tables.rb +668 -0
- data/lib/bcdice/loader.rb +37 -0
- data/lib/bcdice/normalize.rb +38 -0
- data/lib/bcdice/preprocessor.rb +87 -0
- data/lib/bcdice/randomizer.rb +137 -0
- data/lib/bcdice/repl.rb +155 -0
- data/lib/bcdice/user_defined_dice_table.rb +153 -0
- data/lib/bcdice/version.rb +3 -0
- metadata +304 -0
@@ -0,0 +1,227 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class EmbryoMachine < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'EmbryoMachine'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = 'エムブリオマシンRPG'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'えむふりおましんRPG'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
17
|
+
・判定ロール(EMt+m@c#f)
|
18
|
+
目標値t、修正値m、クリティカル値c(省略時は20)、ファンブル値f(省略時は2)で攻撃判定を行います。
|
19
|
+
命中した場合は命中レベルと命中部位も自動出力します。
|
20
|
+
Rコマンドに読み替えされます。
|
21
|
+
・各種表
|
22
|
+
・命中部位表 HLT
|
23
|
+
・白兵攻撃ファンブル表 MFT
|
24
|
+
・射撃攻撃ファンブル表 SFT
|
25
|
+
INFO_MESSAGE_TEXT
|
26
|
+
|
27
|
+
register_prefix(['EM\d+.*', 'HLT', 'MFT', 'SFT', '2R10.*'])
|
28
|
+
|
29
|
+
def initialize(command)
|
30
|
+
super(command)
|
31
|
+
|
32
|
+
@sort_add_dice = true
|
33
|
+
end
|
34
|
+
|
35
|
+
def replace_text(string)
|
36
|
+
string
|
37
|
+
.gsub(/EM(\d+)([\+\-][\+\-\d]+)(@(\d+))(\#(\d+))/i) { "2R10#{Regexp.last_match(2)}>=#{Regexp.last_match(1)}[#{Regexp.last_match(4)},#{Regexp.last_match(6)}]" }
|
38
|
+
.gsub(/EM(\d+)([\+\-][\+\-\d]+)(\#(\d+))/i) { "2R10#{Regexp.last_match(2)}>=#{Regexp.last_match(1)}[20,#{Regexp.last_match(4)}]" }
|
39
|
+
.gsub(/EM(\d+)([\+\-][\+\-\d]+)(@(\d+))/i) { "2R10#{Regexp.last_match(2)}>=#{Regexp.last_match(1)}[#{Regexp.last_match(4)},2]" }
|
40
|
+
.gsub(/EM(\d+)([\+\-][\+\-\d]+)/i) { "2R10#{Regexp.last_match(2)}>=#{Regexp.last_match(1)}[20,2]" }
|
41
|
+
.gsub(/EM(\d+)(@(\d+))(\#(\d+))/i) { "2R10>=#{Regexp.last_match(1)}[#{Regexp.last_match(3)},#{Regexp.last_match(5)}]" }
|
42
|
+
.gsub(/EM(\d+)(\#(\d+))/i) { "2R10>=#{Regexp.last_match(1)}[20,#{Regexp.last_match(3)}]" }
|
43
|
+
.gsub(/EM(\d+)(@(\d+))/i) { "2R10>=#{Regexp.last_match(1)}[#{Regexp.last_match(3)},2]" }
|
44
|
+
.gsub(/EM(\d+)/i) { "2R10>=#{Regexp.last_match(1)}[20,2]" }
|
45
|
+
end
|
46
|
+
|
47
|
+
# ゲーム別成功度判定(nD10)
|
48
|
+
def check_nD10(total, dice_total, _dice_list, cmp_op, target)
|
49
|
+
return '' if target == '?'
|
50
|
+
return '' unless cmp_op == :>=
|
51
|
+
|
52
|
+
if dice_total <= 2
|
53
|
+
" > ファンブル"
|
54
|
+
elsif dice_total >= 20
|
55
|
+
" > クリティカル"
|
56
|
+
elsif total >= target
|
57
|
+
" > 成功"
|
58
|
+
else
|
59
|
+
" > 失敗"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def checkRoll(string)
|
64
|
+
string = replace_text(string)
|
65
|
+
|
66
|
+
return nil unless /(^|\s)S?(2[rR]10([\+\-\d]+)?([>=]+(\d+))(\[(\d+),(\d+)\]))(\s|$)/i =~ string
|
67
|
+
|
68
|
+
string = Regexp.last_match(2)
|
69
|
+
diff = 0
|
70
|
+
crit = 20
|
71
|
+
fumble = 2
|
72
|
+
mod = 0
|
73
|
+
modText = Regexp.last_match(3)
|
74
|
+
|
75
|
+
diff = Regexp.last_match(5).to_i if Regexp.last_match(5)
|
76
|
+
crit = Regexp.last_match(7).to_i if Regexp.last_match(7)
|
77
|
+
fumble = Regexp.last_match(8).to_i if Regexp.last_match(8)
|
78
|
+
mod = ArithmeticEvaluator.eval(modText) if modText
|
79
|
+
|
80
|
+
dice_arr = @randomizer.roll_barabara(2, 10).sort
|
81
|
+
dice_now = dice_arr.sum()
|
82
|
+
dice_str = dice_arr.join(",")
|
83
|
+
|
84
|
+
dice_loc = @randomizer.roll_sum(2, 10)
|
85
|
+
big_dice = dice_arr[1]
|
86
|
+
output = "#{dice_now}[#{dice_str}]"
|
87
|
+
total_n = dice_now + mod
|
88
|
+
if mod > 0
|
89
|
+
output += "+#{mod}"
|
90
|
+
elsif mod < 0
|
91
|
+
output += mod.to_s
|
92
|
+
end
|
93
|
+
if output =~ /[^\d\[\]]+/
|
94
|
+
output = "(#{string}) > #{output} > #{total_n}"
|
95
|
+
else
|
96
|
+
output = "(#{string}) > #{output}"
|
97
|
+
end
|
98
|
+
# 成功度判定
|
99
|
+
if dice_now <= fumble
|
100
|
+
output += " > ファンブル"
|
101
|
+
elsif dice_now >= crit
|
102
|
+
output += " > クリティカル > " + get_hit_level_table(big_dice) + "(ダメージ+10) > [#{dice_loc}]#{get_hit_location_table(dice_loc)}"
|
103
|
+
elsif total_n >= diff
|
104
|
+
output += " > 成功 > " + get_hit_level_table(big_dice) + " > [#{dice_loc}]#{get_hit_location_table(dice_loc)}"
|
105
|
+
else
|
106
|
+
output += " > 失敗"
|
107
|
+
end
|
108
|
+
|
109
|
+
return output
|
110
|
+
end
|
111
|
+
|
112
|
+
def eval_game_system_specific_command(command)
|
113
|
+
debug("eval_game_system_specific_command command", command)
|
114
|
+
|
115
|
+
if (result = checkRoll(command))
|
116
|
+
return result
|
117
|
+
end
|
118
|
+
|
119
|
+
output = '1'
|
120
|
+
type = ""
|
121
|
+
number = 0
|
122
|
+
|
123
|
+
case command
|
124
|
+
when /HLT/i
|
125
|
+
type = '命中部位'
|
126
|
+
number = @randomizer.roll_sum(2, 10)
|
127
|
+
output = get_hit_location_table(number)
|
128
|
+
when /SFT/i
|
129
|
+
type = '射撃ファンブル'
|
130
|
+
number = @randomizer.roll_sum(2, 10)
|
131
|
+
output = get_shoot_fumble_table(number)
|
132
|
+
when /MFT/i
|
133
|
+
type = '白兵ファンブル'
|
134
|
+
number = @randomizer.roll_sum(2, 10)
|
135
|
+
output = get_melee_fumble_table(number)
|
136
|
+
end
|
137
|
+
|
138
|
+
if output != '1'
|
139
|
+
output = "#{type}表(#{number}) > #{output}"
|
140
|
+
end
|
141
|
+
return output
|
142
|
+
end
|
143
|
+
|
144
|
+
# ** 命中部位表
|
145
|
+
def get_hit_location_table(num)
|
146
|
+
table = [
|
147
|
+
[4, '頭'],
|
148
|
+
[7, '左脚'],
|
149
|
+
[9, '左腕'],
|
150
|
+
[12, '胴'],
|
151
|
+
[14, '右腕'],
|
152
|
+
[17, '右脚'],
|
153
|
+
[20, '頭'],
|
154
|
+
]
|
155
|
+
|
156
|
+
return get_table_by_number(num, table)
|
157
|
+
end
|
158
|
+
|
159
|
+
# ** ファンブル表
|
160
|
+
def get_shoot_fumble_table(num) # 射撃攻撃ファンブル表
|
161
|
+
output = '1'
|
162
|
+
table = [
|
163
|
+
'暴発した。使用した射撃武器が搭載されている部位に命中レベルAで命中する。',
|
164
|
+
'あまりに無様な誤射をした。パイロットの精神的負傷が2段階上昇する。',
|
165
|
+
'誤射をした。自機に最も近い味方機体に命中レベルAで命中する。',
|
166
|
+
'誤射をした。対象に最も近い味方機体に命中レベルAで命中する。',
|
167
|
+
'武装が暴発した。使用した射撃武器が破損する。ダメージは発生しない。',
|
168
|
+
'転倒した。次のセグメントのアクションが待機に変更される。',
|
169
|
+
'弾詰まりを起こした。使用した射撃武器は戦闘終了まで使用できなくなる。',
|
170
|
+
'砲身が大きく歪んだ。使用した射撃武器による射撃攻撃の命中値が戦闘終了まで-3される。',
|
171
|
+
'熱量が激しく増大した。使用した射撃武器の消費弾薬が戦闘終了まで+3される。',
|
172
|
+
'暴発した。使用した射撃武器が搭載されている部位に命中レベルBで命中する。',
|
173
|
+
'弾薬が劣化した。使用した射撃武器の全てのダメージが戦闘終了まで-2される。',
|
174
|
+
'無様な誤射をした。パイロットの精神的負傷が1段階上昇する。',
|
175
|
+
'誤射をした。対象に最も近い味方機体に命中レベルBで命中する。',
|
176
|
+
'誤射をした。自機に最も近い味方機体に命中レベルBで命中する。',
|
177
|
+
'砲身が歪んだ。使用した射撃武器による射撃攻撃の命中値が戦闘終了まで-2される。',
|
178
|
+
'熱量が増大した。使用した射撃武器の消費弾薬が戦闘終了まで+2される。',
|
179
|
+
'砲身がわずかに歪んだ。使用した射撃武器による射撃攻撃の命中値が戦闘終了まで-1される。',
|
180
|
+
'熱量がやや増大した。使用した射撃武器の消費弾薬が戦闘終了まで+1される。',
|
181
|
+
'何も起きなかった。',
|
182
|
+
]
|
183
|
+
dc = 2
|
184
|
+
output = table[num - dc] if table[num - dc]
|
185
|
+
return output
|
186
|
+
end
|
187
|
+
|
188
|
+
def get_melee_fumble_table(num) # 白兵攻撃ファンブル表
|
189
|
+
output = '1'
|
190
|
+
table = [
|
191
|
+
'大振りしすぎた。使用した白兵武器が搭載されている部位の反対の部位(右腕に搭載されているなら左側)に命中レベルAで命中する。',
|
192
|
+
'激しく頭を打った。パイロットの肉体的負傷が2段階上昇する。',
|
193
|
+
'過負荷で部位が爆発した。使用した白兵武器が搭載されている部位が全壊する。ダメージは発生せず、搭載されている武装も破損しない。',
|
194
|
+
'大振りしすぎた。使用した白兵武器が搭載されている部位の反対の部位(右腕に搭載されているなら左側)に命中レベルBで命中する。',
|
195
|
+
'武装が爆発した。使用した白兵武器が破損する。ダメージは発生しない。',
|
196
|
+
'部分的に機能停止した。使用した白兵武器は戦闘終了まで使用できなくなる。',
|
197
|
+
'転倒した。次のセグメントのアクションが待機に変更される。',
|
198
|
+
'激しい刃こぼれを起こした。使用した白兵武器の全てのダメージが戦闘終了まで-3される。',
|
199
|
+
'地面の凹凸にはまった。次の2セグメントは移動を行うことができない。',
|
200
|
+
'刃こぼれを起こした。使用した白兵武器の全てのダメージが戦闘終了まで-2される。',
|
201
|
+
'大振りしすぎた。使用した白兵武器が搭載されている部位の反対の部位(右腕に搭載されているなら左側)に命中レベルCで命中する。',
|
202
|
+
'頭を打った。パイロットの肉体的負傷が1段階上昇する。',
|
203
|
+
'駆動系が損傷した。移動力が戦闘終了まで-2される(最低1)。',
|
204
|
+
'間合いを取り損ねた。隣接している機体(複数の場合は1機をランダムに決定)に激突する。',
|
205
|
+
'機体ごと突っ込んだ。機体が向いている方角へ移動力をすべて消費するまで移動する。',
|
206
|
+
'制御系が損傷した。回避値が戦闘終了まで-1される(最低1)。',
|
207
|
+
'踏み誤った。機体が向いている方角へ移動力の半分を消費するまで移動する。',
|
208
|
+
'たたらを踏んだ。機体が向いている方角へ1の移動力で移動する。',
|
209
|
+
'何も起きなかった。',
|
210
|
+
]
|
211
|
+
dc = 2
|
212
|
+
output = table[num - dc] if table[num - dc]
|
213
|
+
return output
|
214
|
+
end
|
215
|
+
|
216
|
+
def get_hit_level_table(num)
|
217
|
+
table = [
|
218
|
+
[6, '命中レベルC'],
|
219
|
+
[9, '命中レベルB'],
|
220
|
+
[10, '命中レベルA'],
|
221
|
+
]
|
222
|
+
|
223
|
+
return get_table_by_number(num, table)
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
227
|
+
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class EndBreaker < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'EndBreaker'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = 'エンドブレイカー!'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'えんとふれいかあ'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<~MESSAGETEXT
|
17
|
+
・判定 (nEB)
|
18
|
+
n個のD6を振る判定。ダブルトリガー発動で自動振り足し。
|
19
|
+
・各種表
|
20
|
+
・生死不明表 (LDUT)
|
21
|
+
MESSAGETEXT
|
22
|
+
|
23
|
+
register_prefix(['\d+EB', 'LDUT'])
|
24
|
+
|
25
|
+
def initialize(command)
|
26
|
+
super(command)
|
27
|
+
|
28
|
+
@enabled_d66 = true
|
29
|
+
@d66_sort_type = D66SortType::NO_SORT
|
30
|
+
end
|
31
|
+
|
32
|
+
def eval_game_system_specific_command(command)
|
33
|
+
if command =~ /(\d+)EB/i
|
34
|
+
diceCount = Regexp.last_match(1).to_i
|
35
|
+
return checkRoll(diceCount)
|
36
|
+
end
|
37
|
+
|
38
|
+
tableName = ""
|
39
|
+
text = ""
|
40
|
+
number = 0
|
41
|
+
|
42
|
+
case command
|
43
|
+
when "LDUT"
|
44
|
+
tableName = "生死不明表"
|
45
|
+
text, number = getLifeAndDeathUnknownResult()
|
46
|
+
else
|
47
|
+
return nil
|
48
|
+
end
|
49
|
+
|
50
|
+
result = "#{tableName}(#{number}):#{text}"
|
51
|
+
|
52
|
+
return result
|
53
|
+
end
|
54
|
+
|
55
|
+
def checkRoll(diceCount)
|
56
|
+
debug("EndBreaker diceCount", diceCount)
|
57
|
+
|
58
|
+
rollCount = diceCount # ダブルトリガー
|
59
|
+
|
60
|
+
result = ""
|
61
|
+
diceFullList = []
|
62
|
+
|
63
|
+
while rollCount != 0
|
64
|
+
diceList = @randomizer.roll_barabara(rollCount, 6).sort
|
65
|
+
diceFullList.concat(diceList)
|
66
|
+
|
67
|
+
# 1の出目ごとにダブルトリガーで2個ダイス追加
|
68
|
+
rollCount = diceList.select { |i| i == 1 }.size * 2
|
69
|
+
|
70
|
+
result += "[#{diceList.join}]"
|
71
|
+
result += " ダブルトリガー! " if rollCount > 0
|
72
|
+
end
|
73
|
+
|
74
|
+
# ダイスの出目の個数を集計
|
75
|
+
result += " >"
|
76
|
+
(2..6).each do |num|
|
77
|
+
count = diceFullList.select { |i| i == num }.size
|
78
|
+
result += " [#{num}:#{count}個]" unless count == 0
|
79
|
+
end
|
80
|
+
|
81
|
+
return result
|
82
|
+
end
|
83
|
+
|
84
|
+
def getLifeAndDeathUnknownResult()
|
85
|
+
table = [
|
86
|
+
' 1日:生還!',
|
87
|
+
' 1日:生還!',
|
88
|
+
' 1日:生還!',
|
89
|
+
' 1日:生還!',
|
90
|
+
' 1日:生還!',
|
91
|
+
' 1日:生還!',
|
92
|
+
|
93
|
+
' 1日:生還!',
|
94
|
+
' 5日:敵に捕らわれ、ひどい暴行と拷問を受けた。',
|
95
|
+
' 2日:謎の人物に命を救われた。',
|
96
|
+
'10日:奴隷として売り飛ばされた。',
|
97
|
+
' 8日:おぞましい儀式の生贄として連れ去られた。',
|
98
|
+
' 9日:幽閉・投獄された。',
|
99
|
+
|
100
|
+
' 1日:生還!',
|
101
|
+
' 7日:モンスター蠢く地下迷宮に滑落した。',
|
102
|
+
'12日強力なマスカレイドにとらわれ、実験台にされた。',
|
103
|
+
' 8日:放浪中に遭遇した事件を、颯爽と解決していた。',
|
104
|
+
' 5日:飢餓状態に追い込まれた。',
|
105
|
+
'15日:記憶を失い放浪した。',
|
106
|
+
|
107
|
+
' 1日:生還!',
|
108
|
+
'10日:異性に命を救われて、手厚い看病を受けた。',
|
109
|
+
' 3日:負傷からくる熱病で、生死の境を彷徨った。',
|
110
|
+
'11日:闘奴にされたが、戦いと友情の末に自由を獲得した。',
|
111
|
+
' 6日:負傷したまま川に落ち、遥か下流まで流された。',
|
112
|
+
' 9日:敵に連れ去られ、執拗な拷問を受け続けた。',
|
113
|
+
|
114
|
+
' 1日:生還!',
|
115
|
+
' 4日:繰り返す「死の悪夢」に苛まれた。',
|
116
|
+
' 3日:巨獣の巣に連れ去られた。',
|
117
|
+
'10日:謎の集団に救われて、手厚い看病を受けた。',
|
118
|
+
' 3日:チッタニアンの集落に迷い込み、もてなしを受けた。',
|
119
|
+
' 7日:ピュアリィの群れにとらわれ、弄ばれた。',
|
120
|
+
|
121
|
+
' 1日:生還!',
|
122
|
+
' 6日:楽園のような場所を発見し、しばらく逗留した。',
|
123
|
+
' 9日:盗賊団に救われ、恩返しとして少し用心棒をした。',
|
124
|
+
'10日:熱病の見せる官能的な幻影にとらわれ、彷徨った。',
|
125
|
+
' 5日:謎の賞金首に狙われ、傷めつけられていた。',
|
126
|
+
' - :「五分五分」の一般判定。失敗すると死亡。',
|
127
|
+
]
|
128
|
+
return get_table_by_d66(table)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bcdice/game_system/SRS'
|
4
|
+
|
5
|
+
# 世界樹の迷宮SRSのダイスボット
|
6
|
+
module BCDice
|
7
|
+
module GameSystem
|
8
|
+
class EtrianOdysseySRS < SRS
|
9
|
+
# ゲームシステムの識別子
|
10
|
+
ID = 'EtrianOdysseySRS'
|
11
|
+
|
12
|
+
# ゲームシステム名
|
13
|
+
NAME = '世界樹の迷宮SRS'
|
14
|
+
|
15
|
+
# ゲームシステム名の読みがな
|
16
|
+
SORT_KEY = 'せかいしゆのめいきゆうSRS'
|
17
|
+
|
18
|
+
# 固有のコマンドの接頭辞を設定する
|
19
|
+
register_prefix(['2D6.*', 'EO.*', 'SQ.*'])
|
20
|
+
|
21
|
+
# 成功判定のエイリアスコマンドを設定する
|
22
|
+
set_aliases_for_srs_roll('EO', 'SQ')
|
23
|
+
|
24
|
+
HELP_MESSAGE = help_message()
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class Fiasco < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'Fiasco'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = 'フィアスコ'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'ふいあすこ'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<INFO_MESSAGE_TEXT
|
17
|
+
・判定コマンド(FSx, WxBx)
|
18
|
+
相関図・転落要素用(FSx):相関図や転落要素のためにx個ダイスを振り、出目ごとに分類する
|
19
|
+
黒白差分判定用(WxBx) :転落、残響のために白ダイス(W指定)と黒ダイス(B指定)で差分を求める
|
20
|
+
※ WとBは片方指定(Bx, Wx)、入替指定(WxBx,BxWx)可能
|
21
|
+
|
22
|
+
INFO_MESSAGE_TEXT
|
23
|
+
|
24
|
+
COMMAND_TYPE_INDEX = 1
|
25
|
+
|
26
|
+
START_DICE_INDEX = 2
|
27
|
+
|
28
|
+
BW_FIRST_DICE_INDEX = 2
|
29
|
+
BW_SECOND_DICE_INDEX = 5
|
30
|
+
BW_SECOND_DICE_TAG_INDEX = 4
|
31
|
+
|
32
|
+
START_COMMAND_TAG = "FS"
|
33
|
+
W_DICEROLL_COMMAND_TAG = "W"
|
34
|
+
B_DICEROLL_COMMAND_TAG = "B"
|
35
|
+
|
36
|
+
register_prefix(['(FS|[WB])(\d+).*'])
|
37
|
+
|
38
|
+
def eval_game_system_specific_command(command)
|
39
|
+
m = /\A(FS|[WB])(\d+)(([WB])(\d+))?/.match(command)
|
40
|
+
unless m
|
41
|
+
return ''
|
42
|
+
end
|
43
|
+
|
44
|
+
type = m[COMMAND_TYPE_INDEX]
|
45
|
+
if type == START_COMMAND_TAG
|
46
|
+
return makeStartDiceRoll(m)
|
47
|
+
else
|
48
|
+
return makeWhiteBlackDiceRoll(type, m)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def makeStartDiceRoll(m)
|
53
|
+
dice = m[START_DICE_INDEX].to_i
|
54
|
+
|
55
|
+
dice_list = @randomizer.roll_barabara(dice, 6)
|
56
|
+
|
57
|
+
diceList = [0, 0, 0, 0, 0, 0]
|
58
|
+
dice_list.each do |takeDice|
|
59
|
+
diceList[takeDice - 1] += 1
|
60
|
+
end
|
61
|
+
|
62
|
+
return "1 => #{diceList[0]}個 2 => #{diceList[1]}個 3 => #{diceList[2]}個 4 => #{diceList[3]}個 5 => #{diceList[4]}個 6 => #{diceList[5]}個"
|
63
|
+
end
|
64
|
+
|
65
|
+
def makeWhiteBlackDiceRoll(type, m)
|
66
|
+
if type == W_DICEROLL_COMMAND_TAG
|
67
|
+
whiteTotal, whiteDiceText, blackTotal, blackDiceText = makeArgsDiceRoll(m[BW_FIRST_DICE_INDEX], m[BW_SECOND_DICE_INDEX])
|
68
|
+
result = "白#{whiteTotal}[#{whiteDiceText}]"
|
69
|
+
if blackDiceText
|
70
|
+
if m[BW_SECOND_DICE_TAG_INDEX] == W_DICEROLL_COMMAND_TAG
|
71
|
+
return "#{m}:白指定(#{W_DICEROLL_COMMAND_TAG})は重複できません。"
|
72
|
+
end
|
73
|
+
|
74
|
+
result += " 黒#{blackTotal}[#{blackDiceText}]"
|
75
|
+
end
|
76
|
+
elsif type == B_DICEROLL_COMMAND_TAG
|
77
|
+
blackTotal, blackDiceText, whiteTotal, whiteDiceText = makeArgsDiceRoll(m[BW_FIRST_DICE_INDEX], m[BW_SECOND_DICE_INDEX])
|
78
|
+
result = "黒#{blackTotal}[#{blackDiceText}]"
|
79
|
+
if whiteDiceText
|
80
|
+
if m[BW_SECOND_DICE_TAG_INDEX] == B_DICEROLL_COMMAND_TAG
|
81
|
+
return "#{m}:黒指定(#{B_DICEROLL_COMMAND_TAG})は重複できません。"
|
82
|
+
end
|
83
|
+
|
84
|
+
result += " 白#{whiteTotal}[#{whiteDiceText}]"
|
85
|
+
end
|
86
|
+
else
|
87
|
+
return ''
|
88
|
+
end
|
89
|
+
|
90
|
+
if blackTotal > whiteTotal
|
91
|
+
return "#{result} > 黒#{blackTotal - whiteTotal}"
|
92
|
+
elsif blackTotal < whiteTotal
|
93
|
+
return "#{result} > 白#{whiteTotal - blackTotal}"
|
94
|
+
end
|
95
|
+
|
96
|
+
return "#{result} > 0"
|
97
|
+
end
|
98
|
+
|
99
|
+
def makeArgsDiceRoll(firstDice, secondDice)
|
100
|
+
firstDice = firstDice.to_i
|
101
|
+
secondDice = secondDice&.to_i
|
102
|
+
|
103
|
+
secondTotal = 0
|
104
|
+
|
105
|
+
dice_list = @randomizer.roll_barabara(firstDice, 6)
|
106
|
+
firstTotal = dice_list.sum()
|
107
|
+
firstDiceText = dice_list.join(",")
|
108
|
+
|
109
|
+
if secondDice
|
110
|
+
if secondDice > 0
|
111
|
+
dice_list = @randomizer.roll_barabara(secondDice, 6)
|
112
|
+
secondTotal = dice_list.sum()
|
113
|
+
secondDiceText = dice_list.join(",")
|
114
|
+
else
|
115
|
+
secondDiceText = "0"
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
return firstTotal, firstDiceText, secondTotal, secondDiceText
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|