bcdice 3.6.0 → 3.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +56 -0
  3. data/i18n/Arianrhod/ja_jp.yml +3 -0
  4. data/i18n/Emoklore/ja_jp.yml +7 -0
  5. data/i18n/FutariSousa/ja_jp.yml +431 -0
  6. data/i18n/LogHorizon/ja_jp.yml +1 -1
  7. data/i18n/SwordWorld/ja_jp.yml +1 -0
  8. data/i18n/SwordWorld/zh_hans.yml +7 -0
  9. data/i18n/SwordWorld2_0/zh_hans.yml +37 -0
  10. data/i18n/SwordWorld2_5/ja_jp.yml +1 -1
  11. data/i18n/SwordWorld2_5/zh_hans.yml +57 -0
  12. data/lib/bcdice/arithmetic/parser.rb +1 -1
  13. data/lib/bcdice/command/parser.rb +1 -1
  14. data/lib/bcdice/common_command/add_dice/parser.rb +106 -74
  15. data/lib/bcdice/common_command/add_dice.rb +1 -1
  16. data/lib/bcdice/common_command/barabara_dice/parser.rb +1 -1
  17. data/lib/bcdice/common_command/calc/parser.rb +1 -1
  18. data/lib/bcdice/common_command/d66_dice.rb +1 -1
  19. data/lib/bcdice/common_command/reroll_dice/parser.rb +1 -1
  20. data/lib/bcdice/common_command/tally_dice/parser.rb +1 -1
  21. data/lib/bcdice/common_command/upper_dice/parser.rb +1 -1
  22. data/lib/bcdice/game_system/AngelGear.rb +1 -1
  23. data/lib/bcdice/game_system/AnimaAnimus.rb +1 -1
  24. data/lib/bcdice/game_system/Arianrhod.rb +4 -4
  25. data/lib/bcdice/game_system/AssaultEngine.rb +3 -3
  26. data/lib/bcdice/game_system/Ayabito.rb +170 -4
  27. data/lib/bcdice/game_system/BeastBindTrinity.rb +1 -1
  28. data/lib/bcdice/game_system/BeginningIdol.rb +4 -2
  29. data/lib/bcdice/game_system/BeginningIdol2022.rb +184 -0
  30. data/lib/bcdice/game_system/BladeOfArcana.rb +3 -3
  31. data/lib/bcdice/game_system/Bloodorium.rb +68 -0
  32. data/lib/bcdice/game_system/ConvictorDrive.rb +117 -0
  33. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
  34. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
  35. data/lib/bcdice/game_system/CyberpunkRed.rb +2 -6
  36. data/lib/bcdice/game_system/DeadlineHeroes.rb +1 -1
  37. data/lib/bcdice/game_system/DungeonsAndDragons5.rb +196 -0
  38. data/lib/bcdice/game_system/EmbryoMachine.rb +4 -4
  39. data/lib/bcdice/game_system/Emoklore.rb +8 -8
  40. data/lib/bcdice/game_system/FutariSousa.rb +31 -5
  41. data/lib/bcdice/game_system/GURPS.rb +1 -1
  42. data/lib/bcdice/game_system/GehennaAn.rb +2 -2
  43. data/lib/bcdice/game_system/GhostLive.rb +144 -0
  44. data/lib/bcdice/game_system/GoblinSlayer.rb +30 -8
  45. data/lib/bcdice/game_system/HunterTheReckoning5th.rb +152 -0
  46. data/lib/bcdice/game_system/IfIfIf.rb +648 -0
  47. data/lib/bcdice/game_system/Kutulu.rb +95 -0
  48. data/lib/bcdice/game_system/LostRoyal.rb +1 -1
  49. data/lib/bcdice/game_system/NobunagasBlackCastle.rb +237 -0
  50. data/lib/bcdice/game_system/OracleEngine.rb +1 -1
  51. data/lib/bcdice/game_system/Raisondetre.rb +1 -1
  52. data/lib/bcdice/game_system/RokumonSekai2.rb +1 -1
  53. data/lib/bcdice/game_system/SajinsenkiAGuS.rb +154 -0
  54. data/lib/bcdice/game_system/Sengensyou.rb +59 -0
  55. data/lib/bcdice/game_system/ShinkuuGakuen.rb +1 -1
  56. data/lib/bcdice/game_system/ShinobiGami.rb +14 -1
  57. data/lib/bcdice/game_system/SkynautsBouken.rb +93 -2
  58. data/lib/bcdice/game_system/StellarLife.rb +1 -1
  59. data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -1
  60. data/lib/bcdice/game_system/SwordWorld.rb +2 -2
  61. data/lib/bcdice/game_system/SwordWorld2_0_SimplifiedChinese.rb +84 -0
  62. data/lib/bcdice/game_system/SwordWorld2_5_SimplifiedChinese.rb +95 -0
  63. data/lib/bcdice/game_system/SwordWorld_SimplifiedChinese.rb +29 -0
  64. data/lib/bcdice/game_system/TherapieSein.rb +2 -2
  65. data/lib/bcdice/game_system/Torg.rb +1 -1
  66. data/lib/bcdice/game_system/TorgEternity.rb +54 -18
  67. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +26 -12
  68. data/lib/bcdice/game_system/VisionConnect.rb +135 -0
  69. data/lib/bcdice/game_system/Warhammer4.rb +4 -0
  70. data/lib/bcdice/game_system/WorldOfDarkness.rb +54 -50
  71. data/lib/bcdice/game_system/cthulhu7th/full_auto.rb +1 -1
  72. data/lib/bcdice/game_system/filled_with/tresure_tables.rb +1 -1
  73. data/lib/bcdice/game_system/satasupe/tables.rb +1 -1
  74. data/lib/bcdice/game_system/sword_world/rating_parser.rb +1 -1
  75. data/lib/bcdice/game_system.rb +15 -0
  76. data/lib/bcdice/version.rb +1 -1
  77. metadata +26 -6
@@ -0,0 +1,57 @@
1
+ zh_hans:
2
+ SwordWorld2_5:
3
+ AbyssCurseTable:
4
+ name: 奈落诅咒表
5
+ items:
6
+ -
7
+ - 「自伤的」 装备时 该武具的装备者造成暴击时,装备者的HP减少5点。
8
+ - 「悲叹的」 装备时 周围有敌人时,会紧张到泪流不止。在战斗中无法选取「射程:施术者」和「射程:接触」以外的效果对象。
9
+ - 「仁慈的」 装备时 会对敌人心存怜悯。以敌对角色为对象时,如果对象已经减少了1点以上的HP,则命中力判定、魔法行使判定受到-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
+ - 「湿软的」 携带时 武具质感像是吸了水一样软塌塌的。追加伤害-2(武器)、防护点-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: ["断空", "冲击", "毒", "疾病", "诅咒", "精神效果"]
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # DO NOT MODIFY!!!!
3
- # This file is automatically generated by Racc 1.5.1
3
+ # This file is automatically generated by Racc 1.6.2
4
4
  # from Racc grammar file "".
5
5
  #
6
6
 
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # DO NOT MODIFY!!!!
3
- # This file is automatically generated by Racc 1.5.1
3
+ # This file is automatically generated by Racc 1.6.2
4
4
  # from Racc grammar file "".
5
5
  #
6
6
 
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # DO NOT MODIFY!!!!
3
- # This file is automatically generated by Racc 1.5.1
3
+ # This file is automatically generated by Racc 1.6.2
4
4
  # from Racc grammar file "".
5
5
  #
6
6
 
@@ -48,58 +48,64 @@ end
48
48
  ##### State transition tables begin ###
49
49
 
50
50
  racc_action_table = [
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,
54
- 8, 9, 12, 13, 12, 8, 9, 8, 9, 12,
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 ]
51
+ 14, 14, 50, 12, 51, 19, 20, 14, 14, 14,
52
+ 12, 3, 12, 17, 18, 14, 8, 9, 12, 4,
53
+ 13, 13, 28, 8, 9, 8, 9, 13, 13, 13,
54
+ 14, 8, 9, 12, 15, 13, 14, 23, 14, 12,
55
+ 56, 12, 19, 20, 57, 14, 8, 9, 12, nil,
56
+ 13, nil, 8, 9, 8, 9, 13, 14, 13, nil,
57
+ 12, 8, 9, 14, 16, 13, -27, -27, 19, 20,
58
+ -27, 17, 18, 8, 9, nil, 42, 13, nil, 17,
59
+ 18, 40, 39, 13, nil, 38, -28, -28, 40, 39,
60
+ -28, nil, 38, 45, 47, 44, 46, 52, 53, 54,
61
+ 55 ]
60
62
 
61
63
  racc_action_check = [
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 ]
64
+ 16, 12, 38, 16, 38, 6, 6, 2, 36, 8,
65
+ 2, 0, 8, 27, 27, 9, 16, 16, 9, 1,
66
+ 16, 12, 16, 2, 2, 8, 8, 2, 36, 8,
67
+ 13, 9, 9, 13, 4, 9, 17, 11, 18, 17,
68
+ 50, 18, 29, 29, 51, 19, 13, 13, 19, nil,
69
+ 13, nil, 17, 17, 18, 18, 17, 20, 18, nil,
70
+ 20, 19, 19, 23, 5, 19, 23, 23, 30, 30,
71
+ 23, 25, 25, 20, 20, nil, 25, 20, nil, 5,
72
+ 5, 24, 24, 23, nil, 24, 33, 33, 34, 34,
73
+ 33, nil, 34, 32, 32, 32, 32, 39, 39, 40,
74
+ 40 ]
71
75
 
72
76
  racc_action_pointer = [
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 ]
77
+ 7, 19, 5, nil, 34, 61, -15, nil, 7, 13,
78
+ nil, 32, -1, 28, nil, nil, -2, 34, 36, 43,
79
+ 55, nil, nil, 61, 76, 53, nil, -5, nil, 22,
80
+ 48, nil, 79, 81, 83, nil, 6, nil, -8, 90,
81
+ 92, nil, nil, nil, nil, nil, nil, nil, nil, nil,
82
+ 29, 31, nil, nil, nil, nil, nil, nil ]
79
83
 
80
84
  racc_action_default = [
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 ]
85
+ -3, -41, -41, -4, -41, -1, -9, -12, -41, -41,
86
+ -20, -26, -41, -41, -40, 58, -41, -41, -41, -41,
87
+ -41, -18, -19, -22, -24, -41, -2, -5, -6, -7,
88
+ -8, -10, -13, -21, -41, -25, -37, -30, -41, -41,
89
+ -41, -38, -39, -11, -14, -15, -16, -17, -23, -29,
90
+ -41, -41, -33, -34, -35, -36, -31, -32 ]
87
91
 
88
92
  racc_goto_table = [
89
- 31, 5, 20, 21, 27, 28, 1, 2, 24, 34,
90
- 32, 23, 29, 30, 25, 39, 40, 44, 45 ]
93
+ 24, 5, 21, 22, 29, 30, 35, 1, 2, 26,
94
+ 43, 33, 25, 31, 32, 27, 48, 34, nil, nil,
95
+ nil, nil, nil, nil, 49 ]
91
96
 
92
97
  racc_goto_check = [
93
- 9, 3, 6, 6, 5, 5, 1, 2, 4, 7,
94
- 10, 3, 6, 6, 3, 11, 12, 13, 9 ]
98
+ 9, 3, 6, 6, 5, 5, 11, 1, 2, 4,
99
+ 7, 9, 3, 6, 6, 3, 11, 10, nil, nil,
100
+ nil, nil, nil, nil, 9 ]
95
101
 
96
102
  racc_goto_pointer = [
97
- nil, 6, 7, -1, -7, -12, -6, -21, nil, -22,
98
- -12, -17, -16, -15 ]
103
+ nil, 7, 8, -1, -7, -13, -6, -22, nil, -12,
104
+ -6, -18, nil, nil, nil ]
99
105
 
100
106
  racc_goto_default = [
101
107
  nil, nil, nil, nil, nil, 6, 7, nil, 10, 11,
102
- nil, nil, nil, nil ]
108
+ nil, nil, 36, 37, 41 ]
103
109
 
104
110
  racc_reduce_table = [
105
111
  0, 0, :racc_error,
@@ -126,24 +132,27 @@ racc_reduce_table = [
126
132
  3, 33, :_reduce_21,
127
133
  2, 33, :_reduce_22,
128
134
  4, 33, :_reduce_23,
129
- 5, 33, :_reduce_24,
135
+ 2, 33, :_reduce_24,
136
+ 3, 33, :_reduce_25,
130
137
  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
+ 0, 35, :_reduce_27,
139
+ 1, 35, :_reduce_28,
140
+ 2, 36, :_reduce_29,
141
+ 1, 36, :_reduce_30,
142
+ 3, 39, :_reduce_31,
143
+ 3, 39, :_reduce_32,
138
144
  2, 37, :_reduce_33,
139
- 1, 36, :_reduce_none,
140
- 1, 36, :_reduce_none,
141
- 3, 34, :_reduce_36,
142
- 1, 34, :_reduce_37 ]
145
+ 2, 37, :_reduce_34,
146
+ 2, 37, :_reduce_35,
147
+ 2, 37, :_reduce_36,
148
+ 1, 38, :_reduce_none,
149
+ 1, 38, :_reduce_none,
150
+ 3, 34, :_reduce_39,
151
+ 1, 34, :_reduce_40 ]
143
152
 
144
- racc_reduce_n = 38
153
+ racc_reduce_n = 41
145
154
 
146
- racc_shift_n = 54
155
+ racc_shift_n = 58
147
156
 
148
157
  racc_token_table = {
149
158
  false => 0,
@@ -229,8 +238,9 @@ Racc_token_to_s_table = [
229
238
  "dice",
230
239
  "term",
231
240
  "explicit_or_implicit_sides",
232
- "filter_type_with_shorthand",
241
+ "filter",
233
242
  "filter_type",
243
+ "filter_type_with_shorthand",
234
244
  "filter_shorthand" ]
235
245
 
236
246
  Racc_debug_parser = false
@@ -372,83 +382,105 @@ end
372
382
  def _reduce_23(val, _values, result)
373
383
  times = val[0]
374
384
  sides = val[2]
375
- filter = val[3]
385
+ filter = val[3][:filter]
386
+ n_filtering = val[3][:n_filtering]
376
387
 
377
388
  raise ParseError if sides != :implicit && sides.include_dice?
378
- raise ParseError if times.include_dice?
389
+ raise ParseError if times.include_dice? || n_filtering.include_dice?
379
390
 
380
- n_filtering = Node::Number.new(1)
381
391
  result = Node::DiceRollWithFilter.new(times, sides, n_filtering, filter)
382
392
 
383
393
  result
384
394
  end
385
395
 
386
396
  def _reduce_24(val, _values, result)
387
- times = val[0]
388
- sides = val[2]
389
- filter = val[3]
390
- n_filtering = val[4]
397
+ times = Node::Number.new(1)
398
+ sides = val[1]
399
+ raise ParseError if sides.include_dice?
400
+ raise ParseError if sides.instance_of?(Node::Number) && sides.literal == 66
401
+
402
+ result = Node::DiceRoll.new(times, sides)
403
+
404
+ result
405
+ end
406
+
407
+ def _reduce_25(val, _values, result)
408
+ times = Node::Number.new(1)
409
+ sides = val[1]
410
+ filter = val[2][:filter]
411
+ n_filtering = val[2][:n_filtering]
391
412
 
392
413
  raise ParseError if sides != :implicit && sides.include_dice?
393
- raise ParseError if times.include_dice? || n_filtering.include_dice?
414
+ raise ParseError if n_filtering.include_dice?
415
+ raise ParseError if sides.instance_of?(Node::Number) && sides.literal == 66
394
416
 
395
417
  result = Node::DiceRollWithFilter.new(times, sides, n_filtering, filter)
396
418
 
397
419
  result
398
420
  end
399
421
 
400
- # reduce 25 omitted
422
+ # reduce 26 omitted
401
423
 
402
- def _reduce_26(val, _values, result)
424
+ def _reduce_27(val, _values, result)
403
425
  result = :implicit
404
426
  result
405
427
  end
406
428
 
407
- def _reduce_27(val, _values, result)
429
+ def _reduce_28(val, _values, result)
408
430
  result = val[0]
409
431
  result
410
432
  end
411
433
 
412
- def _reduce_28(val, _values, result)
434
+ def _reduce_29(val, _values, result)
435
+ result = {filter: val[0], n_filtering: val[1]}
436
+ result
437
+ end
438
+
439
+ def _reduce_30(val, _values, result)
440
+ result = {filter: val[0], n_filtering: Node::Number.new(1)}
441
+ result
442
+ end
443
+
444
+ def _reduce_31(val, _values, result)
413
445
  result = Node::DiceRollWithFilter::KEEP_HIGHEST
414
446
  result
415
447
  end
416
448
 
417
- def _reduce_29(val, _values, result)
449
+ def _reduce_32(val, _values, result)
418
450
  result = Node::DiceRollWithFilter::KEEP_LOWEST
419
451
  result
420
452
  end
421
453
 
422
- def _reduce_30(val, _values, result)
454
+ def _reduce_33(val, _values, result)
423
455
  result = Node::DiceRollWithFilter::KEEP_HIGHEST
424
456
  result
425
457
  end
426
458
 
427
- def _reduce_31(val, _values, result)
459
+ def _reduce_34(val, _values, result)
428
460
  result = Node::DiceRollWithFilter::KEEP_LOWEST
429
461
  result
430
462
  end
431
463
 
432
- def _reduce_32(val, _values, result)
464
+ def _reduce_35(val, _values, result)
433
465
  result = Node::DiceRollWithFilter::DROP_HIGHEST
434
466
  result
435
467
  end
436
468
 
437
- def _reduce_33(val, _values, result)
469
+ def _reduce_36(val, _values, result)
438
470
  result = Node::DiceRollWithFilter::DROP_LOWEST
439
471
  result
440
472
  end
441
473
 
442
- # reduce 34 omitted
474
+ # reduce 37 omitted
443
475
 
444
- # reduce 35 omitted
476
+ # reduce 38 omitted
445
477
 
446
- def _reduce_36(val, _values, result)
478
+ def _reduce_39(val, _values, result)
447
479
  result = Node::Parenthesis.new(val[1])
448
480
  result
449
481
  end
450
482
 
451
- def _reduce_37(val, _values, result)
483
+ def _reduce_40(val, _values, result)
452
484
  result = Node::Number.new(val[0])
453
485
  result
454
486
  end
@@ -7,7 +7,7 @@ require "bcdice/common_command/add_dice/randomizer"
7
7
  module BCDice
8
8
  module CommonCommand
9
9
  module AddDice
10
- PREFIX_PATTERN = /[+\-(]*\d+/.freeze
10
+ PREFIX_PATTERN = /[+\-(]*(\d+|D\d+)/.freeze
11
11
 
12
12
  class << self
13
13
  def eval(command, game_system, randomizer)
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # DO NOT MODIFY!!!!
3
- # This file is automatically generated by Racc 1.5.1
3
+ # This file is automatically generated by Racc 1.6.2
4
4
  # from Racc grammar file "".
5
5
  #
6
6
 
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # DO NOT MODIFY!!!!
3
- # This file is automatically generated by Racc 1.5.1
3
+ # This file is automatically generated by Racc 1.6.2
4
4
  # from Racc grammar file "".
5
5
  #
6
6
 
@@ -20,7 +20,7 @@ module BCDice
20
20
  def parse(command, game_system)
21
21
  command = command.split(" ", 2).first
22
22
 
23
- m = /^(S)?D66([ANSD])?$/i.match(command)
23
+ m = /^(S)?D66([ANSD])?$/i.match(command.upcase)
24
24
  return nil unless m
25
25
 
26
26
  new(
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # DO NOT MODIFY!!!!
3
- # This file is automatically generated by Racc 1.5.1
3
+ # This file is automatically generated by Racc 1.6.2
4
4
  # from Racc grammar file "".
5
5
  #
6
6
 
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # DO NOT MODIFY!!!!
3
- # This file is automatically generated by Racc 1.5.1
3
+ # This file is automatically generated by Racc 1.6.2
4
4
  # from Racc grammar file "".
5
5
  #
6
6
 
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # DO NOT MODIFY!!!!
3
- # This file is automatically generated by Racc 1.5.1
3
+ # This file is automatically generated by Racc 1.6.2
4
4
  # from Racc grammar file "".
5
5
  #
6
6
 
@@ -36,7 +36,7 @@ module BCDice
36
36
  end
37
37
 
38
38
  def eval_game_system_specific_command(command)
39
- if (m = /^(\d+)AG(\d+)?(([+\-]\d+)*)$/.match(command))
39
+ if (m = /^(\d+)AG(\d+)?(([+-]\d+)*)$/.match(command))
40
40
  resolute_action(m[1].to_i, m[2]&.to_i, m[3], command)
41
41
  else
42
42
  roll_tables(command, TABLES)
@@ -32,7 +32,7 @@ module BCDice
32
32
  MESSAGETEXT
33
33
 
34
34
  def eval_game_system_specific_command(command)
35
- m = /(\d+)AN<=(\d+([+\-]\d+)*)/i.match(command)
35
+ m = /(\d+)AN<=(\d+([+-]\d+)*)/i.match(command)
36
36
  if TABLES.key?(command)
37
37
  return roll_tables(command, TABLES)
38
38
  elsif m
@@ -30,16 +30,16 @@ module BCDice
30
30
 
31
31
  if dice_list.count(1) == dice_list.size
32
32
  # 全部1の目ならファンブル
33
- Result.fumble("ファンブル")
33
+ Result.fumble(translate("fumble"))
34
34
  elsif n_max >= 2
35
35
  # 2個以上6の目があったらクリティカル
36
- Result.critical("クリティカル(+#{n_max}D6)")
36
+ Result.critical(translate("Arianrhod.critical", dice: n_max))
37
37
  elsif cmp_op != :>= || target == '?'
38
38
  nil
39
39
  elsif total >= target
40
- Result.success("成功")
40
+ Result.success(translate("success"))
41
41
  else
42
- Result.failure("失敗")
42
+ Result.failure(translate("failure"))
43
43
  end
44
44
  end
45
45
  end
@@ -44,7 +44,7 @@ module BCDice
44
44
  r1 = judge(target, total)
45
45
  r2 = judge(target, swap)
46
46
  text = "(AES#{format00(target)}) > #{r1.text} / スワップ#{r2.text}"
47
- check_result(r1, r2, text)
47
+ return_result(r1, r2, text)
48
48
  elsif cmd.prefix_number.nil? # 初回ロール
49
49
  total = @randomizer.roll_once(100) % 100 # 0-99
50
50
  judge(target, total).tap do |r|
@@ -57,7 +57,7 @@ module BCDice
57
57
  new2 = judge(target, now % 10 + die * 10) # 10の位を振り直す
58
58
 
59
59
  text = "(#{format00(now)}AE#{format00(target)}) > #{die} > #{new1.text} / #{new2.text}"
60
- check_result(new1, new2, text)
60
+ return_result(new1, new2, text)
61
61
  end
62
62
  end
63
63
 
@@ -65,7 +65,7 @@ module BCDice
65
65
  format("%02d", dice)
66
66
  end
67
67
 
68
- def check_result(result1, result2, text)
68
+ def return_result(result1, result2, text)
69
69
  if result1.critical? || result2.critical?
70
70
  Result.critical(text)
71
71
  elsif result1.success? || result2.success?