bcdice 3.5.0 → 3.6.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 +29 -0
- data/i18n/FutariSousa/ja_jp.yml +705 -9
- data/i18n/KillDeathBusiness/ja_jp.yml +1 -1
- 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/dice_table/d66_parity_table.rb +8 -0
- data/lib/bcdice/game_system/Avandner.rb +1 -2
- data/lib/bcdice/game_system/Ayabito.rb +229 -0
- data/lib/bcdice/game_system/BattleTech.rb +1 -1
- data/lib/bcdice/game_system/CyberpunkRed.rb +135 -0
- data/lib/bcdice/game_system/DarkDaysDrive.rb +76 -41
- data/lib/bcdice/game_system/Elysion.rb +36 -20
- data/lib/bcdice/game_system/FutariSousa.rb +48 -4
- data/lib/bcdice/game_system/KemonoNoMori.rb +17 -17
- data/lib/bcdice/game_system/NeverCloud.rb +19 -8
- 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/StrangerOfSwordCity.rb +18 -5
- data/lib/bcdice/game_system/SwordWorld.rb +6 -6
- data/lib/bcdice/game_system/SwordWorld2_0.rb +16 -39
- data/lib/bcdice/game_system/SwordWorld2_5.rb +3 -63
- data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +29 -28
- 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/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 +34 -82
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +43 -53
- data/lib/bcdice/game_system/sword_world/transcendent_test.rb +14 -10
- data/lib/bcdice/game_system.rb +4 -0
- data/lib/bcdice/randomizer.rb +1 -1
- data/lib/bcdice/version.rb +1 -1
- metadata +11 -2
@@ -537,7 +537,7 @@ ja_jp:
|
|
537
537
|
報酬:【視聴率】10%増加、400【ソウル】
|
538
538
|
- |-
|
539
539
|
『捨て猫』
|
540
|
-
|
540
|
+
回収人から一人選び、相手が「情動」で修得している特技を指定特技として判定を行う。判定に成功すると、懐から仔猫が出てくる。これは相手が故あって捨てた猫だが、あなたはそれが許せない。相手への関係を、属性「猫の飼い主」で獲得する。【深度】は1になる。
|
541
541
|
クリア条件:相手に猫を飼わせるため、戦闘で一度倒す。すると、相手は猫を飼うことに同意する。猫の詳細なスペックを決めてもいいし、決めなくてもかまわない。あと、動物の種類も実は自由だ。
|
542
542
|
報酬:【視聴率】10%増加、クリア条件達成時の相手への関係の【深度】× 200【ソウル】
|
543
543
|
- |-
|
@@ -0,0 +1,37 @@
|
|
1
|
+
ja_jp:
|
2
|
+
SwordWorld2_0:
|
3
|
+
transcendent_critical_too_small: (%{expression}) > クリティカル値が小さすぎます。3以上を指定してください。
|
4
|
+
super_success: 超成功
|
5
|
+
|
6
|
+
GrowthTable:
|
7
|
+
name: 成長表
|
8
|
+
type: 1D6
|
9
|
+
items:
|
10
|
+
- 器用度
|
11
|
+
- 敏捷度
|
12
|
+
- 筋力
|
13
|
+
- 生命力
|
14
|
+
- 知力
|
15
|
+
- 精神力
|
16
|
+
|
17
|
+
FumbleTable:
|
18
|
+
name: 防御ファンブル表
|
19
|
+
type: 1D6
|
20
|
+
items:
|
21
|
+
- この表を2回振り、その両方を適用する。(同じ出目による影響は累積しない)。この自動失敗により得られる経験点は、+50点される
|
22
|
+
- ダメージに、攻撃者を強化している「剣のかけら」の数が追加される
|
23
|
+
- ダメージに、攻撃者の「レベル」が追加される
|
24
|
+
- ダメージ決定を2回行い、より高い方を採用する
|
25
|
+
- 合算ダメージを2倍する
|
26
|
+
- 防護点無効
|
27
|
+
|
28
|
+
TangleTable:
|
29
|
+
name: 絡み効果表
|
30
|
+
type: 1D6
|
31
|
+
items:
|
32
|
+
- 頭や顔:牙や噛みつきなどにおける命中力判定及び、魔法の行使やブレスに-2のペナルティ修正を受ける
|
33
|
+
- 武器や盾:武器の使用不可、又は盾の回避力修正及び防護点を無効化する
|
34
|
+
- 腕や手:武器や爪などにおける命中力判定に-2のペナルティ修正、盾を持つ腕方の腕ならその盾の回避力修正及び防護点を無効化する
|
35
|
+
- 脚や足:移動不可、更に回避力判定に-2のペナルティ修正を受ける ※両足に絡んでも累積しない
|
36
|
+
- 胴体:生命・精神抵抗力を基準値に用いる判定を除き、あらゆる行為判定に-1のペナルティ修正を受ける
|
37
|
+
- 特殊:尻尾や翼などに命中。絡められた部位を使用する判定において-2のペナルティ修正、またはそこが使えていたことによるボーナス修正を失う ※存在しない場合は決め直し
|
@@ -0,0 +1,57 @@
|
|
1
|
+
ja_jp:
|
2
|
+
SwordWorld2_5:
|
3
|
+
AbyssCurseTable:
|
4
|
+
name: アビスカース表
|
5
|
+
items:
|
6
|
+
-
|
7
|
+
- 「自傷の」 装備時 この武具を装備中に装備者がクリティカルを発生させた時、装備者のHPが5点減少する。
|
8
|
+
- 「嘆きの」 装備時 近くに敵がいたり、長い緊張状態が続くと涙が止まらなくなる。戦闘中なら「射程:術者(自身)」「射程:接触」以外の効果で対象を選べなくなる。
|
9
|
+
- 「優しき」 装備時 敵に同情してしまう。敵対するキャラクターを対象にする場合、対象のHPが1点以上減少しているなら命中力判定、魔法行使判定に-2のペナルティ修正を受ける。
|
10
|
+
- 「差別の」 装備時 特定の分類に対して与える物理ダメージ・魔法ダメージが2点減少する。分類は「分類決定表」で無作為に決定する。
|
11
|
+
- 「脆弱な」 装備時 魔法ダメージを受けるたび、そのダメージが+1点される。
|
12
|
+
- 「無謀な」 装備時 防護点が2点減少する(最低0)。
|
13
|
+
-
|
14
|
+
- 「重い」 装備時 強化した武具の必要筋力が+2される。威力、防護点などは変化なし。
|
15
|
+
- 「難しい」 装備時 いかなる威力表使用時でも、③④欄の数値が威力に関係なく「0」になる(自動失敗ではない)。
|
16
|
+
- 「軟弱な」 装備時 精神抵抗力判定に-1のペナルティ修正を受ける。
|
17
|
+
- 「病弱な」 装備時 生命抵抗力判定に-1のペナルティ修正を受ける。
|
18
|
+
- 「過敏な」 装備時 特定の属性から受ける物理ダメージ、魔法ダメージが2点上昇する。属性は「属性決定表」で無作為に決定する。
|
19
|
+
- 「陽気な」 装備時 精神抵抗判定に失敗するたび、笑いが止まらなくなる。次の手番終了時まで行動判定(『Ⅰ』123頁)に-1のペナルティ修正を受ける。この効果は累積する。
|
20
|
+
-
|
21
|
+
- 「たどたどしい」 装備時 話をする時に言葉に詰まったり、言い間違えたりしやすくなる。魔法行使判定に-1のペナルティ修正を受ける。
|
22
|
+
- 「代弁する」 装備時 自身の会話は、そのまま武具が魔法文明語の聞き取りづらい声で話す。装備中は魔法文明語以外の言語で会話は行えず、妖精魔法、魔動機術を行使できなくなる。
|
23
|
+
- 「施しは受けない」 装備時 戦闘中、「抵抗:任意」の効果を受け入れた場合、次の手番終了時まで生命抵抗力、精神抵抗力に-2のペナルティ修正を受ける。
|
24
|
+
- 「死に近い」 携行時 常に生死判定に「冒険者レベル」と同じ値のペナルティ修正を受ける。
|
25
|
+
- 「おしゃれな」 携行時 その武具を常に華美に飾りたくなる。収入を得るたび、その1割以上をこの武具の装飾に費やさなければならない(効果などに変化はない)。
|
26
|
+
- 「マナを吸う」 携行時 魔法や練技など、自身の意思でMPを消費する効果を使用する場合、すべてのMP消費が1点上昇する。
|
27
|
+
-
|
28
|
+
- 「鈍重な」 携行時 移動力が半分(端数切り上げ)になる。
|
29
|
+
- 「定まらない」 携行時 戦闘中の手番開始時に1dし、出目が「1」なら《ターゲッティング》とそれを前提とした戦闘特技を習得していないものとして扱う。
|
30
|
+
- 「錯乱の」 携行時 戦闘中の手番開始時に1dし、出目が「1」なら近接攻撃を含む「射程:接触」の対象に効果を使用する際、対象は同じ位置(エリア、座標)の全てのキャラクター(敵味方含む)から無作為に選ばれる。
|
31
|
+
- 「足絡みの」 携行時 戦闘中の手番開始時に1dし、出目が「1」ならその場で即座に転倒する。手番中には起き上がれない。
|
32
|
+
- 「滑り落ちる」 携行時 戦闘中の手番開始時に1dし、出目が「1」なら手に装備または保持しているものをすべてその場に落とす(その手番の主動作で拾う事は可能)。
|
33
|
+
- 「悪臭放つ」 携行時 強い悪臭を放つ。所持しているだけで他のキャラクターに不快感を与え、隠密判定に-2のペナルティ修正を受ける。さらに冒険者ランク(『Ⅱ』137頁)が1段階低いものとして扱われる。
|
34
|
+
-
|
35
|
+
- 「醜悪な」 携行時 武具の見た目が悪く、魅力がない。売却する際、基本取引価格の4分の1の価格で売却する。さらに冒険者ランク(『Ⅱ』137頁)が1段階低いものとして扱われる。
|
36
|
+
- 「唸る」 携行時 その武具から常に羽虫が飛び交うような音が響く。隠密判定、危険感知判定に-4のペナルティ修正を受ける。
|
37
|
+
- 「ふやけた」 携行時 水を吸ったようにふやけた質感をしている。追加ダメージ-1(武器)、防護点-1(鎧、盾)。病気属性の効果に対する生命抵抗力、精神抵抗力判定に-4のペナルティ修正を受ける。
|
38
|
+
- 「古傷の」 携行時 HPを回復する効果(休息による回復を含む)を受けた場合、その回復量が1点減少する。
|
39
|
+
- 「まばゆい」 携行時 光などを弾いて強く輝く。自身は常に視界が悪い事による-1のペナルティ修正を受ける。
|
40
|
+
- 「栄光なき」 携行時 行為判定で自動成功した際、自動成功とは扱わず、2dを振り直し、その後の出目に従う。この効果は1日に1回のみ発揮される。
|
41
|
+
-
|
42
|
+
- 「正直者の」 携行時 嘘、方便がすぐばれるようになる。真偽判定の対象となる場合、-4のペナルティ修正を受ける。
|
43
|
+
- 「乗り物酔いの」 携行時 揺れに弱くなる。自身の足以外の手段で10分以上移動した後、1時間、行動判定に-1のペナルティ修正を受ける。
|
44
|
+
- 「碧を厭う」 携行時 自然の中では落ち着かなくなる。自然環境(『Ⅰ』108頁)では行動判定に-1のペナルティ修正を受ける。
|
45
|
+
- 「我慢できない」 携行時 セッション中に1日の始まりを迎えるたび、趣味や嗜好品などに「冒険者レベル×10」ガメルを出費しなければならない。趣味や嗜好品が消費できない環境であれば、翌日の朝まで最大HP、最大MPが「冒険者レベル」点減少する。
|
46
|
+
- 「つきまとう」 携行時 この武具が気がつけば身の回りにある。この武具以外での命中力判定、魔法行使判定(武器)、回避力判定(鎧、盾)に-4のペナルティ修正を受ける。
|
47
|
+
- 「のろまな」 携行時 戦闘開始処理の「戦闘準備」をいっさい行えなくなる。
|
48
|
+
|
49
|
+
AbyssCurseCategoryTable:
|
50
|
+
name: アビスカース分類決定表
|
51
|
+
odd: ["蛮族", "動物", "植物", "アンデッド", "魔法生物", "「蛮族」「動物」「植物」「アンデッド」「魔法生物」から任意"]
|
52
|
+
even: ["魔動機", "幻獣", "妖精", "魔神", "人族", "「魔動機」「幻獣」「妖精」「魔神」「人族」から任意"]
|
53
|
+
|
54
|
+
AbyssCurseAttrTable:
|
55
|
+
name: アビスカース属性決定表
|
56
|
+
odd: ["土", "水・氷", "炎", "風", "雷", "純粋エネルギー"]
|
57
|
+
even: ["断空", "衝撃", "毒", "病気", "呪い", "精神効果"]
|
@@ -493,10 +493,14 @@ module BCDice
|
|
493
493
|
|
494
494
|
# ノードを初期化する
|
495
495
|
# @param [Object] times ダイスを振る回数のノード
|
496
|
-
# @param [Object] sides
|
496
|
+
# @param [Object, :implicit] sides ダイスの面数のノード(暗黙の面数を参照したい場合は `:implicit`)
|
497
497
|
# @param [Object] n_filtering ダイスを残す/減らす個数のノード
|
498
498
|
# @param [Filter] filter フィルタ
|
499
499
|
def initialize(times, sides, n_filtering, filter)
|
500
|
+
if sides != :implicit && !sides.respond_to?(:eval)
|
501
|
+
raise TypeError, "sides must be a Node or :implicit (#{sides.inspect})"
|
502
|
+
end
|
503
|
+
|
500
504
|
@times = times
|
501
505
|
@sides = sides
|
502
506
|
@n_filtering = n_filtering
|
@@ -515,7 +519,7 @@ module BCDice
|
|
515
519
|
# @return [Integer] 評価結果(出目の合計値)
|
516
520
|
def eval(game_system, randomizer)
|
517
521
|
times = @times.eval(game_system, nil)
|
518
|
-
sides =
|
522
|
+
sides = eval_sides(game_system)
|
519
523
|
n_filtering = @n_filtering.eval(game_system, nil)
|
520
524
|
|
521
525
|
sorted_values = randomizer.roll(times, sides).sort
|
@@ -533,11 +537,17 @@ module BCDice
|
|
533
537
|
true
|
534
538
|
end
|
535
539
|
|
540
|
+
# 暗黙の面数を参照するか?
|
541
|
+
# @return [Boolean]
|
542
|
+
def implicit_sides?
|
543
|
+
@sides == :implicit
|
544
|
+
end
|
545
|
+
|
536
546
|
# 文字列に変換する
|
537
547
|
# @return [String]
|
538
548
|
def expr(game_system)
|
539
549
|
times = @times.eval(game_system, nil)
|
540
|
-
sides =
|
550
|
+
sides = eval_sides(game_system)
|
541
551
|
n_filtering = @n_filtering.eval(game_system, nil)
|
542
552
|
|
543
553
|
"#{times}D#{sides}#{@filter.abbr}#{n_filtering}"
|
@@ -552,7 +562,21 @@ module BCDice
|
|
552
562
|
# ノードのS式を返す
|
553
563
|
# @return [String]
|
554
564
|
def s_exp
|
555
|
-
|
565
|
+
sides_s_exp = implicit_sides? ? @sides.inspect : @sides.s_exp
|
566
|
+
|
567
|
+
"(DiceRollWithFilter #{@times.s_exp} #{sides_s_exp} #{@filter.abbr.inspect} #{@n_filtering.s_exp})"
|
568
|
+
end
|
569
|
+
|
570
|
+
private
|
571
|
+
|
572
|
+
# 面数を評価する
|
573
|
+
# @return [Integer] 指定された面数または暗黙の面数
|
574
|
+
def eval_sides(game_system)
|
575
|
+
if implicit_sides?
|
576
|
+
game_system.sides_implicit_d
|
577
|
+
else
|
578
|
+
@sides.eval(game_system, nil)
|
579
|
+
end
|
556
580
|
end
|
557
581
|
end
|
558
582
|
|
@@ -48,91 +48,102 @@ end
|
|
48
48
|
##### State transition tables begin ###
|
49
49
|
|
50
50
|
racc_action_table = [
|
51
|
-
13, 16, 17,
|
52
|
-
|
51
|
+
13, 16, 17, 3, -27, -27, 33, 13, -27, 13,
|
52
|
+
4, 46, 13, 47, 13, 14, 8, 9, 22, 13,
|
53
|
+
12, 13, 26, 8, 9, 8, 9, 12, 13, 12,
|
53
54
|
8, 9, 12, 13, 12, 8, 9, 8, 9, 12,
|
54
|
-
13, 12,
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
55
|
+
13, 12, 18, 19, 8, 9, 15, 52, 12, 8,
|
56
|
+
9, 13, 53, 12, -26, -26, 8, 9, -26, nil,
|
57
|
+
12, 16, 17, 43, 42, 16, 17, 41, 18, 19,
|
58
|
+
nil, 12, 36, 38, 35, 37, 18, 19, 48, 49,
|
59
|
+
50, 51 ]
|
59
60
|
|
60
61
|
racc_action_check = [
|
61
|
-
15, 23, 23,
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
62
|
+
15, 23, 23, 0, 31, 31, 23, 2, 31, 8,
|
63
|
+
1, 41, 40, 41, 9, 4, 15, 15, 11, 12,
|
64
|
+
15, 16, 15, 2, 2, 8, 8, 2, 17, 8,
|
65
|
+
9, 9, 40, 18, 9, 12, 12, 16, 16, 12,
|
66
|
+
19, 16, 6, 6, 17, 17, 5, 46, 17, 18,
|
67
|
+
18, 22, 47, 18, 22, 22, 19, 19, 22, nil,
|
68
|
+
19, 5, 5, 32, 32, 25, 25, 32, 27, 27,
|
69
|
+
nil, 22, 30, 30, 30, 30, 28, 28, 42, 42,
|
70
|
+
43, 43 ]
|
69
71
|
|
70
72
|
racc_action_pointer = [
|
71
|
-
|
72
|
-
nil,
|
73
|
-
nil, nil,
|
74
|
-
|
75
|
-
|
73
|
+
-1, 10, 5, nil, 15, 43, 22, nil, 7, 12,
|
74
|
+
nil, 13, 17, nil, nil, -2, 19, 26, 31, 38,
|
75
|
+
nil, nil, 49, -17, nil, 47, nil, 48, 56, nil,
|
76
|
+
58, -1, 58, nil, nil, nil, nil, nil, nil, nil,
|
77
|
+
10, 1, 71, 73, nil, nil, 36, 39, nil, nil,
|
78
|
+
nil, nil, nil, nil ]
|
76
79
|
|
77
80
|
racc_action_default = [
|
78
|
-
-3, -
|
79
|
-
-20, -
|
80
|
-
-18, -19, -22, -
|
81
|
-
-13, -21, -
|
82
|
-
-
|
81
|
+
-3, -38, -38, -4, -38, -1, -9, -12, -38, -38,
|
82
|
+
-20, -25, -38, -37, 54, -38, -38, -38, -38, -38,
|
83
|
+
-18, -19, -22, -38, -2, -5, -6, -7, -8, -10,
|
84
|
+
-13, -21, -38, -36, -11, -14, -15, -16, -17, -23,
|
85
|
+
-34, -38, -38, -38, -35, -24, -38, -38, -30, -31,
|
86
|
+
-32, -33, -28, -29 ]
|
83
87
|
|
84
88
|
racc_goto_table = [
|
85
|
-
31, 5, 20, 21, 27, 28, 1, 2, 24,
|
86
|
-
|
89
|
+
31, 5, 20, 21, 27, 28, 1, 2, 24, 34,
|
90
|
+
32, 23, 29, 30, 25, 39, 40, 44, 45 ]
|
87
91
|
|
88
92
|
racc_goto_check = [
|
89
93
|
9, 3, 6, 6, 5, 5, 1, 2, 4, 7,
|
90
|
-
10, 3, 6, 6, 3,
|
94
|
+
10, 3, 6, 6, 3, 11, 12, 13, 9 ]
|
91
95
|
|
92
96
|
racc_goto_pointer = [
|
93
97
|
nil, 6, 7, -1, -7, -12, -6, -21, nil, -22,
|
94
|
-
-
|
98
|
+
-12, -17, -16, -15 ]
|
95
99
|
|
96
100
|
racc_goto_default = [
|
97
101
|
nil, nil, nil, nil, nil, 6, 7, nil, 10, 11,
|
98
|
-
nil ]
|
102
|
+
nil, nil, nil, nil ]
|
99
103
|
|
100
104
|
racc_reduce_table = [
|
101
105
|
0, 0, :racc_error,
|
102
|
-
2,
|
103
|
-
4,
|
104
|
-
0,
|
105
|
-
1,
|
106
|
-
1,
|
107
|
-
1,
|
108
|
-
3,
|
109
|
-
3,
|
110
|
-
1, 23, :_reduce_none,
|
111
|
-
3, 25, :_reduce_10,
|
112
|
-
4, 25, :_reduce_11,
|
113
|
-
1, 25, :_reduce_none,
|
114
|
-
0, 27, :_reduce_13,
|
115
|
-
1, 27, :_reduce_14,
|
116
|
-
1, 27, :_reduce_15,
|
117
|
-
1, 27, :_reduce_16,
|
118
|
-
1, 27, :_reduce_17,
|
119
|
-
2, 26, :_reduce_18,
|
120
|
-
2, 26, :_reduce_19,
|
121
|
-
1, 26, :_reduce_none,
|
122
|
-
3, 28, :_reduce_21,
|
123
|
-
2, 28, :_reduce_22,
|
124
|
-
5, 28, :_reduce_23,
|
106
|
+
2, 26, :_reduce_1,
|
107
|
+
4, 26, :_reduce_2,
|
108
|
+
0, 27, :_reduce_3,
|
109
|
+
1, 27, :_reduce_4,
|
110
|
+
1, 29, :_reduce_none,
|
111
|
+
1, 29, :_reduce_6,
|
112
|
+
3, 28, :_reduce_7,
|
113
|
+
3, 28, :_reduce_8,
|
125
114
|
1, 28, :_reduce_none,
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
1,
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
115
|
+
3, 30, :_reduce_10,
|
116
|
+
4, 30, :_reduce_11,
|
117
|
+
1, 30, :_reduce_none,
|
118
|
+
0, 32, :_reduce_13,
|
119
|
+
1, 32, :_reduce_14,
|
120
|
+
1, 32, :_reduce_15,
|
121
|
+
1, 32, :_reduce_16,
|
122
|
+
1, 32, :_reduce_17,
|
123
|
+
2, 31, :_reduce_18,
|
124
|
+
2, 31, :_reduce_19,
|
125
|
+
1, 31, :_reduce_none,
|
126
|
+
3, 33, :_reduce_21,
|
127
|
+
2, 33, :_reduce_22,
|
128
|
+
4, 33, :_reduce_23,
|
129
|
+
5, 33, :_reduce_24,
|
130
|
+
1, 33, :_reduce_none,
|
131
|
+
0, 35, :_reduce_26,
|
132
|
+
1, 35, :_reduce_27,
|
133
|
+
3, 38, :_reduce_28,
|
134
|
+
3, 38, :_reduce_29,
|
135
|
+
2, 37, :_reduce_30,
|
136
|
+
2, 37, :_reduce_31,
|
137
|
+
2, 37, :_reduce_32,
|
138
|
+
2, 37, :_reduce_33,
|
139
|
+
1, 36, :_reduce_none,
|
140
|
+
1, 36, :_reduce_none,
|
141
|
+
3, 34, :_reduce_36,
|
142
|
+
1, 34, :_reduce_37 ]
|
143
|
+
|
144
|
+
racc_reduce_n = 38
|
145
|
+
|
146
|
+
racc_shift_n = 54
|
136
147
|
|
137
148
|
racc_token_table = {
|
138
149
|
false => 0,
|
@@ -144,19 +155,24 @@ racc_token_table = {
|
|
144
155
|
:K => 6,
|
145
156
|
:H => 7,
|
146
157
|
:L => 8,
|
147
|
-
:
|
148
|
-
:
|
149
|
-
:
|
150
|
-
:
|
151
|
-
:
|
152
|
-
:
|
153
|
-
:
|
154
|
-
:
|
155
|
-
:
|
156
|
-
:
|
157
|
-
:
|
158
|
-
|
159
|
-
|
158
|
+
:M => 9,
|
159
|
+
:A => 10,
|
160
|
+
:X => 11,
|
161
|
+
:I => 12,
|
162
|
+
:N => 13,
|
163
|
+
:U => 14,
|
164
|
+
:R => 15,
|
165
|
+
:F => 16,
|
166
|
+
:C => 17,
|
167
|
+
:PLUS => 18,
|
168
|
+
:MINUS => 19,
|
169
|
+
:ASTERISK => 20,
|
170
|
+
:SLASH => 21,
|
171
|
+
:PARENL => 22,
|
172
|
+
:PARENR => 23,
|
173
|
+
:QUESTION => 24 }
|
174
|
+
|
175
|
+
racc_nt_base = 25
|
160
176
|
|
161
177
|
racc_use_result_var = true
|
162
178
|
|
@@ -186,6 +202,11 @@ Racc_token_to_s_table = [
|
|
186
202
|
"K",
|
187
203
|
"H",
|
188
204
|
"L",
|
205
|
+
"M",
|
206
|
+
"A",
|
207
|
+
"X",
|
208
|
+
"I",
|
209
|
+
"N",
|
189
210
|
"U",
|
190
211
|
"R",
|
191
212
|
"F",
|
@@ -207,7 +228,10 @@ Racc_token_to_s_table = [
|
|
207
228
|
"round_type",
|
208
229
|
"dice",
|
209
230
|
"term",
|
210
|
-
"
|
231
|
+
"explicit_or_implicit_sides",
|
232
|
+
"filter_type_with_shorthand",
|
233
|
+
"filter_type",
|
234
|
+
"filter_shorthand" ]
|
211
235
|
|
212
236
|
Racc_debug_parser = false
|
213
237
|
|
@@ -349,42 +373,82 @@ def _reduce_23(val, _values, result)
|
|
349
373
|
times = val[0]
|
350
374
|
sides = val[2]
|
351
375
|
filter = val[3]
|
376
|
+
|
377
|
+
raise ParseError if sides != :implicit && sides.include_dice?
|
378
|
+
raise ParseError if times.include_dice?
|
379
|
+
|
380
|
+
n_filtering = Node::Number.new(1)
|
381
|
+
result = Node::DiceRollWithFilter.new(times, sides, n_filtering, filter)
|
382
|
+
|
383
|
+
result
|
384
|
+
end
|
385
|
+
|
386
|
+
def _reduce_24(val, _values, result)
|
387
|
+
times = val[0]
|
388
|
+
sides = val[2]
|
389
|
+
filter = val[3]
|
352
390
|
n_filtering = val[4]
|
353
|
-
|
391
|
+
|
392
|
+
raise ParseError if sides != :implicit && sides.include_dice?
|
393
|
+
raise ParseError if times.include_dice? || n_filtering.include_dice?
|
354
394
|
|
355
395
|
result = Node::DiceRollWithFilter.new(times, sides, n_filtering, filter)
|
356
396
|
|
357
397
|
result
|
358
398
|
end
|
359
399
|
|
360
|
-
# reduce
|
400
|
+
# reduce 25 omitted
|
401
|
+
|
402
|
+
def _reduce_26(val, _values, result)
|
403
|
+
result = :implicit
|
404
|
+
result
|
405
|
+
end
|
406
|
+
|
407
|
+
def _reduce_27(val, _values, result)
|
408
|
+
result = val[0]
|
409
|
+
result
|
410
|
+
end
|
411
|
+
|
412
|
+
def _reduce_28(val, _values, result)
|
413
|
+
result = Node::DiceRollWithFilter::KEEP_HIGHEST
|
414
|
+
result
|
415
|
+
end
|
416
|
+
|
417
|
+
def _reduce_29(val, _values, result)
|
418
|
+
result = Node::DiceRollWithFilter::KEEP_LOWEST
|
419
|
+
result
|
420
|
+
end
|
361
421
|
|
362
|
-
def
|
422
|
+
def _reduce_30(val, _values, result)
|
363
423
|
result = Node::DiceRollWithFilter::KEEP_HIGHEST
|
364
424
|
result
|
365
425
|
end
|
366
426
|
|
367
|
-
def
|
427
|
+
def _reduce_31(val, _values, result)
|
368
428
|
result = Node::DiceRollWithFilter::KEEP_LOWEST
|
369
429
|
result
|
370
430
|
end
|
371
431
|
|
372
|
-
def
|
432
|
+
def _reduce_32(val, _values, result)
|
373
433
|
result = Node::DiceRollWithFilter::DROP_HIGHEST
|
374
434
|
result
|
375
435
|
end
|
376
436
|
|
377
|
-
def
|
437
|
+
def _reduce_33(val, _values, result)
|
378
438
|
result = Node::DiceRollWithFilter::DROP_LOWEST
|
379
439
|
result
|
380
440
|
end
|
381
441
|
|
382
|
-
|
442
|
+
# reduce 34 omitted
|
443
|
+
|
444
|
+
# reduce 35 omitted
|
445
|
+
|
446
|
+
def _reduce_36(val, _values, result)
|
383
447
|
result = Node::Parenthesis.new(val[1])
|
384
448
|
result
|
385
449
|
end
|
386
450
|
|
387
|
-
def
|
451
|
+
def _reduce_37(val, _values, result)
|
388
452
|
result = Node::Number.new(val[0])
|
389
453
|
result
|
390
454
|
end
|
@@ -4,6 +4,14 @@ module BCDice
|
|
4
4
|
module DiceTable
|
5
5
|
# 出目の偶奇による場合分け機能をもつD66表
|
6
6
|
class D66ParityTable
|
7
|
+
# @param key [String]
|
8
|
+
# @param locale [Symbol]
|
9
|
+
# @return [D66ParityTable]
|
10
|
+
def self.from_i18n(key, locale)
|
11
|
+
table = I18n.t(key, locale: locale, raise: true)
|
12
|
+
new(table[:name], table[:odd], table[:even])
|
13
|
+
end
|
14
|
+
|
7
15
|
# @param name [String] 表の名前
|
8
16
|
# @param odd [Array<String>] 左ダイスが奇数だったときの次層テーブル(サイズ6)
|
9
17
|
# @param even [Array<String>] 左ダイスが偶数だったときの次層テーブル(サイズ6)
|
@@ -48,8 +48,7 @@ module BCDice
|
|
48
48
|
target = Regexp.last_match(2).to_i
|
49
49
|
damage = (Regexp.last_match(5) || 0).to_i
|
50
50
|
criticalTrigger = (Regexp.last_match(7) || 0).to_i
|
51
|
-
criticalNumber = (Regexp.last_match(9) || 1).to_i
|
52
|
-
criticalNumber = 2 if criticalNumber > 3
|
51
|
+
criticalNumber = (Regexp.last_match(9) || 1).to_i.clamp(0, 2)
|
53
52
|
return checkRoll(diceCount, target, damage, criticalTrigger, criticalNumber)
|
54
53
|
end
|
55
54
|
|