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,293 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class Nuekagami < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'Nuekagami'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = '鵺鏡'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'ぬえかかみ'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<~MESSAGETEXT
|
17
|
+
・喪失表(xL)
|
18
|
+
BL:血脈、LL:生様、SL:魂魄、FL:因縁
|
19
|
+
・LR:喪失取戻表
|
20
|
+
・門通過描写表(xG)
|
21
|
+
HG:地獄門、RG:羅生門、VG:朱雀門、OG:応天門
|
22
|
+
MESSAGETEXT
|
23
|
+
|
24
|
+
def eval_game_system_specific_command(command)
|
25
|
+
info = TABLES[command.upcase]
|
26
|
+
return nil if info.nil?
|
27
|
+
|
28
|
+
name = info[:name]
|
29
|
+
type = info[:type]
|
30
|
+
table = info[:table]
|
31
|
+
|
32
|
+
text, number =
|
33
|
+
case type
|
34
|
+
when '1D20'
|
35
|
+
get_table_by_nDx(table, 1, 20)
|
36
|
+
end
|
37
|
+
|
38
|
+
return nil if text.nil?
|
39
|
+
|
40
|
+
return "#{name}(#{number}) > #{text}"
|
41
|
+
end
|
42
|
+
|
43
|
+
TABLES =
|
44
|
+
{
|
45
|
+
"LR" => {
|
46
|
+
name: "喪失取戻表",
|
47
|
+
type: '1D20',
|
48
|
+
table: [
|
49
|
+
'鬼化。妄執かくして鬼と結実す。欠けたるところすでになし。あやかし、己の欠けたるを足せり。すなわちその身、人ならず。',
|
50
|
+
'妄想。とくと見よ。何も失ってなどおらぬ。この肉この魂この身上、欠けたるところぞなし。欠けし夢を見しのみ。全て夢なり。',
|
51
|
+
'鵺型。肉に内に暗雲ゆらめく。欠けたるところ漂うそれは、鶴が欠片。暖昧の境界なれば、失いしものまた戻りたるが如く。',
|
52
|
+
'諦観。己が身を知る。望む愚かを知る。足掻く愚かを知る。心は折れり。望みは絶えり。諦めることで足るものもある知らむ。',
|
53
|
+
'屍漁。もはやいかな所業もいとわず。されば数多の骸を漁り、ついに欠けたるを満たせり。代わりに欠けたる心、知ることぞなし。',
|
54
|
+
'呪刻。あまねく呪はば、己も囚わる。己を騙る呪い、己を捕らえ絡めれば、欠けたるもまた満ちて見ゆる。',
|
55
|
+
'得心。すべては己の行いの結果なれば、因果応報。それなきは不具合なれど、得心せり。もはや悩めどせんなきことなりや。',
|
56
|
+
'奪取。無ければ、奪え。あな妬ましと思わば奪え。奪いて己がものとせよ。さすればたちまち、欲するところ戻れり。',
|
57
|
+
'罪価。己が罪を知れり。かくあさましき罪業に比ぶれば、己が失いしもの、なんと軽きことか。さあれば、悩むるに能はず。',
|
58
|
+
'代替。失へるもの、未だ失われり。されど、代わるものを得たり。二度とは失うわじ。失わばその痛みに狂い果てむ。',
|
59
|
+
'受容。納得はなし。諦観はなし。されど受け入れり。欠けたるもまた己なれば、欠けるところもて満たさば、それ己ならずや。',
|
60
|
+
'代行。かかる身にそれなくとも是。かく行い為すは、己が筆ならず。代わりて為す者、信ずべきあらばこそ。',
|
61
|
+
'適応。心痛むる時多けれど、欠けたるにも馴れたり。もはや欠けるに不自由なし。さればそれすなわち、欠けたるに非ず',
|
62
|
+
'妖賞。大妖に遇ひて、饗応す。彼の妖、大いに慶びてその身に欠けたるを与へむ。それ異様なれど、用は足れり。',
|
63
|
+
'奪還。つひに奪われしもの、奪い返せり!取り戻せしそれ、再び手の内に収まりて輝けり。けしてまた手放すことあらじ。',
|
64
|
+
'本懐。己の求むるを、ついに為し遂げり。もはや己が力、己が技、疑うところなし。己が有様になんぞ足らざるあるべきや。',
|
65
|
+
'取得。艱難辛苦ぞありや。ついぞ果てに失いしそれ、身に修めん。ただ取り戻せしものにあらじ。新たに得たりしや。',
|
66
|
+
'賜物。その欠ける様、彼の人あはれに思いて、かくなるを与え賜り。以て、満ちたる己、彼の人にまた仕えむ。',
|
67
|
+
'大悟。足掻けれど足掻けれど、満ちることなし。足りざるは自然。己の姿を受け入れむ。されば欠けたるに、悩まさるるもなし。',
|
68
|
+
'望月。欠けたる月が満ちるが如く。欠けたるは突然に戻れり。いかなる誠、いかなる印か、知るものはあらず。'
|
69
|
+
],
|
70
|
+
},
|
71
|
+
|
72
|
+
"BL" => {
|
73
|
+
name: "血脈の喪失表",
|
74
|
+
type: '1D20',
|
75
|
+
table: [
|
76
|
+
'髪の色。一夜にしてあなたの髪は白くなった。',
|
77
|
+
'視力。周囲がぼんやりとしか見えない。',
|
78
|
+
'所作。体の一部がまともに動かせない。',
|
79
|
+
'痛み。体が痛みを感じなくなってしまった。',
|
80
|
+
'容貌。顔に大きな傷や火傷を負った。',
|
81
|
+
'血の気。あなたの肌は血の気を失ったままだ。',
|
82
|
+
'赤い血。体を流れる血が異様な色となった。',
|
83
|
+
'子を作る力。子を作る力を失った。',
|
84
|
+
'器用さ。体が常に小さく震えている。',
|
85
|
+
'健康。病を患った……体が衰弱している。',
|
86
|
+
'寿命。あなたの寿命は残りわずかとなった。',
|
87
|
+
'ぬくもり。その体は常に冷たい……。',
|
88
|
+
'片目。片目を失ってしまった……。',
|
89
|
+
'片脚。片脚を切り落とされた!',
|
90
|
+
'片腕。片腕を切り落とされた!',
|
91
|
+
'生命。あなたの鼓動は止まって久しい。',
|
92
|
+
'真の力。本来の力がほとんど発揮できない。',
|
93
|
+
'肉。異様に痩せたか、体の一部が白骨化している。',
|
94
|
+
'人の体。体が歪み変わり、異形と化した。',
|
95
|
+
'己の体。今は他人の体を借りている。'
|
96
|
+
],
|
97
|
+
},
|
98
|
+
|
99
|
+
"LL" => {
|
100
|
+
name: "生様の喪失表",
|
101
|
+
type: '1D20',
|
102
|
+
table: [
|
103
|
+
'主君の寵愛。不興を買ってしまった。',
|
104
|
+
'師匠。死んだか、あるいはあなたが捨てられた。',
|
105
|
+
'面子。大いに恥をかいた。このままにしておけない。',
|
106
|
+
'時間。今まで精魂を傾けて来たものは無駄だった。',
|
107
|
+
'血縁。信じていた生まれではなかった……。',
|
108
|
+
'家宝。家の宝、あるいは形見を奪われてしまった。',
|
109
|
+
'恋人。死んだか、あるいは奪われた。',
|
110
|
+
'運。何をやってもうまくいかない。',
|
111
|
+
'財産。騙し取られたか……。あるいは使い果たした。',
|
112
|
+
'名声。あなたの名声は地に落ちている……。',
|
113
|
+
'居場所。居るべき場所、身分を失ってしまった……。',
|
114
|
+
'地位。かつての地位は失われたのだ。',
|
115
|
+
'日常。こんな世の中でも平和に暮らしていたのに。',
|
116
|
+
'相棒。死んだか、あるいは裏切られた。',
|
117
|
+
'仕える人。死んだか、あるいはあなたが捨てられた。',
|
118
|
+
'人望。かつてあなたを讃えた人が、今やあなたを罵る。',
|
119
|
+
'家族。死んだか、あるいはあなたが捨てられた。',
|
120
|
+
'故郷。何者かに滅ぼされたか、あるいは自滅した。',
|
121
|
+
'守るべき人。守るべき人を守れなかった……。',
|
122
|
+
'自由。脅され縛られ、誰かの命令を聞くしかできない。'
|
123
|
+
],
|
124
|
+
},
|
125
|
+
|
126
|
+
"SL" => {
|
127
|
+
name: "魂魄の喪失表",
|
128
|
+
type: '1D20',
|
129
|
+
table: [
|
130
|
+
'誇り。誇りなど残ってはいない。',
|
131
|
+
'心の余裕。今を生きるだけで精一杯。',
|
132
|
+
'敬う心。己こそが全てだ。',
|
133
|
+
'気力。何もやる気がおきない……。',
|
134
|
+
'安眠。夜毎の悪夢に、まともに眠れない。',
|
135
|
+
'信じる心。二度と人など信じるものか。',
|
136
|
+
'愛。もはや誰かを愛することなどない。',
|
137
|
+
'夢。前に見えていた光、目標。今は闇の中だ。',
|
138
|
+
'一線。己の中の超えてはならぬ線を踏み越えた。',
|
139
|
+
'信じたもの。かつて信じたのはまやかしだった。',
|
140
|
+
'人の心。この世で人の心が何の役に立つ?',
|
141
|
+
'瞳の光。全て虚しいものとしか見えない。',
|
142
|
+
'希望。この世に何を望むというのだろう?',
|
143
|
+
'自制心。己を抑えて何とする?',
|
144
|
+
'涙。その目が涙を流すことはない。',
|
145
|
+
'笑顔。二度と笑いなどしないだろう。',
|
146
|
+
'大切な記憶。どうしてか……記憶を失っている。',
|
147
|
+
'本当の自分。己を偽りすぎて、本来の己を忘れた。',
|
148
|
+
'正気。今のあなたは狂気の沙汰だ!',
|
149
|
+
'己の意志。あなたは誰かの人形。道具に過ぎない。'
|
150
|
+
],
|
151
|
+
},
|
152
|
+
|
153
|
+
"FL" => {
|
154
|
+
name: "因縁表",
|
155
|
+
type: '1D20',
|
156
|
+
table: [
|
157
|
+
'仇敵。奴は敵だ。あなたの敵だ。',
|
158
|
+
'殺意。殺してやりたい。',
|
159
|
+
'蔑視。口ほどにもない存在だ。',
|
160
|
+
'嫉妬。なぜアイツだけが……。',
|
161
|
+
'恐怖。恐ろしい。あれを怒らせてはいけない。',
|
162
|
+
'目障り。邪魔だ。気に入らない。',
|
163
|
+
'利用。役に立ってくれそうだな。',
|
164
|
+
'玩具。せいぜい楽しませてもらおう。',
|
165
|
+
'依存。あの人がいなければいけないのだ。',
|
166
|
+
'欲望。お前が欲しい……。',
|
167
|
+
'好敵。なかなかやるじゃないか。',
|
168
|
+
'憐憎。哀れな……。',
|
169
|
+
'悪友。腐れ縁。信用できないが妙に心地いい。',
|
170
|
+
'畏怖。あの人には逆らえない。',
|
171
|
+
'恩義。恩がある……返さなければ。',
|
172
|
+
'親友。心から信じられる友だ。',
|
173
|
+
'尊敬。あの人のようになりたい。',
|
174
|
+
'相棒。言葉はなくとも全てが通じ合う。',
|
175
|
+
'思慕。恋をしてしまった。',
|
176
|
+
'主君。心の主君。身命を賭して守り仕える。'
|
177
|
+
],
|
178
|
+
},
|
179
|
+
|
180
|
+
"HG" => {
|
181
|
+
name: "地獄門通過描写表",
|
182
|
+
type: '1D20',
|
183
|
+
table: [
|
184
|
+
'背後見れば、地獄の門をば幻視せり。危うき次第を知りたり.',
|
185
|
+
'必死に歩めり。背後に穂れし血と臓脈、こぼしたるが心地なれど。',
|
186
|
+
'背後の地に深き爪痕あり。己を捕らへむとせる鬼の爪跡かと思ふ。',
|
187
|
+
'劫火に焼かるる己を幻視す。汗にまみれ覚めれば、己が所業悔悟せり。',
|
188
|
+
'水鏡に映る己を見て目を覚ます。彼のままなれば地獄に堕つると。',
|
189
|
+
'天に鶴騒ぎたり。御身が魂晩取り逃がしたりと吃るが如く。',
|
190
|
+
'足が泥淳に囚わるる幻視。引きずり込む亡者。必死に逃れ至れり。',
|
191
|
+
'陰に蠢く餓鬼を見ゆ・明日は己ぞと思へば、背も震えたり。',
|
192
|
+
'喪失の苦しみ、いくばくか休めり。他を思う心地ぞ生まれり。',
|
193
|
+
'いみじう悩み苦しけれど、やがてそれも馴れり。今や苦しみならず。',
|
194
|
+
'しずけき雨降らば、己が所業洗い流さるるとも、思へたり。',
|
195
|
+
'汚泥が如く絡みし過ぎたる日々、わずかに離れたる心地ぞする。',
|
196
|
+
'背負いし怨念ら退き薄れむ。これなるは縁がゆへか、心地ゆへか。',
|
197
|
+
'内に孕むる絶望へ、連理たれと希望の芽、萌ゆる。',
|
198
|
+
'生温かき風と共に、大粒の雨降れり。すわ血の雨かとも思へり。',
|
199
|
+
'人と関わりて縁を見ゆ。抱ふるもの、いくらか少なくなりき。',
|
200
|
+
'夢枕、あるいは白昼夢なるか。神仏現るるにすがりたり。',
|
201
|
+
'劫火の中、白き手が己を引けりと幻視す。あるひは過去の縁か。',
|
202
|
+
'蛙呑む蛇を見たり。あさましき業に、己をふと顧みぬ。',
|
203
|
+
'心中にて、かそけき希望の糸見へり。慎重にたぐりて登らむとす。'
|
204
|
+
],
|
205
|
+
},
|
206
|
+
|
207
|
+
"RG" => {
|
208
|
+
name: "羅生門通過描写表",
|
209
|
+
type: '1D20',
|
210
|
+
table: [
|
211
|
+
'むごき所業、目にせり。心強張りて、常の様にてあれず.',
|
212
|
+
'人の目に、己を嗤ふ気配感じたり。怒り、悔み、恥ぞ覚えむ。',
|
213
|
+
'鬼の腕より、ついに逃るるか.おぞましき震へぞ、治まりき。',
|
214
|
+
'辻吹く風に、人骨散れり。たちまち無常の感、起こりて心改めたり。',
|
215
|
+
'愛憎恩普、いよいよ狂ほしく。猛るまま、ただただ前へと進めり。',
|
216
|
+
'飢えたる犬の如し。泥水すすりても前に進み、想い果たさむ。',
|
217
|
+
'喪失、取り戻すは近し。思はず、あさましき笑みぞ浮かべり。',
|
218
|
+
'いやしき者ども、あさましき目を向くる。蔑みてまかり通らむ。',
|
219
|
+
'喪失の夢繰り返すこといくたびか。もはや業苦の炎冷め、常日頃の如し。',
|
220
|
+
'あるひは己の内よりか。あやしき声あれば欲心また昂ぶらむ。',
|
221
|
+
'死人を見、成仏を祈れり。心あらば、己が内にて仏も宿らむ。',
|
222
|
+
'ただただ世の無常を知れば、哀愁の情あふれ感じむ。',
|
223
|
+
'路地に小さき花咲くを見ゆ。我執の心晴れたる心地せり。',
|
224
|
+
'冷たき風あらば、情動わずかに治まりて、落ち着きたりけり。',
|
225
|
+
'酒を飲めり。酔ひたる心地の内に、業苦も曖昧とならむ。',
|
226
|
+
'見えざる大門潜りしか。境目超えたるを感ずる。いざ、知らずの地平へ。',
|
227
|
+
'乞食坊主に逢ひて、恵む。これもまたいくばくの功徳なりきや。',
|
228
|
+
'子供ら遊ぶを見ゆ。己が古きを思へば、思はず顔ほころびぬ。',
|
229
|
+
'暗雲に包まれし都なれど今その身に、いくばくかの光差し照らしけり。',
|
230
|
+
'神仏の似姿、幻視す。されば、いかな身にも信心のいくばくか起これり。'
|
231
|
+
],
|
232
|
+
},
|
233
|
+
|
234
|
+
"VG" => {
|
235
|
+
name: "朱雀門通過描写表",
|
236
|
+
type: '1D20',
|
237
|
+
table: [
|
238
|
+
'雷響きて、暗霊いよいよ濃ゆし。己が先を見せるるが如し。',
|
239
|
+
'今一つ取り戻すは及ばぬ口惜しきに、鬼が如く唸りし。',
|
240
|
+
'求めし手、届かずも絶望すれど再び、ふらふらと歩み出さむ。',
|
241
|
+
'かたときの福なるか。狐に化かさるるが如く、鹿なる泡沫の夢。',
|
242
|
+
'流るる血。朱に染まる視界。されど、染まらざる中に光あり。',
|
243
|
+
'己が臓腑抉るが如く。己が業、抉り捨て進まん。',
|
244
|
+
'先に狐の影見ゆ。あやしけれど、迷ひながら、狐を追へり。',
|
245
|
+
'大いなる境を越えたるかと思えり。未だ道半ばなれば油断許さず。',
|
246
|
+
'暗雲に白鷺翔けるを見ゆ。瑞兆なれば希望もまた湧きぬ。',
|
247
|
+
'内より翼の出るが心地せり。いざ思い切りて、翔ばむ。',
|
248
|
+
'割れた杯より漏れたるも、重ねたる杯に。合一せば余さず受けり。',
|
249
|
+
'心激しくして魚跳ねるが如く。その実も暗き水面より跳ね出たり。',
|
250
|
+
'貴き牛車と行き逢はむ。幽かな香に、目ぞ覚めたる思いせり。',
|
251
|
+
'ふと口をついて歌詠めり。何者か下の句継ぎて、心合わせむ。',
|
252
|
+
'知らずの人より、送られし歌あり。返歌いかがせむかと思ひたり。',
|
253
|
+
'鳥の巣立つを見たり。己もまた、新たな道歩むべきぞと心せり。',
|
254
|
+
'暗雲貫きて、空に月あり。天より見らるる心地して、行い正せり。',
|
255
|
+
'目的近づけど、心重し。胸痛みて、いみじう哀し。',
|
256
|
+
'不意に仏心起こりて、万物慈みの念おぼえたり。',
|
257
|
+
'頭上より何者かの楽の音、饗けり。その身、祝はるる心地せり。'
|
258
|
+
],
|
259
|
+
},
|
260
|
+
|
261
|
+
"OG" => {
|
262
|
+
name: "応天門通過描写表",
|
263
|
+
type: '1D20',
|
264
|
+
table: [
|
265
|
+
'光捕らへど暗し。新たなる地獄の門に落つる己を知りたり。',
|
266
|
+
'求めしもの得たり。されど、なにものか失いし心地ぞせる……。',
|
267
|
+
'狐鴫きて自覚むる。全て一夜の夢の如し。痛みもまたしかり。',
|
268
|
+
'なにゆへか、涙こぼるる。ただ涙こぼれ、業苦もまた流れむ。',
|
269
|
+
'人想ひて、未練生まるる。己が幸求めれば、死を畏れむ。',
|
270
|
+
'打ち返す波の音聞く。遥か遠く、旅立ちたむと念、生じたり。',
|
271
|
+
'実る稲田を幻視す。もはや都の有様、人住む地に非ずと思へり。',
|
272
|
+
'取り戻したるに、ただただ歓喜す。もはや周りの様も感ぜず。',
|
273
|
+
'あまたの人の目、御身見てざわめくを感ず。優越の心地あり。',
|
274
|
+
'かけがへなきもの、見つけたり。今はただ、そを喜ぶのみなれば。',
|
275
|
+
'天盤にて星巡り、時満ちて、方合へり。なればその身にも幸ありむ。',
|
276
|
+
'幾年月ぞ、剥那の如し。思ふれば囚わる檻も、無きかと見ゆ。',
|
277
|
+
'天より鵺退きて、日の光差す。浴びる中、魂魄またぬくもりを覚えり。',
|
278
|
+
'風流、解する心あらば天地自然もまた並び、自らその内に合一せむ。',
|
279
|
+
'いかにせで、己の在り様を責むるや。己は己なれが、気に負うに値せず。',
|
280
|
+
'あまねく世のことども、遠く鈍く思ひて心安らかなる境地に至れり。',
|
281
|
+
'天遠く光差せば、淡き虹も浮かべり。何処かへ渡す橋とも見ゆ。',
|
282
|
+
'天より一輪の花舞い降りて、御身の手に落つ。心また花咲けり。',
|
283
|
+
'鵺の内に竜神舞へり。風雨激しく、身濡らせど、心清々し。',
|
284
|
+
'都の暗雲、晴れたる日も稀にあり。なんぞ魂魄晴るる日なしや。'
|
285
|
+
],
|
286
|
+
},
|
287
|
+
|
288
|
+
}.freeze
|
289
|
+
|
290
|
+
register_prefix(TABLES.keys)
|
291
|
+
end
|
292
|
+
end
|
293
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bcdice/game_system/one_way_heroics/tables"
|
4
|
+
require "bcdice/game_system/one_way_heroics/dungeon_table"
|
5
|
+
require "bcdice/game_system/one_way_heroics/random_event_table"
|
6
|
+
|
7
|
+
module BCDice
|
8
|
+
module GameSystem
|
9
|
+
class OneWayHeroics < Base
|
10
|
+
# ゲームシステムの識別子
|
11
|
+
ID = 'OneWayHeroics'
|
12
|
+
|
13
|
+
# ゲームシステム名
|
14
|
+
NAME = '片道勇者TRPG'
|
15
|
+
|
16
|
+
# ゲームシステム名の読みがな
|
17
|
+
SORT_KEY = 'かたみちゆうしやTRPG'
|
18
|
+
|
19
|
+
# ダイスボットの使い方
|
20
|
+
HELP_MESSAGE = <<~MESSAGETEXT
|
21
|
+
・判定 aJDx+y,z
|
22
|
+
a:ダイス数(省略時2個)、x:能力値、
|
23
|
+
y:修正値(省略可。「+」のみなら+1)、z:目標値(省略可)
|
24
|
+
例1)JD2+1,8 or JD2+,8 :能力値2、修正+1、目標値8
|
25
|
+
例2)JD3,10 能力値3、修正なし、目標値10
|
26
|
+
例3)3JD4+ ダイス3個から2個選択、能力値4、修正なし、目標値なし
|
27
|
+
・ファンブル表 FT/魔王追撃表 DC/進行ルート表 PR/会話テーマ表 TT
|
28
|
+
逃走判定表 EC/ランダムNPC特徴表 RNPC/偵察表 SCT
|
29
|
+
施設表 FCLT/施設表プラス FCLTP/希少動物表 RANI/王特徴表プラス KNGFTP
|
30
|
+
野外遭遇表 OUTENC/野外遭遇表プラス OUTENCP
|
31
|
+
モンスター特徴表 MONFT/モンスター特徴表プラス MONFTP
|
32
|
+
ドロップアイテム表 DROP/ドロップアイテム表プラス DROPP
|
33
|
+
武器ドロップ表 DROPWP/武器ドロップ表2 DROPWP2
|
34
|
+
防具ドロップ表 DROPAR/防具ドロップ表2 DROPAR2
|
35
|
+
聖武具ドロップ表 DROPHW/聖武具ドロップ表プラス DROPHWP
|
36
|
+
食品ドロップ表 DROPFD/食品ドロップ表2 DROPFD2
|
37
|
+
巻物ドロップ表 DROPSC/巻物ドロップ表2 DROPSC2
|
38
|
+
その他ドロップ表 DROPOT/その他 ドロップ表2 DROPOT2
|
39
|
+
薬品ドロップ表プラス DROPDRP/珍しい箱ドロップ表2 DROPRAREBOX2
|
40
|
+
・ランダムイベント表 RETx(x:現在の日数)、ランダムイベント表プラス RETPx
|
41
|
+
例)RET3、RETP4
|
42
|
+
・ダンジョン表 DNGNx(x:現在の日数)、ダンジョン表プラス DNGNPx
|
43
|
+
例)DNGN3、DNGNP4
|
44
|
+
MESSAGETEXT
|
45
|
+
|
46
|
+
def initialize(command)
|
47
|
+
super(command)
|
48
|
+
@enabled_d66 = true
|
49
|
+
@d66_sort_type = D66SortType::ASC
|
50
|
+
end
|
51
|
+
|
52
|
+
def eval_game_system_specific_command(command)
|
53
|
+
case command
|
54
|
+
when /^RET(\d+)$/
|
55
|
+
day = Regexp.last_match(1).to_i
|
56
|
+
RANDOM_EVENT_TABLE.roll_with_day(day, @randomizer)
|
57
|
+
when /^RETP(\d+)$/
|
58
|
+
day = Regexp.last_match(1).to_i
|
59
|
+
RANDOM_EVENT_TABLE_PLUS.roll_with_day(day, @randomizer)
|
60
|
+
when /^DNGN(\d+)$/
|
61
|
+
day = Regexp.last_match(1).to_i
|
62
|
+
DUNGEON_TABLE.roll_with_day(day, @randomizer)
|
63
|
+
when /^DNGNP(\d+)$/
|
64
|
+
day = Regexp.last_match(1).to_i
|
65
|
+
DUNGEON_TABLE_PLUS.roll_with_day(day, @randomizer)
|
66
|
+
when /^\d*JD/
|
67
|
+
getRollDiceCommandResult(command)
|
68
|
+
else
|
69
|
+
roll_tables(command, TABLES)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def getRollDiceCommandResult(command)
|
74
|
+
return nil unless command =~ /^(\d*)JD(\d*)(\+(\d*))?(,(\d+))?$/
|
75
|
+
|
76
|
+
diceCount = Regexp.last_match(1)
|
77
|
+
diceCount = 2 if diceCount.empty?
|
78
|
+
diceCount = diceCount.to_i
|
79
|
+
return nil if diceCount < 2
|
80
|
+
|
81
|
+
ability = Regexp.last_match(2).to_i
|
82
|
+
target = Regexp.last_match(6)
|
83
|
+
target = target.to_i unless target.nil?
|
84
|
+
|
85
|
+
modifyText = (Regexp.last_match(3) || "")
|
86
|
+
modifyText = "+1" if modifyText == "+"
|
87
|
+
modifyValue = modifyText.to_i
|
88
|
+
|
89
|
+
dice, diceText = rollJudgeDice(diceCount)
|
90
|
+
total = dice + ability + modifyValue
|
91
|
+
|
92
|
+
text = command.to_s
|
93
|
+
text += " > #{diceCount}D6[#{diceText}]+#{ability}#{modifyText}"
|
94
|
+
text += " > #{total}"
|
95
|
+
|
96
|
+
result = getJudgeReusltText(dice, total, target)
|
97
|
+
text += " > #{result}" unless result.empty?
|
98
|
+
|
99
|
+
return text
|
100
|
+
end
|
101
|
+
|
102
|
+
def rollJudgeDice(diceCount)
|
103
|
+
diceList = @randomizer.roll_barabara(diceCount, 6)
|
104
|
+
dice = diceList.sum()
|
105
|
+
diceText = diceList.join(",")
|
106
|
+
|
107
|
+
if diceCount == 2
|
108
|
+
return dice, diceText
|
109
|
+
end
|
110
|
+
|
111
|
+
diceList.sort!
|
112
|
+
diceList.reverse!
|
113
|
+
|
114
|
+
total = diceList[0] + diceList[1]
|
115
|
+
text = "#{diceText}→#{diceList[0]},#{diceList[1]}"
|
116
|
+
|
117
|
+
return total, text
|
118
|
+
end
|
119
|
+
|
120
|
+
def getJudgeReusltText(dice, total, target)
|
121
|
+
return "ファンブル" if dice == 2
|
122
|
+
return "スペシャル" if dice == 12
|
123
|
+
|
124
|
+
return "" if target.nil?
|
125
|
+
|
126
|
+
return "成功" if total >= target
|
127
|
+
|
128
|
+
return "失敗"
|
129
|
+
end
|
130
|
+
|
131
|
+
register_prefix(['\d*JD.*', 'RETP?\d+', 'DNGNP?\d+'] + TABLES.keys)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
@@ -0,0 +1,265 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bcdice/command_parser'
|
4
|
+
require 'bcdice/format'
|
5
|
+
|
6
|
+
module BCDice
|
7
|
+
module GameSystem
|
8
|
+
class OracleEngine < Base
|
9
|
+
# ゲームシステムの識別子
|
10
|
+
ID = 'OracleEngine'
|
11
|
+
|
12
|
+
# ゲームシステム名
|
13
|
+
NAME = 'オラクルエンジン'
|
14
|
+
|
15
|
+
# ゲームシステム名の読みがな
|
16
|
+
SORT_KEY = 'おらくるえんしん'
|
17
|
+
|
18
|
+
# ダイスボットの使い方
|
19
|
+
HELP_MESSAGE = <<MESSAGETEXT
|
20
|
+
・クラッチロール (xCL+y>=z)
|
21
|
+
ダイスをx個振り、1個以上目標シフトzに到達したか判定します。修正yは全てのダイスにかかります。
|
22
|
+
成功した時は目標シフトを、失敗した時はダイスの最大値-1シフトを返します
|
23
|
+
zが指定されないときは、ダイスをx個を振り、それに修正yしたものを返します。
|
24
|
+
通常、最低シフトは1、最大シフトは6です。目標シフトもそろえられます。
|
25
|
+
また、CLの後に7を入れ、(xCL7+y>=z)と入力すると最大シフトが7になります。
|
26
|
+
・判定 (xR6+y@c#f$b>=z)
|
27
|
+
ダイスをx個振り、大きいもの2つだけを見て達成値を算出し、成否を判定します。修正yは達成値にかかります。
|
28
|
+
ダイスブレイクとしてbを、クリティカル値としてcを、ファンブル値としてfを指定できます。
|
29
|
+
それぞれ指定されない時、0,12,2になります。
|
30
|
+
クリティカル値の上限はなし、下限は2。ファンブル値の上限は12、下限は0。
|
31
|
+
zが指定されないとき、達成値の算出のみ行います。
|
32
|
+
・ダメージロールのダイスブレイク (xD6+y$b)
|
33
|
+
ダイスをx個振り、合計値を出します。修正yは合計値にかかります。
|
34
|
+
ダイスブレイクとしてbを指定します。合計値は0未満になりません。
|
35
|
+
MESSAGETEXT
|
36
|
+
|
37
|
+
# ダイスボットで使用するコマンドを配列で列挙する
|
38
|
+
register_prefix(['\d+CL.*', '\d+R6.*', '\d+D6.*\$[\+\-]?\d+.*'])
|
39
|
+
|
40
|
+
def initialize(command)
|
41
|
+
super(command)
|
42
|
+
@sort_add_dice = true
|
43
|
+
@sort_barabara_dice = true
|
44
|
+
end
|
45
|
+
|
46
|
+
def eval_game_system_specific_command(command)
|
47
|
+
case command
|
48
|
+
when /\d+CL.*/i
|
49
|
+
clutch_roll(command)
|
50
|
+
when /\d+D6.*\$[\+\-]?\d.*/
|
51
|
+
damage_roll(command)
|
52
|
+
when /\d+R6/
|
53
|
+
r_roll(command)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# クラッチロール
|
58
|
+
def clutch_roll(string)
|
59
|
+
debug("clutch_roll begin", string)
|
60
|
+
|
61
|
+
parser = CommandParser.new(/\d+CL[67]?/i)
|
62
|
+
@cmd = parser.parse(string)
|
63
|
+
|
64
|
+
unless @cmd
|
65
|
+
return nil
|
66
|
+
end
|
67
|
+
|
68
|
+
unless [:>=, nil].include?(@cmd.cmp_op)
|
69
|
+
return nil
|
70
|
+
end
|
71
|
+
|
72
|
+
@times, @max_shift = @cmd.command.split("CL").map(&:to_i)
|
73
|
+
@max_shift ||= 6
|
74
|
+
@cmd.target_number = clamp(@cmd.target_number, 1, @max_shift) if @cmd.cmp_op
|
75
|
+
|
76
|
+
if @times == 0
|
77
|
+
return nil
|
78
|
+
end
|
79
|
+
|
80
|
+
dice_list = @randomizer.roll_barabara(@times, 6).map { |x| clamp(x + @cmd.modify_number, 1, @max_shift) }.sort
|
81
|
+
|
82
|
+
sequence = [
|
83
|
+
expr_clutch(),
|
84
|
+
"[#{dice_list.join(', ')}]",
|
85
|
+
result_clutch(dice_list.last)
|
86
|
+
]
|
87
|
+
|
88
|
+
return sequence.join(' > ')
|
89
|
+
end
|
90
|
+
|
91
|
+
def expr_clutch()
|
92
|
+
max_shift = @max_shift == 7 ? 7 : nil
|
93
|
+
cmp_op = Format.comparison_operator(@cmd.cmp_op)
|
94
|
+
modify_number = Format.modifier(@cmd.modify_number)
|
95
|
+
|
96
|
+
"(#{@times}CL#{max_shift}#{modify_number}#{cmp_op}#{@cmd.target_number})"
|
97
|
+
end
|
98
|
+
|
99
|
+
def result_clutch(after_shift)
|
100
|
+
if @cmd.cmp_op != :>=
|
101
|
+
"シフト#{after_shift}"
|
102
|
+
elsif after_shift >= @cmd.target_number
|
103
|
+
"成功 シフト#{@cmd.target_number}"
|
104
|
+
else
|
105
|
+
after_shift -= 1
|
106
|
+
after_shift = 1 if after_shift < 1
|
107
|
+
"失敗 シフト#{after_shift}"
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def clamp(i, min, max)
|
112
|
+
if i < min
|
113
|
+
min
|
114
|
+
elsif i > max
|
115
|
+
max
|
116
|
+
else
|
117
|
+
i
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
# 判定
|
122
|
+
def r_roll(string)
|
123
|
+
parser = CommandParser.new(/\d+R6/i)
|
124
|
+
@cmd = parser.parse(string)
|
125
|
+
unless @cmd
|
126
|
+
return nil
|
127
|
+
end
|
128
|
+
|
129
|
+
unless [:>=, nil].include?(@cmd.cmp_op)
|
130
|
+
return nil
|
131
|
+
end
|
132
|
+
|
133
|
+
@times = @cmd.command.to_i
|
134
|
+
|
135
|
+
if @times == 0
|
136
|
+
return nil
|
137
|
+
end
|
138
|
+
|
139
|
+
@critical = normalize_critical(@cmd.critical || 12, string)
|
140
|
+
@fumble = normalize_fumble(@cmd.fumble || 2, string)
|
141
|
+
@break = (@cmd.dollar || 0).abs
|
142
|
+
|
143
|
+
dice_list = @randomizer.roll_barabara(@times, 6).sort
|
144
|
+
dice_broken = dice_list.pop(@break)
|
145
|
+
|
146
|
+
# ブレイク後のダイスから最大値2つの合計がダイスの値
|
147
|
+
dice_total = dice_list.dup.pop(2).inject(0, :+)
|
148
|
+
total = dice_total + @cmd.modify_number
|
149
|
+
|
150
|
+
sequence = [
|
151
|
+
expr_r(),
|
152
|
+
dice_result_r(dice_total, dice_list, dice_broken),
|
153
|
+
result_r(dice_total, total)
|
154
|
+
]
|
155
|
+
|
156
|
+
return sequence.join(' > ')
|
157
|
+
end
|
158
|
+
|
159
|
+
def expr_r()
|
160
|
+
modify_number = Format.modifier(@cmd.modify_number)
|
161
|
+
critical = @critical == 12 ? "" : "c[#{@critical}]"
|
162
|
+
fumble = @fumble == 2 ? "" : "f[#{@fumble}]"
|
163
|
+
brak = @break == 0 ? "" : "b[#{@break}]"
|
164
|
+
cmp_op = Format.comparison_operator(@cmd.cmp_op)
|
165
|
+
|
166
|
+
"(#{@times}R6#{modify_number}#{critical}#{fumble}#{brak}#{cmp_op}#{@cmd.target_number})"
|
167
|
+
end
|
168
|
+
|
169
|
+
def dice_result_r(dice_total, dice_list, break_list)
|
170
|
+
modify_number_text = Format.modifier(@cmd.modify_number)
|
171
|
+
|
172
|
+
if break_list.empty?
|
173
|
+
"#{dice_total}[#{dice_list.join(', ')}]#{modify_number_text}"
|
174
|
+
else
|
175
|
+
"#{dice_total}[#{dice_list.join(', ')}]×[#{break_list.join(', ')}]#{modify_number_text}"
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
def result_r(dice_total, total)
|
180
|
+
if dice_total <= @fumble
|
181
|
+
"ファンブル!"
|
182
|
+
elsif dice_total >= @critical
|
183
|
+
"クリティカル!"
|
184
|
+
elsif @cmd.cmp_op == :>=
|
185
|
+
if total >= @cmd.target_number
|
186
|
+
"#{total} 成功"
|
187
|
+
else
|
188
|
+
"#{total} 失敗"
|
189
|
+
end
|
190
|
+
else
|
191
|
+
total.to_s
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
def normalize_critical(critical, string)
|
196
|
+
if /@[+-]/.match(string)
|
197
|
+
critical = 12 + critical
|
198
|
+
end
|
199
|
+
|
200
|
+
if critical < 2
|
201
|
+
critical = 2
|
202
|
+
end
|
203
|
+
|
204
|
+
return critical
|
205
|
+
end
|
206
|
+
|
207
|
+
def normalize_fumble(fumble, string)
|
208
|
+
if /#[+-]/.match(string)
|
209
|
+
fumble = 2 + fumble
|
210
|
+
end
|
211
|
+
|
212
|
+
return clamp(fumble, 0, 12)
|
213
|
+
end
|
214
|
+
|
215
|
+
# ダメージロール
|
216
|
+
def damage_roll(string)
|
217
|
+
parser = CommandParser.new(/\d+D6/i)
|
218
|
+
@cmd = parser.parse(string)
|
219
|
+
|
220
|
+
if @cmd.nil? || !@cmd.cmp_op.nil?
|
221
|
+
return nil
|
222
|
+
end
|
223
|
+
|
224
|
+
@times = @cmd.command.to_i
|
225
|
+
@break = (@cmd.dollar || 0).abs
|
226
|
+
|
227
|
+
if @times == 0
|
228
|
+
return nil
|
229
|
+
end
|
230
|
+
|
231
|
+
dice_list = @randomizer.roll_barabara(@times, 6).sort
|
232
|
+
dice_broken = dice_list.pop(@break)
|
233
|
+
|
234
|
+
total_n = dice_list.inject(0, :+) + @cmd.modify_number
|
235
|
+
total_n = 0 if total_n < 0
|
236
|
+
|
237
|
+
sequence = [
|
238
|
+
expr_damage(),
|
239
|
+
result_damage(dice_list, dice_broken),
|
240
|
+
total_n
|
241
|
+
]
|
242
|
+
|
243
|
+
return sequence.join(' > ')
|
244
|
+
end
|
245
|
+
|
246
|
+
def expr_damage()
|
247
|
+
modify_number = Format.modifier(@cmd.modify_number)
|
248
|
+
brak = @break == 0 ? "" : "b[#{@break}]"
|
249
|
+
|
250
|
+
"(#{@times}D6#{modify_number}#{brak})"
|
251
|
+
end
|
252
|
+
|
253
|
+
def result_damage(dice_list, break_list)
|
254
|
+
dice_total = dice_list.inject(0, :+)
|
255
|
+
modify_number_text = Format.modifier(@cmd.modify_number)
|
256
|
+
|
257
|
+
if break_list.empty?
|
258
|
+
"#{dice_total}[#{dice_list.join(', ')}]#{modify_number_text}"
|
259
|
+
else
|
260
|
+
"#{dice_total}[#{dice_list.join(', ')}]×[#{break_list.join(', ')}]#{modify_number_text}"
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
264
|
+
end
|
265
|
+
end
|