bcdice 3.3.0 → 3.6.0
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 +4 -4
- data/CHANGELOG.md +158 -74
- data/README.md +2 -1
- 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/FutariSousa/ja_jp.yml +705 -9
- data/i18n/KillDeathBusiness/ja_jp.yml +2 -2
- data/i18n/MagicaLogia/ja_jp.yml +1 -1
- data/i18n/MonotoneMuseum/ko_kr.yml +526 -53
- data/i18n/SwordWorld/ja_jp.yml +6 -0
- data/i18n/SwordWorld2_0/ja_jp.yml +37 -0
- data/i18n/SwordWorld2_5/ja_jp.yml +57 -0
- data/lib/bcdice/common_command/add_dice/node.rb +28 -4
- data/lib/bcdice/common_command/add_dice/parser.rb +149 -85
- 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_left_range_table.rb +29 -0
- data/lib/bcdice/dice_table/d66_parity_table.rb +8 -0
- data/lib/bcdice/dice_table/d66_table.rb +5 -1
- data/lib/bcdice/dice_table.rb +1 -0
- data/lib/bcdice/game_system/AngelGear.rb +9 -4
- data/lib/bcdice/game_system/Aoharubaan.rb +91 -0
- data/lib/bcdice/game_system/AssaultEngine.rb +91 -0
- data/lib/bcdice/game_system/Avandner.rb +1 -2
- data/lib/bcdice/game_system/Ayabito.rb +229 -0
- data/lib/bcdice/game_system/BadLife.rb +264 -289
- data/lib/bcdice/game_system/Bakenokawa.rb +244 -0
- data/lib/bcdice/game_system/BattleTech.rb +1 -1
- data/lib/bcdice/game_system/BeginningIdol.rb +116 -2390
- data/lib/bcdice/game_system/BeginningIdol_Korean.rb +10 -2312
- data/lib/bcdice/game_system/CastleInGray.rb +133 -0
- data/lib/bcdice/game_system/Cthulhu.rb +2 -2
- data/lib/bcdice/game_system/Cthulhu7th.rb +10 -10
- data/lib/bcdice/game_system/Cthulhu_SimplifiedChinese.rb +60 -0
- data/lib/bcdice/game_system/CyberpunkRed.rb +135 -0
- data/lib/bcdice/game_system/DarkDaysDrive.rb +76 -41
- data/lib/bcdice/game_system/DoubleCross.rb +5 -0
- data/lib/bcdice/game_system/Dracurouge.rb +2 -1
- data/lib/bcdice/game_system/Elysion.rb +36 -20
- data/lib/bcdice/game_system/Emoklore.rb +1 -1
- data/lib/bcdice/game_system/FateCoreSystem.rb +117 -0
- data/lib/bcdice/game_system/FutariSousa.rb +48 -4
- data/lib/bcdice/game_system/GranCrest.rb +171 -406
- data/lib/bcdice/game_system/Irisbane.rb +154 -0
- data/lib/bcdice/game_system/Karukami.rb +84 -0
- data/lib/bcdice/game_system/KemonoNoMori.rb +17 -17
- data/lib/bcdice/game_system/KurayamiCrying.rb +1 -1
- data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +4 -4
- data/lib/bcdice/game_system/NeverCloud.rb +19 -8
- data/lib/bcdice/game_system/PersonaO.rb +86 -0
- data/lib/bcdice/game_system/Revulture.rb +2 -2
- data/lib/bcdice/game_system/Shiranui.rb +145 -0
- data/lib/bcdice/game_system/ShuumatsuKikou.rb +298 -0
- data/lib/bcdice/game_system/StarryDolls.rb +318 -0
- data/lib/bcdice/game_system/SteamPunkers.rb +14 -1
- data/lib/bcdice/game_system/StellarKnights.rb +1 -1
- data/lib/bcdice/game_system/{SterileLife.rb → StellarLife.rb} +162 -226
- data/lib/bcdice/game_system/StrangerOfSwordCity.rb +18 -5
- data/lib/bcdice/game_system/SwordWorld.rb +11 -7
- data/lib/bcdice/game_system/SwordWorld2_0.rb +30 -38
- data/lib/bcdice/game_system/SwordWorld2_5.rb +9 -63
- data/lib/bcdice/game_system/TalesFromTheLoop.rb +83 -0
- data/lib/bcdice/game_system/TorgEternity.rb +2 -2
- data/lib/bcdice/game_system/ToshiakiHolyGrailWar.rb +92 -0
- data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +29 -28
- data/lib/bcdice/game_system/YearZeroEngine.rb +40 -19
- 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/cyberpunk_red/tables.rb +530 -0
- data/lib/bcdice/game_system/meikyu_kingdom/tables.rb +1 -1
- data/lib/bcdice/game_system/meikyu_kingdom_basic/table.rb +1 -1
- data/lib/bcdice/game_system/one_way_heroics/random_event_table.rb +4 -4
- data/lib/bcdice/game_system/satasupe/tables.rb +1 -1
- data/lib/bcdice/game_system/sword_world/rating_options.rb +47 -0
- data/lib/bcdice/game_system/sword_world/rating_parsed.rb +40 -45
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +172 -141
- data/lib/bcdice/game_system/sword_world/transcendent_test.rb +14 -10
- data/lib/bcdice/game_system.rb +16 -1
- data/lib/bcdice/randomizer.rb +1 -1
- data/lib/bcdice/version.rb +1 -1
- metadata +45 -5
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
module BCDice
|
|
2
|
+
module GameSystem
|
|
3
|
+
class CastleInGray < Base
|
|
4
|
+
# ゲームシステムの識別子
|
|
5
|
+
ID = "CastleInGray".freeze
|
|
6
|
+
|
|
7
|
+
# ゲームシステム名
|
|
8
|
+
NAME = "灰色城綺譚".freeze
|
|
9
|
+
|
|
10
|
+
# ゲームシステム名の読みがな
|
|
11
|
+
SORT_KEY = "はいいろしようきたん".freeze
|
|
12
|
+
|
|
13
|
+
HELP_MESSAGE = <<~TEXT.freeze
|
|
14
|
+
■ 色占い (BnWm)
|
|
15
|
+
n: 黒
|
|
16
|
+
m: 白
|
|
17
|
+
n, m は1~12の異なる整数
|
|
18
|
+
|
|
19
|
+
例) B12W7
|
|
20
|
+
例) B5W12
|
|
21
|
+
|
|
22
|
+
■ 悪意の渦による占い (MALn)
|
|
23
|
+
n: 悪意の渦
|
|
24
|
+
n は1~12の整数
|
|
25
|
+
|
|
26
|
+
■ その他
|
|
27
|
+
・感情表 ET
|
|
28
|
+
・暗示表(黒) BIT
|
|
29
|
+
・暗示表(白) WIT
|
|
30
|
+
TEXT
|
|
31
|
+
|
|
32
|
+
TABLES = {
|
|
33
|
+
"ET" => DiceTable::Table.new(
|
|
34
|
+
"感情表",
|
|
35
|
+
"1D12",
|
|
36
|
+
[
|
|
37
|
+
"友情(白)/敵視(黒)",
|
|
38
|
+
"恋慕(白)/嫌悪(黒)",
|
|
39
|
+
"信頼(白)/不信(黒)",
|
|
40
|
+
"同情(白)/憐憫(黒)",
|
|
41
|
+
"憧憬(白)/劣等感(黒)",
|
|
42
|
+
"尊敬(白)/蔑視(黒)",
|
|
43
|
+
"忠誠(白)/執着(黒)",
|
|
44
|
+
"有用(白)/邪魔(黒)",
|
|
45
|
+
"許容(白)/罪悪感(黒)",
|
|
46
|
+
"羨望(白)/嫉妬(黒)",
|
|
47
|
+
"共感(白)/拒絶(黒)",
|
|
48
|
+
"愛情(白)/狂信(黒)"
|
|
49
|
+
]
|
|
50
|
+
),
|
|
51
|
+
"BIT" => DiceTable::Table.new(
|
|
52
|
+
"暗示表(黒)",
|
|
53
|
+
"1D12",
|
|
54
|
+
[
|
|
55
|
+
"終わりなき夜に生まれつく者もあり",
|
|
56
|
+
"悪意もて真実を語らば",
|
|
57
|
+
"笑えども笑みはなし",
|
|
58
|
+
"影より抜け出ることあたわじ",
|
|
59
|
+
"心の赴くままに手をとれ",
|
|
60
|
+
"時ならぬ嵐の過ぎ去るを待つ",
|
|
61
|
+
"赦されぬと知るがゆえに",
|
|
62
|
+
"見張りは持ち場を離れる",
|
|
63
|
+
"誰もが盲いたる彷徨い人なり",
|
|
64
|
+
"落ちる日を眺めるがごとく",
|
|
65
|
+
"冷たく雨ぞ降りしきる",
|
|
66
|
+
"今日は笑む花も明日には枯れゆく"
|
|
67
|
+
]
|
|
68
|
+
),
|
|
69
|
+
"WIT" => DiceTable::Table.new(
|
|
70
|
+
"暗示表(白)",
|
|
71
|
+
"1D12",
|
|
72
|
+
[
|
|
73
|
+
"無垢なる者のみが真実を得る",
|
|
74
|
+
"げに慈悲深きは沈黙なり",
|
|
75
|
+
"懐かしき日々は去りぬ",
|
|
76
|
+
"束の間に光さす",
|
|
77
|
+
"迷える者に手を差し伸べよ",
|
|
78
|
+
"嵐の前には静けさがある",
|
|
79
|
+
"どうか責めないで",
|
|
80
|
+
"灯した明かりを絶やさぬように",
|
|
81
|
+
"目を開けて見よ",
|
|
82
|
+
"淑やかに訪れる",
|
|
83
|
+
"今こそ泣け、さもなくば二度と泣くな",
|
|
84
|
+
"時が許す間に薔薇を摘め"
|
|
85
|
+
]
|
|
86
|
+
),
|
|
87
|
+
}.freeze
|
|
88
|
+
|
|
89
|
+
register_prefix('B', 'MAL', TABLES.keys)
|
|
90
|
+
|
|
91
|
+
def eval_game_system_specific_command(command)
|
|
92
|
+
return roll_color(command) || roll_mal(command) || roll_tables(command, TABLES)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def roll_color(command)
|
|
96
|
+
m = /^B(\d{1,2})W(\d{1,2})$/.match(command)
|
|
97
|
+
return nil unless m
|
|
98
|
+
|
|
99
|
+
black = m[1].to_i
|
|
100
|
+
white = m[2].to_i
|
|
101
|
+
return nil unless black.between?(1, 12) && white.between?(1, 12)
|
|
102
|
+
|
|
103
|
+
value = @randomizer.roll_once(12)
|
|
104
|
+
|
|
105
|
+
if black == white
|
|
106
|
+
return color_text(black, white, value, '白と黒は重ねられません')
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
if white > black
|
|
110
|
+
return color_text(black, white, value, black <= value && value < white ? '黒' : '白')
|
|
111
|
+
else
|
|
112
|
+
return color_text(black, white, value, white <= value && value < black ? '白' : '黒')
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def color_text(black, white, value, result)
|
|
117
|
+
return "色占い(黒#{black}白#{white}) > [#{value}] > #{result}"
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def roll_mal(command)
|
|
121
|
+
m = /^MAL(\d{1,2})$/i.match(command)
|
|
122
|
+
return nil unless m
|
|
123
|
+
|
|
124
|
+
mal = m[1].to_i
|
|
125
|
+
return nil unless mal.between?(1, 12)
|
|
126
|
+
|
|
127
|
+
value = @randomizer.roll_once(12)
|
|
128
|
+
result = value <= mal ? '黒' : '白'
|
|
129
|
+
return "悪意の渦(#{mal}) > [#{value}] > #{result}"
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
@@ -193,12 +193,12 @@ module BCDice
|
|
|
193
193
|
end
|
|
194
194
|
|
|
195
195
|
def getRegistResult(command)
|
|
196
|
-
m = /^
|
|
196
|
+
m = /^RESB?(-?\d+)$/i.match(command)
|
|
197
197
|
unless m
|
|
198
198
|
return nil
|
|
199
199
|
end
|
|
200
200
|
|
|
201
|
-
value = m[
|
|
201
|
+
value = m[1].to_i
|
|
202
202
|
target = value * 5 + 50
|
|
203
203
|
|
|
204
204
|
if target < 5
|
|
@@ -64,17 +64,17 @@ module BCDice
|
|
|
64
64
|
combine_roll(command)
|
|
65
65
|
when /^FAR/i
|
|
66
66
|
getFullAutoResult(command)
|
|
67
|
-
when
|
|
67
|
+
when "BMR" # 狂気の発作(リアルタイム)
|
|
68
68
|
roll_bmr_table()
|
|
69
|
-
when
|
|
69
|
+
when "BMS" # 狂気の発作(サマリー)
|
|
70
70
|
roll_bms_table()
|
|
71
|
-
when
|
|
71
|
+
when "FCL" # キャスティング・ロールのプッシュに失敗した場合(小)
|
|
72
72
|
roll_1d8_table("キャスティング・ロール失敗(小)表", FAILED_CASTING_L_TABLE)
|
|
73
|
-
when
|
|
73
|
+
when "FCM" # キャスティング・ロールのプッシュに失敗した場合(大)
|
|
74
74
|
roll_1d8_table("キャスティング・ロール失敗(大)表", FAILED_CASTING_M_TABLE)
|
|
75
|
-
when
|
|
75
|
+
when "PH" # 恐怖症表
|
|
76
76
|
roll_1d100_table("恐怖症表", PHOBIAS_TABLE)
|
|
77
|
-
when
|
|
77
|
+
when "MA" # マニア表
|
|
78
78
|
roll_1d100_table("マニア表", MANIAS_TABLE)
|
|
79
79
|
end
|
|
80
80
|
end
|
|
@@ -105,10 +105,10 @@ module BCDice
|
|
|
105
105
|
|
|
106
106
|
if total == 1
|
|
107
107
|
ResultLevel.new(:critical)
|
|
108
|
-
elsif total <= difficulty
|
|
109
|
-
ResultLevel.new(:success)
|
|
110
108
|
elsif total >= fumble
|
|
111
109
|
ResultLevel.new(:fumble)
|
|
110
|
+
elsif total <= difficulty
|
|
111
|
+
ResultLevel.new(:success)
|
|
112
112
|
else
|
|
113
113
|
ResultLevel.new(:failure)
|
|
114
114
|
end
|
|
@@ -119,14 +119,14 @@ module BCDice
|
|
|
119
119
|
|
|
120
120
|
if total == 1
|
|
121
121
|
ResultLevel.new(:critical)
|
|
122
|
+
elsif total >= fumble
|
|
123
|
+
ResultLevel.new(:fumble)
|
|
122
124
|
elsif total <= (difficulty / 5)
|
|
123
125
|
ResultLevel.new(:extreme_success)
|
|
124
126
|
elsif total <= (difficulty / 2)
|
|
125
127
|
ResultLevel.new(:hard_success)
|
|
126
128
|
elsif total <= difficulty
|
|
127
129
|
ResultLevel.new(:regular_success)
|
|
128
|
-
elsif total >= fumble
|
|
129
|
-
ResultLevel.new(:fumble)
|
|
130
130
|
else
|
|
131
131
|
ResultLevel.new(:failure)
|
|
132
132
|
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "bcdice/game_system/Cthulhu"
|
|
4
|
+
|
|
5
|
+
module BCDice
|
|
6
|
+
module GameSystem
|
|
7
|
+
class Cthulhu_SimplifiedChinese < Cthulhu
|
|
8
|
+
# ゲームシステムの識別子
|
|
9
|
+
ID = 'Cthulhu:SimplifiedChinese'
|
|
10
|
+
|
|
11
|
+
# ゲームシステム名
|
|
12
|
+
NAME = '克苏鲁的呼唤 第六版'
|
|
13
|
+
|
|
14
|
+
# ゲームシステム名の読みがな
|
|
15
|
+
SORT_KEY = '国際化:Simplified Chinese:克苏鲁的呼唤 第六版'
|
|
16
|
+
|
|
17
|
+
# ダイスボットの使い方
|
|
18
|
+
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
|
19
|
+
c=大成功值 / f=大失败值 / s=极难成功
|
|
20
|
+
|
|
21
|
+
1d100<=n c・f・s全部关闭(只进行数值比较判定)
|
|
22
|
+
|
|
23
|
+
・带cfs判定的判定指令
|
|
24
|
+
|
|
25
|
+
CC 掷1d100骰 c=1、f=100
|
|
26
|
+
CCB 同上,c=5、f=96
|
|
27
|
+
|
|
28
|
+
例:CC<=80 (以80技能値进行行为判定。并以1%的标准使用cf的值)
|
|
29
|
+
例:CCB<=55 (以55技能値进行行为判定。并以5%的标准使用cf的值)
|
|
30
|
+
|
|
31
|
+
・关于组合骰
|
|
32
|
+
|
|
33
|
+
CBR(x,y) c=1、f=100
|
|
34
|
+
CBRB(x,y) c=5、f=96
|
|
35
|
+
|
|
36
|
+
・关于对抗骰
|
|
37
|
+
RES(x-y) c=1、f=100
|
|
38
|
+
RESB(x-y) c=5、f=96
|
|
39
|
+
|
|
40
|
+
※故障值判定
|
|
41
|
+
|
|
42
|
+
・CC(x) c=1、f=100
|
|
43
|
+
x=故障值。骰点在x以上并且发生大失败时,会和大失败一起显示(文本为「大失败&故障」)
|
|
44
|
+
没有发生大失败时,与成功或失败无关,文斗都会显示为「故障」(不显示成功或失败的情况下进行覆盖显示)
|
|
45
|
+
|
|
46
|
+
・CCB(x) c=5、f=96
|
|
47
|
+
同上
|
|
48
|
+
|
|
49
|
+
INFO_MESSAGE_TEXT
|
|
50
|
+
|
|
51
|
+
register_prefix_from_super_class()
|
|
52
|
+
|
|
53
|
+
def initialize(command)
|
|
54
|
+
super(command)
|
|
55
|
+
|
|
56
|
+
@locale = :zh_hans
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "bcdice/game_system/cyberpunk_red/tables"
|
|
4
|
+
|
|
5
|
+
module BCDice
|
|
6
|
+
module GameSystem
|
|
7
|
+
class CyberpunkRed < Base
|
|
8
|
+
# ゲームシステムの識別子
|
|
9
|
+
ID = 'CyberpunkRed'
|
|
10
|
+
|
|
11
|
+
# ゲームシステム名
|
|
12
|
+
NAME = 'サイバーパンクRED'
|
|
13
|
+
|
|
14
|
+
# ゲームシステム名の読みがな
|
|
15
|
+
SORT_KEY = 'さいはあはんくれつと'
|
|
16
|
+
|
|
17
|
+
# ダイスボットの使い方
|
|
18
|
+
HELP_MESSAGE = <<~HELP
|
|
19
|
+
・判定 CPx+y>=z
|
|
20
|
+
(x=能力値と技能値の合計、y=修正値、z=難易度 or 受動側 x、y、zは省略可)
|
|
21
|
+
例)CP12 CP10+2>=12 CP7-1 CP8+4 CP7>=12 CP CP>=9
|
|
22
|
+
|
|
23
|
+
各種表
|
|
24
|
+
・致命的損傷表
|
|
25
|
+
FFD :身体への致命的損傷
|
|
26
|
+
HFD :頭部への致命的損傷
|
|
27
|
+
・遭遇表
|
|
28
|
+
NCDT :ナイトシティ(日中)
|
|
29
|
+
NCMT :ナイトシティ(深夜)
|
|
30
|
+
・スクリームシート
|
|
31
|
+
SCSR :スクリームシート(ランダム)
|
|
32
|
+
SCST :スクリームシート分類
|
|
33
|
+
SCSA :ヘッドラインA
|
|
34
|
+
SCSB :ヘッドラインB
|
|
35
|
+
SCSC :ヘッドラインC
|
|
36
|
+
・最寄りの自販機
|
|
37
|
+
VMCR :最寄りの自販機表
|
|
38
|
+
VMCT :自販機タイプ決定表
|
|
39
|
+
VMCE :食品
|
|
40
|
+
VMCF :ファッション
|
|
41
|
+
VMCS :変なもの
|
|
42
|
+
・ボデガの客
|
|
43
|
+
STORE :ボデガの客と店員
|
|
44
|
+
STOREA :店主またはレジ係
|
|
45
|
+
STOREB :変わった客その1
|
|
46
|
+
STOREC :変わった客その2
|
|
47
|
+
HELP
|
|
48
|
+
|
|
49
|
+
# 判定の正規表現
|
|
50
|
+
CP_RE = /^CP(?<ability>\d+)?(?<modifier>[+-]\d+)?(?<target>>=\d+)?/.freeze
|
|
51
|
+
|
|
52
|
+
def initialize(command)
|
|
53
|
+
super(command)
|
|
54
|
+
|
|
55
|
+
@sort_add_dice = false
|
|
56
|
+
@d66_sort_type = D66SortType::NO_SORT
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def eval_game_system_specific_command(command)
|
|
60
|
+
debug("eval_game_system_specific_command begin string", command)
|
|
61
|
+
|
|
62
|
+
cp_roll_result(command) || roll_tables(command, TABLES)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
private_constant :CP_RE
|
|
66
|
+
|
|
67
|
+
def cp_roll_result(command)
|
|
68
|
+
parser = Command::Parser.new('CP', round_type: RoundType::FLOOR)
|
|
69
|
+
.enable_suffix_number
|
|
70
|
+
.restrict_cmp_op_to(nil, :>=)
|
|
71
|
+
parsed = parser.parse(command)
|
|
72
|
+
return nil if parsed.nil?
|
|
73
|
+
|
|
74
|
+
dice_cnt = 1
|
|
75
|
+
dice_face = 10
|
|
76
|
+
modify_number = 0
|
|
77
|
+
total = 0
|
|
78
|
+
|
|
79
|
+
result = Result.new
|
|
80
|
+
|
|
81
|
+
dices = [@randomizer.roll_once(dice_face)]
|
|
82
|
+
total += dices.first
|
|
83
|
+
modify_number += parsed.suffix_number if parsed.suffix_number
|
|
84
|
+
modify_number += parsed.modify_number if parsed.modify_number
|
|
85
|
+
total += modify_number
|
|
86
|
+
|
|
87
|
+
case dices.first
|
|
88
|
+
when 10 # critical
|
|
89
|
+
dices << @randomizer.roll_once(dice_face)
|
|
90
|
+
total += dices.last
|
|
91
|
+
result.critical = true
|
|
92
|
+
when 1 # fumble
|
|
93
|
+
dices << @randomizer.roll_once(dice_face)
|
|
94
|
+
total -= dices.last
|
|
95
|
+
result.fumble = true
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
if parsed.target_number
|
|
99
|
+
if total >= parsed.target_number
|
|
100
|
+
result.success = true
|
|
101
|
+
else
|
|
102
|
+
result.failure = true
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
result.text = "(#{dice_cnt}D#{dice_face}#{Format.modifier(modify_number)}#{parsed.cmp_op}#{parsed.target_number})"
|
|
107
|
+
result.text += ' > '
|
|
108
|
+
result.text += "#{dices.first}[#{dices.first}]#{Format.modifier(modify_number)}"
|
|
109
|
+
result.text += ' > '
|
|
110
|
+
|
|
111
|
+
if result.critical?
|
|
112
|
+
result.text += '決定的成功! > '
|
|
113
|
+
result.text += "#{dices.last}[#{dices.last}] > "
|
|
114
|
+
end
|
|
115
|
+
if result.fumble?
|
|
116
|
+
result.text += '決定的失敗! > '
|
|
117
|
+
result.text += "#{dices.last}[#{dices.last}] > "
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
result.text += total.to_s
|
|
121
|
+
|
|
122
|
+
if result.success?
|
|
123
|
+
result.text += ' > 成功'
|
|
124
|
+
end
|
|
125
|
+
if result.failure?
|
|
126
|
+
result.text += ' > 失敗'
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
return result
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
register_prefix('CP', TABLES.keys)
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
@@ -32,17 +32,13 @@ module BCDice
|
|
|
32
32
|
CT キャンプ表
|
|
33
33
|
KZT 関係属性表
|
|
34
34
|
IA イケメンアクション決定表
|
|
35
|
-
IAA 遠距離
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
IAH 渋い
|
|
43
|
-
IAI 賢い
|
|
44
|
-
IAJ 超自然
|
|
45
|
-
・D66ダイスあり
|
|
35
|
+
IAA 遠距離 IAB 移動 IAC 近距離 IAD 善人 IAE 悪人
|
|
36
|
+
IAF 幼い IAG バカ IAH 渋い IAI 賢い IAJ 超自然
|
|
37
|
+
IAX イケメンアクション決定表 → IA表
|
|
38
|
+
■本格的な戦闘
|
|
39
|
+
CAC センターの行動決定
|
|
40
|
+
DDC 対話ダメージ表
|
|
41
|
+
・D66ダイス昇順
|
|
46
42
|
INFO_MESSAGE_TEXT
|
|
47
43
|
|
|
48
44
|
def initialize(command)
|
|
@@ -69,8 +65,23 @@ module BCDice
|
|
|
69
65
|
|
|
70
66
|
def eval_game_system_specific_command(command)
|
|
71
67
|
roll_tables(command, TABLES) ||
|
|
68
|
+
command_iax(command) ||
|
|
72
69
|
RTT.roll_command(randomizer, command)
|
|
73
70
|
end
|
|
71
|
+
|
|
72
|
+
private
|
|
73
|
+
|
|
74
|
+
def command_iax(command)
|
|
75
|
+
return nil unless command == "IAX"
|
|
76
|
+
|
|
77
|
+
ia = TABLES["IA"].choice(@randomizer.roll_d66(D66SortType::ASC))
|
|
78
|
+
m = ia.body.match(/\(([A-Z]+)\)/)
|
|
79
|
+
return ia unless m
|
|
80
|
+
|
|
81
|
+
ia2 = TABLES[m[1]].choice(@randomizer.roll_once(6))
|
|
82
|
+
return "#{ia} > #{ia2}"
|
|
83
|
+
end
|
|
84
|
+
|
|
74
85
|
RTT = DiceTable::SaiFicSkillTable.new(
|
|
75
86
|
[
|
|
76
87
|
['背景', ['呪い', '絶望', '孤児', '死別', '一般人', '獲物', '憧れ', '友人', '挑戦者', '血縁', '永遠']],
|
|
@@ -277,31 +288,31 @@ module BCDice
|
|
|
277
288
|
"イケメンアクション決定表",
|
|
278
289
|
D66SortType::ASC,
|
|
279
290
|
{
|
|
280
|
-
11 => "遠距離",
|
|
281
|
-
12 => "遠距離",
|
|
282
|
-
13 => "移動",
|
|
283
|
-
14 => "移動",
|
|
284
|
-
15 => "近距離",
|
|
285
|
-
16 => "近距離",
|
|
286
|
-
22 => "善人",
|
|
287
|
-
23 => "善人",
|
|
288
|
-
24 => "悪人",
|
|
289
|
-
25 => "悪人",
|
|
290
|
-
26 => "幼い",
|
|
291
|
-
33 => "幼い",
|
|
292
|
-
34 => "バカ",
|
|
293
|
-
35 => "バカ",
|
|
294
|
-
36 => "渋い",
|
|
295
|
-
44 => "渋い",
|
|
296
|
-
45 => "賢い",
|
|
297
|
-
46 => "賢い",
|
|
298
|
-
55 => "超自然",
|
|
299
|
-
56 => "超自然",
|
|
291
|
+
11 => "遠距離(IAA)",
|
|
292
|
+
12 => "遠距離(IAA)",
|
|
293
|
+
13 => "移動(IAB)",
|
|
294
|
+
14 => "移動(IAB)",
|
|
295
|
+
15 => "近距離(IAC)",
|
|
296
|
+
16 => "近距離(IAC)",
|
|
297
|
+
22 => "善人(IAD)",
|
|
298
|
+
23 => "善人(IAD)",
|
|
299
|
+
24 => "悪人(IAE)",
|
|
300
|
+
25 => "悪人(IAE)",
|
|
301
|
+
26 => "幼い(IAF)",
|
|
302
|
+
33 => "幼い(IAF)",
|
|
303
|
+
34 => "バカ(IAG)",
|
|
304
|
+
35 => "バカ(IAG)",
|
|
305
|
+
36 => "渋い(IAH)",
|
|
306
|
+
44 => "渋い(IAH)",
|
|
307
|
+
45 => "賢い(IAI)",
|
|
308
|
+
46 => "賢い(IAI)",
|
|
309
|
+
55 => "超自然(IAJ)",
|
|
310
|
+
56 => "超自然(IAJ)",
|
|
300
311
|
66 => "振り直しor自由選択"
|
|
301
312
|
}
|
|
302
313
|
),
|
|
303
314
|
"IAA" => DiceTable::Table.new(
|
|
304
|
-
"イケメンアクション(遠距離)表",
|
|
315
|
+
"イケメンアクション(遠距離)表(P172)",
|
|
305
316
|
"1D6",
|
|
306
317
|
[
|
|
307
318
|
"目を合わせて微笑む(かっこよさ:4)",
|
|
@@ -313,7 +324,7 @@ module BCDice
|
|
|
313
324
|
]
|
|
314
325
|
),
|
|
315
326
|
"IAB" => DiceTable::Table.new(
|
|
316
|
-
"イケメンアクション(移動)表",
|
|
327
|
+
"イケメンアクション(移動)表(P172)",
|
|
317
328
|
"1D6",
|
|
318
329
|
[
|
|
319
330
|
"車道側を歩く(かっこよさ:4)",
|
|
@@ -325,7 +336,7 @@ module BCDice
|
|
|
325
336
|
]
|
|
326
337
|
),
|
|
327
338
|
"IAC" => DiceTable::Table.new(
|
|
328
|
-
"イケメンアクション(近距離)表",
|
|
339
|
+
"イケメンアクション(近距離)表(P173)",
|
|
329
340
|
"1D6",
|
|
330
341
|
[
|
|
331
342
|
"黙って見つめる(かっこよさ:3)",
|
|
@@ -337,7 +348,7 @@ module BCDice
|
|
|
337
348
|
]
|
|
338
349
|
),
|
|
339
350
|
"IAD" => DiceTable::Table.new(
|
|
340
|
-
"イケメンアクション(善人)表",
|
|
351
|
+
"イケメンアクション(善人)表(P173)",
|
|
341
352
|
"1D6",
|
|
342
353
|
[
|
|
343
354
|
"手を引いて逃げる(かっこよさ:4)",
|
|
@@ -349,7 +360,7 @@ module BCDice
|
|
|
349
360
|
]
|
|
350
361
|
),
|
|
351
362
|
"IAE" => DiceTable::Table.new(
|
|
352
|
-
"イケメンアクション(悪人)表",
|
|
363
|
+
"イケメンアクション(悪人)表(P174)",
|
|
353
364
|
"1D6",
|
|
354
365
|
[
|
|
355
366
|
"攻撃する(かっこよさ:4)",
|
|
@@ -361,7 +372,7 @@ module BCDice
|
|
|
361
372
|
]
|
|
362
373
|
),
|
|
363
374
|
"IAF" => DiceTable::Table.new(
|
|
364
|
-
"イケメンアクション(幼い)表",
|
|
375
|
+
"イケメンアクション(幼い)表(P174)",
|
|
365
376
|
"1D6",
|
|
366
377
|
[
|
|
367
378
|
"甘える(かっこよさ:3)",
|
|
@@ -373,7 +384,7 @@ module BCDice
|
|
|
373
384
|
]
|
|
374
385
|
),
|
|
375
386
|
"IAG" => DiceTable::Table.new(
|
|
376
|
-
"イケメンアクション(バカ)表",
|
|
387
|
+
"イケメンアクション(バカ)表(P175)",
|
|
377
388
|
"1D6",
|
|
378
389
|
[
|
|
379
390
|
"苦悩する(かっこよさ:4)",
|
|
@@ -385,7 +396,7 @@ module BCDice
|
|
|
385
396
|
]
|
|
386
397
|
),
|
|
387
398
|
"IAH" => DiceTable::Table.new(
|
|
388
|
-
"イケメンアクション(渋い)表",
|
|
399
|
+
"イケメンアクション(渋い)表(P175)",
|
|
389
400
|
"1D6",
|
|
390
401
|
[
|
|
391
402
|
"説教(かっこよさ:4)",
|
|
@@ -397,7 +408,7 @@ module BCDice
|
|
|
397
408
|
]
|
|
398
409
|
),
|
|
399
410
|
"IAI" => DiceTable::Table.new(
|
|
400
|
-
"イケメンアクション(賢い)表",
|
|
411
|
+
"イケメンアクション(賢い)表(P176)",
|
|
401
412
|
"1D6",
|
|
402
413
|
[
|
|
403
414
|
"難しい本を読む(かっこよさ:3)",
|
|
@@ -409,7 +420,7 @@ module BCDice
|
|
|
409
420
|
]
|
|
410
421
|
),
|
|
411
422
|
"IAJ" => DiceTable::Table.new(
|
|
412
|
-
"イケメンアクション(超自然)表",
|
|
423
|
+
"イケメンアクション(超自然)表(P176)",
|
|
413
424
|
"1D6",
|
|
414
425
|
[
|
|
415
426
|
"水に濡れる(かっこよさ:4)",
|
|
@@ -420,6 +431,30 @@ module BCDice
|
|
|
420
431
|
"光る(かっこよさ:6)"
|
|
421
432
|
]
|
|
422
433
|
),
|
|
434
|
+
"CAC" => DiceTable::Table.new(
|
|
435
|
+
"センターの行動決定表",
|
|
436
|
+
"1d6",
|
|
437
|
+
[
|
|
438
|
+
"逃走",
|
|
439
|
+
"不意打ち",
|
|
440
|
+
"連続行動",
|
|
441
|
+
"対話",
|
|
442
|
+
"威嚇",
|
|
443
|
+
"攻撃"
|
|
444
|
+
]
|
|
445
|
+
),
|
|
446
|
+
"DDC" => DiceTable::Table.new(
|
|
447
|
+
"対話ダメージ表",
|
|
448
|
+
"1d6",
|
|
449
|
+
[
|
|
450
|
+
"焦り",
|
|
451
|
+
"焦り",
|
|
452
|
+
"不調",
|
|
453
|
+
"不調",
|
|
454
|
+
"ショック",
|
|
455
|
+
"ショック",
|
|
456
|
+
]
|
|
457
|
+
)
|
|
423
458
|
}.freeze
|
|
424
459
|
|
|
425
460
|
register_prefix(RTT.prefixes, TABLES.keys)
|
|
@@ -115,8 +115,9 @@ module BCDice
|
|
|
115
115
|
dice_count = 4 if dice_count == 0
|
|
116
116
|
|
|
117
117
|
dice_list = @randomizer.roll_barabara(dice_count, 6).sort
|
|
118
|
+
total = dice_list.sum()
|
|
118
119
|
|
|
119
|
-
return "(#{command}) > #{dice_count}D6 > [ #{dice_list.join(', ')} ]"
|
|
120
|
+
return "(#{command}) > #{dice_count}D6 > [ #{dice_list.join(', ')} ] > #{total}"
|
|
120
121
|
end
|
|
121
122
|
|
|
122
123
|
def getReactionDiceCommandResult(command)
|