bcdice 3.1.3 → 3.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +186 -76
- data/README.md +3 -2
- data/i18n/BeginningIdol/ja_jp.yml +2806 -0
- data/i18n/BeginningIdol/ko_kr.yml +1400 -0
- data/i18n/Cthulhu/zh_hans.yml +11 -0
- data/i18n/KillDeathBusiness/ja_jp.yml +1 -1
- data/i18n/MagicaLogia/ja_jp.yml +1 -1
- data/i18n/MagicaLogia/zh_hans.yml +564 -0
- data/i18n/MonotoneMuseum/ko_kr.yml +526 -53
- data/i18n/StellarKnights/ja_jp.yml +498 -0
- data/i18n/StellarKnights/ko_kr.yml +498 -0
- data/i18n/zh_hans.yml +7 -0
- data/lib/bcdice/command/parsed.rb +11 -3
- data/lib/bcdice/command/parser.rb +179 -100
- data/lib/bcdice/common_command/add_dice.rb +1 -1
- data/lib/bcdice/common_command/barabara_dice/node.rb +2 -2
- data/lib/bcdice/common_command/barabara_dice/result.rb +6 -0
- data/lib/bcdice/common_command/calc.rb +1 -1
- data/lib/bcdice/common_command/choice.rb +82 -7
- data/lib/bcdice/common_command/tally_dice/node.rb +135 -0
- data/lib/bcdice/common_command/tally_dice/parser.rb +302 -0
- data/lib/bcdice/common_command/tally_dice.rb +19 -0
- data/lib/bcdice/common_command.rb +2 -0
- data/lib/bcdice/dice_table/d66_half_grid_table.rb +33 -0
- data/lib/bcdice/dice_table/d66_left_range_table.rb +29 -0
- data/lib/bcdice/dice_table/d66_one_third_table.rb +34 -0
- data/lib/bcdice/dice_table/d66_table.rb +5 -1
- data/lib/bcdice/dice_table.rb +3 -0
- data/lib/bcdice/game_system/AceKillerGene.rb +1 -1
- data/lib/bcdice/game_system/Ainecadette.rb +68 -0
- data/lib/bcdice/game_system/Airgetlamh.rb +1 -1
- data/lib/bcdice/game_system/Alsetto.rb +1 -1
- data/lib/bcdice/game_system/AlterRaise.rb +2 -2
- data/lib/bcdice/game_system/Amadeus.rb +110 -93
- data/lib/bcdice/game_system/AngelGear.rb +10 -5
- data/lib/bcdice/game_system/AnimaAnimus.rb +16 -9
- data/lib/bcdice/game_system/Aoharubaan.rb +91 -0
- data/lib/bcdice/game_system/Arianrhod.rb +6 -8
- data/lib/bcdice/game_system/AssaultEngine.rb +91 -0
- data/lib/bcdice/game_system/Avandner.rb +1 -1
- data/lib/bcdice/game_system/BadLife.rb +264 -289
- data/lib/bcdice/game_system/Bakenokawa.rb +244 -0
- data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
- data/lib/bcdice/game_system/BattleTech.rb +109 -28
- data/lib/bcdice/game_system/BeastBindTrinity.rb +28 -12
- data/lib/bcdice/game_system/BeginningIdol.rb +118 -2392
- data/lib/bcdice/game_system/BeginningIdol_Korean.rb +10 -2312
- data/lib/bcdice/game_system/BladeOfArcana.rb +1 -1
- data/lib/bcdice/game_system/BlindMythos.rb +39 -38
- data/lib/bcdice/game_system/BloodCrusade.rb +6 -7
- data/lib/bcdice/game_system/BloodMoon.rb +9 -8
- data/lib/bcdice/game_system/CardRanker.rb +8 -7
- data/lib/bcdice/game_system/CastleInGray.rb +133 -0
- data/lib/bcdice/game_system/ChaosFlare.rb +21 -15
- data/lib/bcdice/game_system/Chill.rb +10 -10
- data/lib/bcdice/game_system/Chill3.rb +9 -9
- data/lib/bcdice/game_system/CodeLayerd.rb +39 -39
- data/lib/bcdice/game_system/ColossalHunter.rb +34 -47
- data/lib/bcdice/game_system/CrashWorld.rb +1 -1
- data/lib/bcdice/game_system/Cthulhu.rb +3 -3
- data/lib/bcdice/game_system/Cthulhu7th.rb +56 -18
- data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
- data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
- data/lib/bcdice/game_system/Cthulhu_SimplifiedChinese.rb +60 -0
- data/lib/bcdice/game_system/DarkBlaze.rb +0 -11
- data/lib/bcdice/game_system/DarkDaysDrive.rb +8 -7
- data/lib/bcdice/game_system/DeadlineHeroes.rb +11 -10
- data/lib/bcdice/game_system/DemonParasite.rb +5 -13
- data/lib/bcdice/game_system/DesperateRun.rb +1 -1
- data/lib/bcdice/game_system/DoubleCross.rb +8 -1
- data/lib/bcdice/game_system/Dracurouge.rb +3 -2
- data/lib/bcdice/game_system/EclipsePhase.rb +14 -14
- data/lib/bcdice/game_system/Elric.rb +18 -14
- data/lib/bcdice/game_system/Elysion.rb +1 -1
- data/lib/bcdice/game_system/EmbryoMachine.rb +9 -8
- data/lib/bcdice/game_system/Emoklore.rb +25 -20
- data/lib/bcdice/game_system/FateCoreSystem.rb +117 -0
- data/lib/bcdice/game_system/Fiasco.rb +1 -1
- data/lib/bcdice/game_system/FilledWith.rb +4 -0
- data/lib/bcdice/game_system/FutariSousa.rb +12 -10
- data/lib/bcdice/game_system/GURPS.rb +17 -28
- data/lib/bcdice/game_system/Garako.rb +1 -1
- data/lib/bcdice/game_system/GardenOrder.rb +12 -7
- data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +1 -1
- data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
- data/lib/bcdice/game_system/Gorilla.rb +2 -8
- data/lib/bcdice/game_system/GranCrest.rb +189 -417
- data/lib/bcdice/game_system/Gundog.rb +9 -8
- data/lib/bcdice/game_system/GundogRevised.rb +10 -9
- data/lib/bcdice/game_system/GundogZero.rb +1 -1
- data/lib/bcdice/game_system/GurpsFW.rb +16 -16
- data/lib/bcdice/game_system/HarnMaster.rb +19 -26
- data/lib/bcdice/game_system/HatsuneMiku.rb +1 -1
- data/lib/bcdice/game_system/Hieizan.rb +12 -21
- data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
- data/lib/bcdice/game_system/HuntersMoon.rb +5 -10
- data/lib/bcdice/game_system/InfiniteFantasia.rb +19 -17
- data/lib/bcdice/game_system/Insane.rb +13 -20
- data/lib/bcdice/game_system/Irisbane.rb +154 -0
- data/lib/bcdice/game_system/IthaWenUa.rb +8 -15
- data/lib/bcdice/game_system/JamesBond.rb +10 -10
- data/lib/bcdice/game_system/JekyllAndHyde.rb +1 -1
- data/lib/bcdice/game_system/Kamigakari.rb +1 -1
- data/lib/bcdice/game_system/KanColle.rb +4 -9
- data/lib/bcdice/game_system/Karukami.rb +84 -0
- data/lib/bcdice/game_system/KemonoNoMori.rb +26 -39
- data/lib/bcdice/game_system/KillDeathBusiness.rb +7 -15
- data/lib/bcdice/game_system/KurayamiCrying.rb +142 -3
- data/lib/bcdice/game_system/LiveraDoll.rb +254 -304
- data/lib/bcdice/game_system/LogHorizon.rb +10 -7
- data/lib/bcdice/game_system/MagicaLogia_SimplifiedChinese.rb +66 -0
- data/lib/bcdice/game_system/MeikyuDays.rb +10 -8
- data/lib/bcdice/game_system/MeikyuKingdom.rb +26 -26
- data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +4 -3
- data/lib/bcdice/game_system/MetalHead.rb +12 -22
- data/lib/bcdice/game_system/MetalHeadExtream.rb +5 -5
- data/lib/bcdice/game_system/MonotoneMuseum.rb +8 -6
- data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +4 -4
- data/lib/bcdice/game_system/Nechronica.rb +63 -90
- data/lib/bcdice/game_system/NinjaSlayer.rb +6 -7
- data/lib/bcdice/game_system/NjslyrBattle.rb +8 -11
- data/lib/bcdice/game_system/OneWayHeroics.rb +1 -1
- data/lib/bcdice/game_system/Paradiso.rb +1 -1
- data/lib/bcdice/game_system/ParasiteBlood.rb +1 -1
- data/lib/bcdice/game_system/Peekaboo.rb +4 -9
- data/lib/bcdice/game_system/Pendragon.rb +7 -7
- data/lib/bcdice/game_system/PersonaO.rb +86 -0
- data/lib/bcdice/game_system/PhantasmAdventure.rb +8 -8
- data/lib/bcdice/game_system/Postman.rb +1 -1
- data/lib/bcdice/game_system/PulpCthulhu.rb +1 -1
- data/lib/bcdice/game_system/Raisondetre.rb +2 -2
- data/lib/bcdice/game_system/Revulture.rb +123 -0
- data/lib/bcdice/game_system/RuneQuest.rb +8 -8
- data/lib/bcdice/game_system/Ryutama.rb +1 -1
- data/lib/bcdice/game_system/SRS.rb +17 -16
- data/lib/bcdice/game_system/SamsaraBallad.rb +38 -11
- data/lib/bcdice/game_system/Satasupe.rb +32 -32
- data/lib/bcdice/game_system/ScreamHighSchool.rb +5 -5
- data/lib/bcdice/game_system/SharedFantasia.rb +19 -23
- data/lib/bcdice/game_system/ShinobiGami.rb +14 -6
- data/lib/bcdice/game_system/Skynauts.rb +103 -142
- data/lib/bcdice/game_system/SkynautsBouken.rb +228 -0
- data/lib/bcdice/game_system/StarryDolls.rb +318 -0
- data/lib/bcdice/game_system/SteamPunkers.rb +25 -7
- data/lib/bcdice/game_system/StellarKnights.rb +85 -706
- data/lib/bcdice/game_system/StellarKnights_Korean.rb +79 -0
- data/lib/bcdice/game_system/{SterileLife.rb → StellarLife.rb} +162 -226
- data/lib/bcdice/game_system/StratoShout.rb +8 -16
- data/lib/bcdice/game_system/Strave.rb +1 -1
- data/lib/bcdice/game_system/SwordWorld.rb +22 -9
- data/lib/bcdice/game_system/SwordWorld2_0.rb +22 -7
- data/lib/bcdice/game_system/SwordWorld2_5.rb +8 -2
- data/lib/bcdice/game_system/TalesFromTheLoop.rb +83 -0
- data/lib/bcdice/game_system/TherapieSein.rb +1 -1
- data/lib/bcdice/game_system/TokumeiTenkousei.rb +4 -3
- data/lib/bcdice/game_system/TokyoGhostResearch.rb +1 -1
- data/lib/bcdice/game_system/TorgEternity.rb +2 -2
- data/lib/bcdice/game_system/ToshiakiHolyGrailWar.rb +92 -0
- data/lib/bcdice/game_system/TrinitySeven.rb +279 -280
- data/lib/bcdice/game_system/TunnelsAndTrolls.rb +1 -1
- data/lib/bcdice/game_system/Utakaze.rb +53 -48
- data/lib/bcdice/game_system/Villaciel.rb +1 -1
- data/lib/bcdice/game_system/WARPS.rb +11 -9
- data/lib/bcdice/game_system/WaresBlade.rb +4 -9
- data/lib/bcdice/game_system/Warhammer.rb +15 -6
- data/lib/bcdice/game_system/Warhammer4.rb +15 -11
- data/lib/bcdice/game_system/WitchQuest.rb +1 -1
- data/lib/bcdice/game_system/YankeeYogSothoth.rb +4 -9
- data/lib/bcdice/game_system/YearZeroEngine.rb +40 -19
- data/lib/bcdice/game_system/Yggdrasill.rb +1 -1
- data/lib/bcdice/game_system/ZettaiReido.rb +20 -25
- data/lib/bcdice/game_system/beginning_idol/accessories_table.rb +31 -0
- data/lib/bcdice/game_system/beginning_idol/bad_status_table.rb +43 -0
- data/lib/bcdice/game_system/beginning_idol/chain_d66_table.rb +29 -0
- data/lib/bcdice/game_system/beginning_idol/chain_table.rb +37 -0
- data/lib/bcdice/game_system/beginning_idol/costume_table.rb +37 -0
- data/lib/bcdice/game_system/beginning_idol/d6_twice_table.rb +36 -0
- data/lib/bcdice/game_system/beginning_idol/item_table.rb +51 -0
- data/lib/bcdice/game_system/beginning_idol/my_skill_name_table.rb +44 -0
- data/lib/bcdice/game_system/beginning_idol/random_event_table.rb +31 -0
- data/lib/bcdice/game_system/beginning_idol/skill_table.rb +63 -0
- data/lib/bcdice/game_system/beginning_idol/table.rb +193 -0
- data/lib/bcdice/game_system/beginning_idol/with_abnormality.rb +74 -0
- data/lib/bcdice/game_system/beginning_idol/work_table.rb +57 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +1 -1
- data/lib/bcdice/game_system/one_way_heroics/random_event_table.rb +4 -4
- data/lib/bcdice/game_system/sword_world/rating_parsed.rb +50 -7
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +148 -107
- data/lib/bcdice/game_system/sword_world/transcendent_test.rb +26 -8
- data/lib/bcdice/game_system.rb +18 -1
- data/lib/bcdice/repl.rb +1 -1
- data/lib/bcdice/result.rb +26 -0
- data/lib/bcdice/version.rb +1 -1
- metadata +48 -6
@@ -0,0 +1,244 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bcdice/dice_table/table'
|
4
|
+
require 'bcdice/dice_table/d66_table'
|
5
|
+
require 'bcdice/arithmetic'
|
6
|
+
require 'bcdice/command/parser'
|
7
|
+
|
8
|
+
module BCDice
|
9
|
+
module GameSystem
|
10
|
+
class Bakenokawa < Base
|
11
|
+
# ゲームシステムの識別子
|
12
|
+
ID = 'Bakenokawa'
|
13
|
+
|
14
|
+
# ゲームシステム名
|
15
|
+
NAME = 'バケノカワ'
|
16
|
+
|
17
|
+
# ゲームシステム名の読みがな
|
18
|
+
#
|
19
|
+
# 「ゲームシステム名の読みがなの設定方法」(docs/dicebot_sort_key.md)を参考にして
|
20
|
+
# 設定してください
|
21
|
+
SORT_KEY = 'はけのかわ'
|
22
|
+
|
23
|
+
# ダイスボットの使い方
|
24
|
+
HELP_MESSAGE = <<~MESSAGETEXT
|
25
|
+
・行為判定
|
26
|
+
xBKy@z
|
27
|
+
x:振るダイスの数(省略可、省略した場合は2)
|
28
|
+
y:振るダイスの面数
|
29
|
+
z:スペシャル値(@ごと省略可、省略した場合は12)
|
30
|
+
(例)BK10
|
31
|
+
4BK6
|
32
|
+
2BK6@10
|
33
|
+
|
34
|
+
・各種表
|
35
|
+
今の関係表 NRT
|
36
|
+
カイブツ時代からの因縁表 KKT
|
37
|
+
調査演出表
|
38
|
+
カイブツ RTK
|
39
|
+
バケノカワ RTB
|
40
|
+
コラボテーマ表
|
41
|
+
カイブツ CTK
|
42
|
+
バケノカワ CTB
|
43
|
+
ファンブル表 FT
|
44
|
+
MESSAGETEXT
|
45
|
+
|
46
|
+
def initialize(command)
|
47
|
+
super(command)
|
48
|
+
@sort_barabara_dice = true
|
49
|
+
@d66_sort_type = D66SortType::ASC
|
50
|
+
end
|
51
|
+
|
52
|
+
def eval_game_system_specific_command(command)
|
53
|
+
return check_action(command) || roll_tables(command, TABLES)
|
54
|
+
end
|
55
|
+
|
56
|
+
def check_action(command)
|
57
|
+
parser = Command::Parser.new("BK", round_type: RoundType::FLOOR).enable_critical.enable_prefix_number.has_suffix_number
|
58
|
+
parsed = parser.parse(command)
|
59
|
+
return nil if parsed.nil?
|
60
|
+
|
61
|
+
target = 4
|
62
|
+
dice_cnt = parsed.prefix_number || 2
|
63
|
+
dice_faces = parsed.suffix_number
|
64
|
+
special_target = parsed.critical || 12
|
65
|
+
|
66
|
+
debug("dice_faces", dice_faces)
|
67
|
+
debug("dice_cnt", dice_cnt)
|
68
|
+
debug("special_target", special_target)
|
69
|
+
|
70
|
+
dice_arr = @randomizer.roll_barabara(dice_cnt, dice_faces).sort
|
71
|
+
dice_str = dice_arr.join(",")
|
72
|
+
dice_sum = dice_arr.sum
|
73
|
+
has_special = dice_sum >= special_target
|
74
|
+
has_fumble = dice_sum <= 2
|
75
|
+
result = dice_arr.count { |x| x >= target } >= 1
|
76
|
+
|
77
|
+
Result.new.tap do |r|
|
78
|
+
r.text = "(#{dice_cnt}B#{dice_faces}>=#{target}) > [#{dice_str}] > #{dice_sum} > #{result ? '成功' : '失敗'}#{has_special ? '(スペシャル)' : ''}#{has_fumble ? '(ファンブル)' : ''}"
|
79
|
+
r.critical = has_special
|
80
|
+
r.fumble = has_fumble
|
81
|
+
r.success = result
|
82
|
+
r.failure = !r.success?
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
TABLES = {
|
87
|
+
'NRT' => DiceTable::D66Table.new(
|
88
|
+
'今の関係表',
|
89
|
+
D66SortType::ASC,
|
90
|
+
{
|
91
|
+
11 => 'バケノカワ同士が親戚だった',
|
92
|
+
12 => '仲のいい職場の同僚',
|
93
|
+
13 => '仕事のことで助けてもらったことがある',
|
94
|
+
14 => '人間社会のことを教え合っている',
|
95
|
+
15 => '施設同士がよくコラボする',
|
96
|
+
16 => '街のお店に二人で出かける仲',
|
97
|
+
22 => 'どうにもウマが合わずに喧嘩ばかりしている',
|
98
|
+
23 => 'そのバケノカワを羨ましいと思っていた',
|
99
|
+
24 => 'バケノカワに関する苦労を聞いたことがある',
|
100
|
+
25 => 'バケノカワとしての生活圏が近い',
|
101
|
+
26 => 'バケノカワ同士が知り合いだった',
|
102
|
+
33 => 'あんな人間になりたいと憧れを覚えた',
|
103
|
+
34 => '友人として色々な悩みを共に解決してきた',
|
104
|
+
35 => '放っておけないところがあると思っている',
|
105
|
+
36 => 'いつも迷惑をかけて悪いと思っている',
|
106
|
+
44 => '毎朝挨拶をするようなご近所さん/寮の部屋が隣',
|
107
|
+
45 => '何か悩んでいそうな顔が気になった',
|
108
|
+
46 => '何かと仕事関係で助けてもらい、世話になっている',
|
109
|
+
55 => '立ち振る舞いが人間らしくて羨ましい',
|
110
|
+
56 => 'ワンダーランドでの振る舞いや仕事ぶりに一目置いている',
|
111
|
+
66 => 'そのバケノカワを見ると懐かしさを覚える',
|
112
|
+
}
|
113
|
+
),
|
114
|
+
'KKT' => DiceTable::D66Table.new(
|
115
|
+
'カイブツ時代からの因縁表',
|
116
|
+
D66SortType::ASC,
|
117
|
+
{
|
118
|
+
11 => '一緒の牢獄に捕まっていたことがある',
|
119
|
+
12 => '地下の国で一緒に遊んでいたことがある',
|
120
|
+
13 => '地上に出て人間を楽しませる夢を語り合った',
|
121
|
+
14 => '一緒に人間社会を学ぶ訓練を受けた',
|
122
|
+
15 => '生まれた時からずっと一緒だった',
|
123
|
+
16 => '時々喧嘩をし合うような仲だった',
|
124
|
+
22 => '幼少期に育ててもらった恩がある',
|
125
|
+
23 => '昔助けてもらった時の借りがある',
|
126
|
+
24 => '思い出せないぐらい昔に、助けてもらった……気がする',
|
127
|
+
25 => '一緒に地上で人間を楽しませようと約束した',
|
128
|
+
26 => '人間に対する憧れを語った',
|
129
|
+
33 => 'カイブツ時代、一方的に憧れを抱いていた',
|
130
|
+
34 => '人間のまね事を一緒にしていた',
|
131
|
+
35 => '少しの間、一緒に暮らしていたことがある',
|
132
|
+
36 => '一緒にお茶会をした仲',
|
133
|
+
44 => '同じ親のもとで育った',
|
134
|
+
45 => 'カイブツ時代に貸しがあって、まだ返してもらってない',
|
135
|
+
46 => '何かと競い合う、ライバル同士だった',
|
136
|
+
55 => '戦いを挑み、ボコボコにされた',
|
137
|
+
56 => '一緒に退屈を紛らわすために色々悪だくみしていた',
|
138
|
+
66 => 'バケノカワを貰った後にやりたいことを語ってもらった覚えがある',
|
139
|
+
}
|
140
|
+
),
|
141
|
+
'RTK' => DiceTable::Table.new(
|
142
|
+
'調査演出表 カイブツ',
|
143
|
+
'1D10',
|
144
|
+
[
|
145
|
+
'カイブツとして街に潜み、チェインNPCの周りを調べて回った',
|
146
|
+
'カイブツとしての力を使い、チェインNPCを尾行して好みを調べた',
|
147
|
+
'人間には潜入できないルートを使って、チェインNPCの周りを調べた',
|
148
|
+
'人間として調べてみようとしたが、カイブツとしての特徴が出て困った',
|
149
|
+
'カイブツとしての特徴を調査に活かし、調べ上げた',
|
150
|
+
'魔法の鏡に問いかけて、答えを貰った',
|
151
|
+
'チェインNPCの痕跡から、魔法の力を使って過去を辿った',
|
152
|
+
'仲間のカイブツたちと一緒に、街に繰り出してドタバタ劇を繰り広げながら情報を集めた',
|
153
|
+
'小さなカイブツたちに、気付かれないようにチェインNPCを調べてもらった',
|
154
|
+
'魔女のカイブツに頼んで、調査に便利な薬を作ってもらった,'
|
155
|
+
]
|
156
|
+
),
|
157
|
+
'RTB' => DiceTable::Table.new(
|
158
|
+
'調査演出表 バケノカワ',
|
159
|
+
'1D10',
|
160
|
+
[
|
161
|
+
'人間の友人を頼ってチェインNPCの噂話を聞く',
|
162
|
+
'人間の街に行ってチェインNPCのことを聞いて回る',
|
163
|
+
'チェインPCに話を聞いて、その子の特徴から好みを推察する',
|
164
|
+
'チェインPCと一緒に、チェインNPCの周囲を聞き込みして回った',
|
165
|
+
'人間として、情報通の人間が集まる場所に向かい、そこでいろいろな話を聞いて回った',
|
166
|
+
'ネットを利用して、チェインNPCの痕跡がないか調べてみた',
|
167
|
+
'チェインNPCがよく行く場所を掴み、そこで情報収集をした',
|
168
|
+
'実は、チェインNPCは自分のバケノカワとして会ったことがあり、そのときのことを思い出した',
|
169
|
+
'実は、チェインNPCはお客様として自分の担当施設に来たことがあり、そのときの印象を思い出した',
|
170
|
+
]
|
171
|
+
),
|
172
|
+
'CTK' => DiceTable::D66Table.new(
|
173
|
+
'コラボテーマ表 カイブツ',
|
174
|
+
D66SortType::ASC,
|
175
|
+
{
|
176
|
+
11 => '自分とコラボ相手の「カイブツとしての姿」を使ったド派手なコラボ',
|
177
|
+
12 => '自分の特徴を使ったコラボ',
|
178
|
+
13 => 'コラボ相手の特徴を使ったコラボ',
|
179
|
+
14 => '自分とコラボ相手の特徴を活かすコラボ',
|
180
|
+
15 => '自分の施設とコラボ相手の特徴を合わせたコラボ',
|
181
|
+
16 => 'コラボ相手の施設と自分の特徴を合わせたコラボ',
|
182
|
+
22 => '自分とコラボ相手の「カイブツとしての力」を使ったコラボ',
|
183
|
+
23 => '自分とコラボ相手のパビリオンを活かすコラボ',
|
184
|
+
24 => '自分のカイブツとしての力を使ったコラボ',
|
185
|
+
25 => '相手のカイブツとしての力を使ったコラボ',
|
186
|
+
26 => '自分がカイブツとして優れているところを、コラボ相手に聞いてヒントにする',
|
187
|
+
33 => 'カイブツとしての姿をキャラクターグッズとして売り出すコラボ',
|
188
|
+
34 => '魔法の力を演出に使った、キラキラのコラボ',
|
189
|
+
35 => '魔法の道具を使った、お客様を驚かせるようなコラボ',
|
190
|
+
36 => '童話の世界をくっつけて、ちぐはぐな感じを楽しんでもらう',
|
191
|
+
44 => 'パビリオンの仲間たちを集めたステージを開催',
|
192
|
+
45 => 'カイブツとしての姿をあえて晒し、それを「演出」に組み込む',
|
193
|
+
46 => '自分たちの力を「演出」として使ったコラボ',
|
194
|
+
55 => '魔法の力がかかったお土産を持たせるコラボ',
|
195
|
+
56 => '不思議な演出がいっぱいのコラボ',
|
196
|
+
66 => '自分たち以外のカイブツも呼んだ、賑やかなコラボ',
|
197
|
+
}
|
198
|
+
),
|
199
|
+
'CTB' => DiceTable::D66Table.new(
|
200
|
+
'コラボテーマ表 バケノカワ',
|
201
|
+
D66SortType::ASC,
|
202
|
+
{
|
203
|
+
11 => 'バケノカワとして生活するうちに覚えた、「楽しかったこと」をやってみる',
|
204
|
+
12 => 'コラボ相手の施設におじゃまするコラボ',
|
205
|
+
13 => '自分の施設にコラボ相手を呼ぶ',
|
206
|
+
14 => '自分とコラボ相手の施設にお土産を用意する',
|
207
|
+
15 => 'コラボ相手の施設の要素を使う',
|
208
|
+
16 => '自分の施設の要素をコラボ相手の施設に贈る',
|
209
|
+
22 => 'バケノカワ生活の中で気付いた、「人間は面白い」と思えたことをやる',
|
210
|
+
23 => '自分とコラボ相手の技能で園全体を盛り上げる',
|
211
|
+
24 => '自分の技能をコラボ相手の施設に活かす',
|
212
|
+
25 => 'パートナーの技能を自分の施設に活かす',
|
213
|
+
26 => '自分のカバーパーソナルを活かすコラボ',
|
214
|
+
33 => '自分だけではできないことをコラボ相手と相談する',
|
215
|
+
34 => 'パートナーのカバーパーソナルを活かすコラボ',
|
216
|
+
35 => '二つの施設を合わせたような施設を限定オープン',
|
217
|
+
36 => 'お客様の笑顔を思い出し、そうなるように二人で努力する',
|
218
|
+
44 => '二つの施設を繋げる園内バスを用意する',
|
219
|
+
45 => 'お客様に楽しんでもらえる演出を二人で考える',
|
220
|
+
46 => 'お客様が好みそうなお土産を二人で考える',
|
221
|
+
55 => '人間の友達に、「何が楽しいのか」を改めて聞く',
|
222
|
+
56 => 'バケノカワの伝手を使って、人間の友達に話を聞く',
|
223
|
+
66 => 'ワンダーランドのみんなに手伝ってもらう豪華なコラボ',
|
224
|
+
}
|
225
|
+
),
|
226
|
+
'FT' => DiceTable::Table.new(
|
227
|
+
'ファンブル表',
|
228
|
+
'1D6',
|
229
|
+
[
|
230
|
+
'「あれ?”自分”は一体何者だったかな?」カバーパーソナルを1つ選んで失う',
|
231
|
+
'ふとした瞬間に、楽しい感情に対して懐疑的になってしまう。ワンダートークンを1個選んで失う',
|
232
|
+
'せっかく用意した道具を壊してしまう。セットしていたサプライズカードを1枚選んで破棄する',
|
233
|
+
'バケノカワの記憶が思い出される。カバーパーソナルとそれに付随するパーソナル技能を1つずつ獲得する',
|
234
|
+
'カイブツとしての自分が前面に出てしまう。次に行う判定の間、すべての技能を修得していないものとして扱う',
|
235
|
+
'失敗してしまったが、それがお客様にウケた。ワンダートークンを1個獲得する',
|
236
|
+
]
|
237
|
+
),
|
238
|
+
}.freeze
|
239
|
+
|
240
|
+
# ダイスボットで使用するコマンドを配列で列挙する
|
241
|
+
register_prefix('\d*BK', TABLES.keys)
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
@@ -26,7 +26,7 @@ module BCDice
|
|
26
26
|
セット数が1以上の時はセット数も表示し、攻撃判定の場合は命中部位も表示します。
|
27
27
|
INFO_MESSAGE_TEXT
|
28
28
|
|
29
|
-
register_prefix('\d+BK', '\d+BA', '\d+BKC
|
29
|
+
register_prefix('\d+BK', '\d+BA', '\d+BKC', '\d+BAC', '\d+R6')
|
30
30
|
|
31
31
|
def initialize(command)
|
32
32
|
super(command)
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'bcdice/format'
|
4
|
+
require 'bcdice/command/parser'
|
3
5
|
require 'bcdice/dice_table/table'
|
4
6
|
require 'bcdice/dice_table/range_table'
|
5
7
|
|
@@ -26,24 +28,45 @@ module BCDice
|
|
26
28
|
正面からダメージ3の攻撃を技能ベース2目標値4で1回判定
|
27
29
|
例)2BT3RL+5>=8
|
28
30
|
右下半身にダメージ3の攻撃を技能ベース5目標値8で2回判定
|
29
|
-
ミサイルによるダメージは BT(ダメージ)
|
31
|
+
ミサイルによるダメージは BT(ダメージ) の代わりに SRM2/4/6, LRM5/10/15/20 を指定
|
30
32
|
例)3SRM6LU+5>=8
|
31
33
|
左上半身にSRM6連を技能ベース5目標値8で3回判定
|
34
|
+
BT(ダメージ) の代わりに PPC を指定するとダメージ10で判定
|
35
|
+
例)2PPCR+3>=10
|
36
|
+
右側からPPC(ダメージ10)による攻撃を技能ベース3目標値10で2回判定
|
32
37
|
・CT:致命的命中表
|
33
38
|
・DW:転倒後の向き表
|
34
|
-
・CDx
|
39
|
+
・CDx:メック戦士意識維持ロール。ダメージ値x(1〜6)で判定 例)CD3
|
35
40
|
MESSAGETEXT
|
36
41
|
|
37
|
-
register_prefix('\d*SRM
|
42
|
+
register_prefix('\d*SRM', '\d*LRM', '\d*BT', '\d*PPC', 'CT', 'DW', 'CD')
|
38
43
|
|
39
44
|
# 致命的命中が発生しない上限値
|
40
45
|
NO_CRITICAL_HIT_LIMIT = 7
|
41
46
|
|
47
|
+
# @return [Command::Parser] PPCコマンドの構文解析器
|
48
|
+
def self.ppc_parser
|
49
|
+
return @ppc_parser if @ppc_parser
|
50
|
+
|
51
|
+
@ppc_parser = Command::Parser.new(/PPC(?:[LCR][LU]?)?/, round_type: RoundType::FLOOR)
|
52
|
+
@ppc_parser.enable_prefix_number
|
53
|
+
@ppc_parser.restrict_cmp_op_to(:>=)
|
54
|
+
|
55
|
+
@ppc_parser
|
56
|
+
end
|
57
|
+
|
58
|
+
# @return [Command::Parser] PPCコマンドの構文解析器
|
59
|
+
def ppc_parser
|
60
|
+
self.class.ppc_parser
|
61
|
+
end
|
62
|
+
|
42
63
|
def eval_game_system_specific_command(command)
|
43
64
|
result = roll_tables(command, TABLES)
|
44
65
|
return result if result
|
45
66
|
|
46
|
-
|
67
|
+
if (ppc_parse_result = ppc_parser.parse(command))
|
68
|
+
return execute_ppc(ppc_parse_result)
|
69
|
+
end
|
47
70
|
|
48
71
|
count = 1
|
49
72
|
if command =~ /^(\d+)(.+)/
|
@@ -55,9 +78,9 @@ module BCDice
|
|
55
78
|
debug('executeCommandCatched command', command)
|
56
79
|
|
57
80
|
case command
|
58
|
-
when
|
81
|
+
when /\ACD([1-6])\z/
|
59
82
|
damage = Regexp.last_match(1).to_i
|
60
|
-
return
|
83
|
+
return consciousness_roll(damage)
|
61
84
|
when /^((S|L)RM\d+)(.+)/
|
62
85
|
tail = Regexp.last_match(3)
|
63
86
|
type = Regexp.last_match(1)
|
@@ -94,7 +117,7 @@ module BCDice
|
|
94
117
|
LRM_LIMIT = 5
|
95
118
|
|
96
119
|
def getHitResult(count, damageFunc, tail)
|
97
|
-
m =
|
120
|
+
m = /\A([LCR][LU]?)?(\+\d+)?>=(\d+)/.match(tail)
|
98
121
|
return nil unless m
|
99
122
|
|
100
123
|
side = m[1] || 'C'
|
@@ -105,7 +128,7 @@ module BCDice
|
|
105
128
|
|
106
129
|
partTable = HitPart::TABLES[side]
|
107
130
|
|
108
|
-
|
131
|
+
resultLines = []
|
109
132
|
damages = {}
|
110
133
|
hitCount = 0
|
111
134
|
|
@@ -117,15 +140,24 @@ module BCDice
|
|
117
140
|
damages, damageText = getDamages(damageFunc, partTable, damages)
|
118
141
|
hitResult += damageText
|
119
142
|
end
|
120
|
-
|
143
|
+
resultLines << hitResult
|
121
144
|
end
|
122
145
|
|
123
|
-
|
146
|
+
# 命中したか?
|
147
|
+
hit = hitCount > 0
|
124
148
|
|
125
|
-
|
126
|
-
|
149
|
+
hitCountText = " > #{hitCount}回命中"
|
150
|
+
hitDetails =
|
151
|
+
if hit
|
152
|
+
"#{hitCountText} 命中箇所:#{getTotalDamage(damages)}"
|
153
|
+
else
|
154
|
+
hitCountText
|
155
|
+
end
|
156
|
+
resultLines.push(hitDetails)
|
127
157
|
|
128
|
-
|
158
|
+
resultText = resultLines.join("\n")
|
159
|
+
|
160
|
+
return hit ? Result.success(resultText) : Result.failure(resultText)
|
129
161
|
end
|
130
162
|
|
131
163
|
def getBaseValue(baseString)
|
@@ -272,26 +304,75 @@ module BCDice
|
|
272
304
|
return result_parts.join(' > '), hit_part.name, criticalText
|
273
305
|
end
|
274
306
|
|
275
|
-
|
276
|
-
|
277
|
-
|
307
|
+
# メック戦士意識維持ロールを行う
|
308
|
+
#
|
309
|
+
# damageが6の場合は死亡。
|
310
|
+
# damageが5以下の場合は、2d6の結果が意識維持表の値以上かの成功判定。
|
311
|
+
#
|
312
|
+
# @param damage [Integer] メック戦士へのダメージ(1〜6)
|
313
|
+
# @return [Result]
|
314
|
+
# @see 「BattleTech: A Game of Armored Combat」ルールブックp. 44
|
315
|
+
def consciousness_roll(damage)
|
316
|
+
unless (1..6).include?(damage)
|
317
|
+
return nil
|
318
|
+
end
|
319
|
+
|
320
|
+
command = "CD#{damage}"
|
321
|
+
|
322
|
+
if damage == 6
|
323
|
+
return Result.fumble("#{command} > 死亡")
|
278
324
|
end
|
279
325
|
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
326
|
+
consciousness_table = {
|
327
|
+
1 => 3,
|
328
|
+
2 => 5,
|
329
|
+
3 => 7,
|
330
|
+
4 => 10,
|
331
|
+
5 => 11,
|
332
|
+
}
|
333
|
+
|
334
|
+
target = consciousness_table[damage]
|
335
|
+
expr = "(2D6>=#{target})"
|
336
|
+
|
337
|
+
values = @randomizer.roll_barabara(2, 6)
|
338
|
+
sum = values.sum
|
339
|
+
values_str = values.join(",")
|
340
|
+
sum_and_values = "#{sum}[#{values_str}]"
|
341
|
+
|
342
|
+
success = sum >= target
|
343
|
+
result = success ? "成功" : "失敗"
|
344
|
+
|
345
|
+
parts = [
|
346
|
+
command,
|
347
|
+
expr,
|
348
|
+
sum_and_values,
|
349
|
+
sum,
|
350
|
+
result,
|
351
|
+
]
|
352
|
+
text = parts.join(" > ")
|
285
353
|
|
286
|
-
|
354
|
+
return success ? Result.success(text) : Result.failure(text)
|
355
|
+
end
|
287
356
|
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
357
|
+
# PPCコマンドを実行する
|
358
|
+
# @param parse_result [Command::Parsed] PPCコマンドの構文解析結果
|
359
|
+
# @return [Result, nil]
|
360
|
+
def execute_ppc(parse_result)
|
361
|
+
count = parse_result.prefix_number || 1
|
362
|
+
|
363
|
+
# getHitResult() の引数tailの形に合わせる
|
364
|
+
# TODO: 攻撃を表すクラスに変える
|
365
|
+
|
366
|
+
# "PPC" 以降の部位指定
|
367
|
+
side = parse_result.command[3..-1]
|
368
|
+
|
369
|
+
modifier = Format.modifier(parse_result.modify_number)
|
370
|
+
target = parse_result.target_number
|
371
|
+
|
372
|
+
tail = "#{side}#{modifier}>=#{target}"
|
293
373
|
|
294
|
-
|
374
|
+
# ダメージ10固定で命中判定を行う
|
375
|
+
return getHitResult(count, lambda { 10 }, tail)
|
295
376
|
end
|
296
377
|
|
297
378
|
# 表の集合
|
@@ -82,16 +82,34 @@ module BCDice
|
|
82
82
|
|
83
83
|
dice_list_org_str = "[#{dice_list_org.join(',')}]" if dice_list_filtered != dice_list_org
|
84
84
|
|
85
|
+
result = result_compare(total)
|
86
|
+
result.critical = critical?
|
87
|
+
result.fumble = fumble?
|
88
|
+
|
89
|
+
dice_status =
|
90
|
+
if result.fumble?
|
91
|
+
"ファンブル"
|
92
|
+
elsif result.critical?
|
93
|
+
"クリティカル"
|
94
|
+
end
|
95
|
+
result_str =
|
96
|
+
if result.success?
|
97
|
+
"成功"
|
98
|
+
elsif result.failure?
|
99
|
+
"失敗"
|
100
|
+
end
|
101
|
+
|
85
102
|
sequence = [
|
86
103
|
command_expr(),
|
87
104
|
dice_list_org_str,
|
88
105
|
interim_expr(dice_list_filtered),
|
89
|
-
dice_status
|
106
|
+
dice_status,
|
90
107
|
total.to_s,
|
91
|
-
|
108
|
+
result_str
|
92
109
|
].compact
|
110
|
+
result.text = sequence.join(" > ")
|
93
111
|
|
94
|
-
return
|
112
|
+
return result
|
95
113
|
end
|
96
114
|
|
97
115
|
private
|
@@ -187,14 +205,6 @@ module BCDice
|
|
187
205
|
return expr
|
188
206
|
end
|
189
207
|
|
190
|
-
def dice_status
|
191
|
-
if fumble?
|
192
|
-
"ファンブル"
|
193
|
-
elsif critical?
|
194
|
-
"クリティカル"
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
208
|
def fumble?
|
199
209
|
@dice_total <= @fumble
|
200
210
|
end
|
@@ -220,7 +230,13 @@ module BCDice
|
|
220
230
|
|
221
231
|
def result_compare(total)
|
222
232
|
if @cmp_op
|
223
|
-
total.send(@cmp_op, @target_number)
|
233
|
+
if total.send(@cmp_op, @target_number)
|
234
|
+
Result.success(nil)
|
235
|
+
else
|
236
|
+
Result.failure(nil)
|
237
|
+
end
|
238
|
+
else
|
239
|
+
Result.new
|
224
240
|
end
|
225
241
|
end
|
226
242
|
end
|