bcdice 3.7.0 → 3.8.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.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +31 -0
  3. data/i18n/Arianrhod/ja_jp.yml +3 -0
  4. data/i18n/Emoklore/ja_jp.yml +7 -0
  5. data/i18n/SwordWorld/ja_jp.yml +1 -0
  6. data/i18n/SwordWorld/zh_hans.yml +7 -0
  7. data/i18n/SwordWorld2_0/zh_hans.yml +37 -0
  8. data/i18n/SwordWorld2_5/ja_jp.yml +1 -1
  9. data/i18n/SwordWorld2_5/zh_hans.yml +57 -0
  10. data/lib/bcdice/arithmetic/parser.rb +1 -1
  11. data/lib/bcdice/command/parser.rb +1 -1
  12. data/lib/bcdice/common_command/add_dice/parser.rb +1 -1
  13. data/lib/bcdice/common_command/barabara_dice/parser.rb +1 -1
  14. data/lib/bcdice/common_command/calc/parser.rb +1 -1
  15. data/lib/bcdice/common_command/reroll_dice/parser.rb +1 -1
  16. data/lib/bcdice/common_command/tally_dice/parser.rb +1 -1
  17. data/lib/bcdice/common_command/upper_dice/parser.rb +1 -1
  18. data/lib/bcdice/game_system/AngelGear.rb +1 -1
  19. data/lib/bcdice/game_system/AnimaAnimus.rb +1 -1
  20. data/lib/bcdice/game_system/Arianrhod.rb +4 -4
  21. data/lib/bcdice/game_system/AssaultEngine.rb +3 -3
  22. data/lib/bcdice/game_system/BeastBindTrinity.rb +1 -1
  23. data/lib/bcdice/game_system/BeginningIdol.rb +2 -2
  24. data/lib/bcdice/game_system/BeginningIdol2022.rb +2 -2
  25. data/lib/bcdice/game_system/BladeOfArcana.rb +3 -3
  26. data/lib/bcdice/game_system/Bloodorium.rb +68 -0
  27. data/lib/bcdice/game_system/ConvictorDrive.rb +117 -0
  28. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
  29. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
  30. data/lib/bcdice/game_system/CyberpunkRed.rb +2 -6
  31. data/lib/bcdice/game_system/DeadlineHeroes.rb +1 -1
  32. data/lib/bcdice/game_system/DungeonsAndDragons5.rb +196 -0
  33. data/lib/bcdice/game_system/EmbryoMachine.rb +4 -4
  34. data/lib/bcdice/game_system/Emoklore.rb +8 -8
  35. data/lib/bcdice/game_system/FutariSousa.rb +1 -0
  36. data/lib/bcdice/game_system/GURPS.rb +1 -1
  37. data/lib/bcdice/game_system/GehennaAn.rb +2 -2
  38. data/lib/bcdice/game_system/HunterTheReckoning5th.rb +152 -0
  39. data/lib/bcdice/game_system/LostRoyal.rb +1 -1
  40. data/lib/bcdice/game_system/NobunagasBlackCastle.rb +237 -0
  41. data/lib/bcdice/game_system/OracleEngine.rb +1 -1
  42. data/lib/bcdice/game_system/Raisondetre.rb +1 -1
  43. data/lib/bcdice/game_system/RokumonSekai2.rb +1 -1
  44. data/lib/bcdice/game_system/SajinsenkiAGuS.rb +154 -0
  45. data/lib/bcdice/game_system/ShinkuuGakuen.rb +1 -1
  46. data/lib/bcdice/game_system/ShinobiGami.rb +14 -1
  47. data/lib/bcdice/game_system/SkynautsBouken.rb +93 -2
  48. data/lib/bcdice/game_system/StellarLife.rb +1 -1
  49. data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -1
  50. data/lib/bcdice/game_system/SwordWorld.rb +2 -2
  51. data/lib/bcdice/game_system/SwordWorld2_0_SimplifiedChinese.rb +84 -0
  52. data/lib/bcdice/game_system/SwordWorld2_5_SimplifiedChinese.rb +95 -0
  53. data/lib/bcdice/game_system/SwordWorld_SimplifiedChinese.rb +29 -0
  54. data/lib/bcdice/game_system/TherapieSein.rb +2 -2
  55. data/lib/bcdice/game_system/Torg.rb +1 -1
  56. data/lib/bcdice/game_system/TorgEternity.rb +54 -18
  57. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +26 -12
  58. data/lib/bcdice/game_system/Warhammer4.rb +4 -0
  59. data/lib/bcdice/game_system/WorldOfDarkness.rb +17 -9
  60. data/lib/bcdice/game_system/cthulhu7th/full_auto.rb +1 -1
  61. data/lib/bcdice/game_system/filled_with/tresure_tables.rb +1 -1
  62. data/lib/bcdice/game_system/sword_world/rating_parser.rb +1 -1
  63. data/lib/bcdice/game_system.rb +9 -0
  64. data/lib/bcdice/version.rb +1 -1
  65. metadata +17 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 549213eee4c66ba0d8f1ac67dba3d40ec4bc0075eefc82e30677f40974a1ca0f
4
- data.tar.gz: 7d4c8f64ecd1ae772539e636858f82681ef9b5e7327b7a0c848527706077a481
3
+ metadata.gz: 6d8674329cd5ca8a6efb98b170e0e3ddb5bb4a3fe527ee92fa0e3f1fefffa470
4
+ data.tar.gz: 0abbe4f8973133644242a2b337138bd9297b4754dfe3be33046760836d90b4b3
5
5
  SHA512:
6
- metadata.gz: 8c80436773cfd8e9f462af97fcc9a174d4aa8eea7f7a67666bf50ed8d3281d51ba11485167f7d0ba019184252f6aa3592f6f81c85341ab4f0b4fec4ae6122f61
7
- data.tar.gz: afaf092cc4883751df7356cae5ce87b165a3b109b32e990589f2957c45b122c789fa14ce354c0168100169da7a3a4e4178ad1c9c13e09d10138730e17d6c528b
6
+ metadata.gz: 68c14cfcd28b29d424d37d65ae9e00e09fc3d6da8280df7f190fb18c674b838f9cbf8053f6b94e1f3540c5c981985d0d33d0466362caacbd5a253712f7dc0461
7
+ data.tar.gz: 7acf5a2bb802bfffa9338a5a6a06f6070d27fcb5e62ce9d0ad51df987fae2ac818cb4acb5aba6c467f2872bf7419bc7c242a66dba08006014eddca60e9604738
data/CHANGELOG.md CHANGED
@@ -1,5 +1,36 @@
1
1
  # Change Log
2
2
 
3
+ ## 3.8.0 2023/02/18
4
+
5
+ ### 対応ゲームシステムの追加
6
+ - 信長の黒い城 (NobunagasBlackCastle): Facelessさんありがとうっ! ([#577](https://github.com/bcdice/BCDice/pull/577))
7
+ - 砂塵戦機アーガス (SajinsenkiAGuS): 猫あきら。さんありがとうっ! ([#582](https://github.com/bcdice/BCDice/pull/582))
8
+ - Hunter: The Reckoning 5th Edition (HunterTheReckoning5th): フレッド緑野さんありがとうっ! ([#589](https://github.com/bcdice/BCDice/pull/589))
9
+ - コンヴィクター・ドライブ (ConvictorDrive): 三木里 秀予さんありがとうっ! ([#590](https://github.com/bcdice/BCDice/pull/590))
10
+ - ダンジョンズ&ドラゴンズ第5版 (DungeonsAndDragons5): Facelessさんありがとうっ! ([#594](https://github.com/bcdice/BCDice/pull/594))
11
+ - 中国語 簡体字版 ソード・ワールド系 (SwordWorld:SimplifiedChinese, SwordWorld2.0:SimplifiedChinese, SwordWorld2.5:SimplifiedChinese): 冬子さん翻訳ありがとうっ! ([#595](https://github.com/bcdice/BCDice/pull/595))
12
+ - ブラドリウム (Bloodorium): ([#599](https://github.com/bcdice/BCDice/pull/599))
13
+
14
+ ### 追加機能
15
+ - ワールド・オブ・ダークネス: 振り足しの1で成功数の打ち消しが発生するコマンド(STB)を追加。フレッド緑野さんありがとうっ! ([#571](https://github.com/bcdice/BCDice/pull/571))
16
+ - トーグ エタニティ: 高揚コマンドで修正値指定が出来るように拡張。Facelessさんありがとうっ! ([#577](https://github.com/bcdice/BCDice/pull/577))
17
+ - Vampire: The Masquerade 5th Edition: 判定コマンドの難易度省略時に判定結果のヒント出力を追加。フレッド緑野さんありがとうっ! ([#581](https://github.com/bcdice/BCDice/pull/581))
18
+ - Vampire: The Masquerade 5th Edition: 難易度指定時に成功差分を表示する機能を追加。フレッド緑野さんありがとうっ! ([#591](https://github.com/bcdice/BCDice/pull/591))
19
+ - 歯車の塔の探空士(冒険企画局): 航行イベント表を追加。前田さんありがとうっ! ([#601](https://github.com/bcdice/BCDice/pull/601))
20
+
21
+ ### 変更
22
+ - シノビガミ: ファンブル表の内容を改訂版に変更。 ([#588](https://github.com/bcdice/BCDice/pull/588))
23
+
24
+ ### 誤植修正
25
+ - フタリソウサ: ヘルプメッセージにイベント表の記載漏れを追記。あまねさんありがとうっ! ([#580](https://github.com/bcdice/BCDice/pull/580))
26
+ - ウォーハンマーRPG第4版: SLの誤植を修正。Facelessさんありがとうっ! ([#585](https://github.com/bcdice/BCDice/pull/585))
27
+ - シノビガミ: 怪変調表の誤植を修正。なす車さんありがとうっ! ([#600](https://github.com/bcdice/BCDice/pull/600))
28
+
29
+ ### バグ修正
30
+ - サイバーパンクRED: 判定コマンドの比較記号の誤りを修正。Roratioさん指摘ありがとうっ! ([#587](https://github.com/bcdice/BCDice/pull/587))
31
+ - アサルトエンジン: 加算ダイスを実行できないバグを修正。ぽてちさん報告、蜂紫さん修正ありがとうっ! ([#598](https://github.com/bcdice/BCDice/pull/598))
32
+
33
+
3
34
  ## 3.7.0 2022/10/21
4
35
 
5
36
  ### 対応ゲームシステムの追加
@@ -0,0 +1,3 @@
1
+ ja_jp:
2
+ Arianrhod:
3
+ critical: "クリティカル(+%{dice}D6)"
@@ -0,0 +1,7 @@
1
+ ja_jp:
2
+ Emoklore:
3
+ success_count: "成功数%{count}"
4
+ double: ダブル
5
+ triple: トリプル
6
+ miracle: ミラクル
7
+ catastrophe: カタストロフ
@@ -4,3 +4,4 @@ ja_jp:
4
4
  fumble: 自動的失敗
5
5
  keynumber_exceeds: キーナンバーは%{keyMax}までです
6
6
  infinite_critical: C値を%{min_critical}以上にしてください
7
+ round_text: "%{reroll_count}回転"
@@ -0,0 +1,7 @@
1
+ zh_hans:
2
+ SwordWorld:
3
+ critical: 自动成功
4
+ fumble: 自动失败
5
+ keynumber_exceeds: 威力最大为%{keyMax}
6
+ infinite_critical: 请输入%{min_critical}以上的C值
7
+ round_text: "%{reroll_count}暴击"
@@ -0,0 +1,37 @@
1
+ zh_hans:
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的惩罚修正。且失去该部位提供的加值。 ※不存在这样的部位时重新决定
@@ -20,7 +20,7 @@ ja_jp:
20
20
  -
21
21
  - 「たどたどしい」 装備時 話をする時に言葉に詰まったり、言い間違えたりしやすくなる。魔法行使判定に-1のペナルティ修正を受ける。
22
22
  - 「代弁する」 装備時 自身の会話は、そのまま武具が魔法文明語の聞き取りづらい声で話す。装備中は魔法文明語以外の言語で会話は行えず、妖精魔法、魔動機術を行使できなくなる。
23
- - 「施しは受けない」 装備時 戦闘中、「抵抗:任意」の効果を受け入れた場合、次の手番終了時まで生命抵抗力、精神抵抗力に-2のペナルティ修正を受ける。
23
+ - 「施しは受けない」 装備時 戦闘中、「抵抗:任意」の効果を受け入れた場合、次の手番開始時まで生命抵抗力、精神抵抗力に-2のペナルティ修正を受ける。
24
24
  - 「死に近い」 携行時 常に生死判定に「冒険者レベル」と同じ値のペナルティ修正を受ける。
25
25
  - 「おしゃれな」 携行時 その武具を常に華美に飾りたくなる。収入を得るたび、その1割以上をこの武具の装飾に費やさなければならない(効果などに変化はない)。
26
26
  - 「マナを吸う」 携行時 魔法や練技など、自身の意思でMPを消費する効果を使用する場合、すべてのMP消費が1点上昇する。
@@ -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.2
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.2
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.2
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.2
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.2
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.2
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.2
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.2
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?
@@ -115,7 +115,7 @@ module BCDice
115
115
  private
116
116
 
117
117
  def parse()
118
- m = /^(\d+)(?:R6|BB6?)((?:[+\-]\d+)+)?(?:%(-?\d+))?(?:@([+\-\d]+))?(?:#(A)?([+\-\d]+))?(?:\$([1-6]+))?(?:&([1-6]))?(?:([>=]+)(\d+))?$/.match(@command)
118
+ m = /^(\d+)(?:R6|BB6?)((?:[+-]\d+)+)?(?:%(-?\d+))?(?:@([+\-\d]+))?(?:#(A)?([+\-\d]+))?(?:\$([1-6]+))?(?:&([1-6]))?(?:([>=]+)(\d+))?$/.match(@command)
119
119
  unless m
120
120
  @parse_error = true
121
121
  return
@@ -145,7 +145,7 @@ module BCDice
145
145
  end
146
146
 
147
147
  def roll_attack(command)
148
- m = /^(\d+)(S?)A([1-6]*)([+\-]\d+)?$/.match(command)
148
+ m = /^(\d+)(S?)A([1-6]*)([+-]\d+)?$/.match(command)
149
149
  unless m
150
150
  return nil
151
151
  end
@@ -179,7 +179,7 @@ module BCDice
179
179
  end
180
180
 
181
181
  def roll_performance(command)
182
- m = /^([1-7]*)PD(\d+)([+\-]\d+)?$/.match(command)
182
+ m = /^([1-7]*)PD(\d+)([+-]\d+)?$/.match(command)
183
183
  unless m
184
184
  return nil
185
185
  end
@@ -91,7 +91,7 @@ module BCDice
91
91
 
92
92
  # パフォーマンス判定
93
93
  def roll_performance_check(command)
94
- m = /^PD(\d+)([+\-]\d+)?$/.match(command)
94
+ m = /^PD(\d+)([+-]\d+)?$/.match(command)
95
95
  unless m
96
96
  return nil
97
97
  end
@@ -145,7 +145,7 @@ module BCDice
145
145
 
146
146
  # シンフォニー
147
147
  def roll_symphony_check(command)
148
- m = /^([1-6]+)PD([1-6])([+\-]\d+)?$/.match(command)
148
+ m = /^([1-6]+)PD([1-6])([+-]\d+)?$/.match(command)
149
149
  unless m
150
150
  return nil
151
151
  end
@@ -66,7 +66,7 @@ module BCDice
66
66
  end
67
67
  return rollAct(counts, judgment, critical, fumble)
68
68
 
69
- when /^CT3([+\-]?)$/
69
+ when /^CT3([+-]?)$/
70
70
  sign = Regexp.last_match(1)
71
71
  title = '因縁表(The 3rd) 『BoA3』P292'
72
72
  table = [
@@ -95,7 +95,7 @@ module BCDice
95
95
  ]
96
96
  return tableText(title, table, sign)
97
97
 
98
- when /^CTR([+\-]?)$/
98
+ when /^CTR([+-]?)$/
99
99
  sign = Regexp.last_match(1)
100
100
  title = '因縁表(リインカーネイション) 『BAR』P51、299'
101
101
  table = [
@@ -153,7 +153,7 @@ module BCDice
153
153
  ]
154
154
  return tableText(title, table, sign)
155
155
 
156
- when /^AKST([+\-]?)$/
156
+ when /^AKST([+-]?)$/
157
157
  sign = Regexp.last_match(1)
158
158
  title = '悪徳シーン表 『GoV』P16、164'
159
159
  table = [
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class Bloodorium < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'Bloodorium'
8
+
9
+ # ゲームシステム名
10
+ NAME = 'ブラドリウム'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'ふらとりうむ'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
17
+ ・ダイスチェック xDC+y
18
+  【ダイスチェック】を行う。《トライアンフ》を結果に自動反映する。
19
+  x: ダイス数
20
+  y: 結果への修正値 (省略可)
21
+ INFO_MESSAGE_TEXT
22
+
23
+ register_prefix('\dDC')
24
+
25
+ def eval_game_system_specific_command(command)
26
+ dicecheck(command)
27
+ end
28
+
29
+ private
30
+
31
+ def dicecheck(command)
32
+ parser = Command::Parser.new("DC", round_type: @round_type).has_prefix_number.restrict_cmp_op_to(nil)
33
+ parsed = parser.parse(command)
34
+ unless parsed
35
+ return nil
36
+ end
37
+
38
+ dice_list = @randomizer.roll_barabara(parsed.prefix_number, 6).sort
39
+ dice_value = dice_list.max
40
+ values_count = dice_list
41
+ .group_by(&:itself)
42
+ .transform_values(&:length)
43
+ triumph = values_count.values.max
44
+
45
+ total = dice_value * triumph + parsed.modify_number
46
+
47
+ sequence = [
48
+ "(#{parsed})",
49
+ "[#{dice_list.join(',')}]#{Format.modifier(parsed.modify_number)}",
50
+ ("《トライアンフ》(*#{triumph})" if triumph > 1),
51
+ (total_expr(dice_value, triumph, parsed.modify_number) if total != dice_value),
52
+ total,
53
+ ].compact
54
+
55
+ return Result.new.tap do |r|
56
+ r.critical = triumph > 1
57
+ r.text = sequence.join(" > ")
58
+ end
59
+ end
60
+
61
+ def total_expr(dice_value, triumph, modify_number)
62
+ formated_triumph = triumph > 1 ? "*#{triumph}" : nil
63
+
64
+ return "#{dice_value}#{formated_triumph}#{Format.modifier(modify_number)}"
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,117 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bcdice/base'
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class ConvictorDrive < Base
8
+ # ゲームシステムの識別子
9
+ ID = 'ConvictorDrive'
10
+
11
+ # ゲームシステム名
12
+ NAME = 'コンヴィクター・ドライブ'
13
+
14
+ # ゲームシステム名の読みがな
15
+ #
16
+ # 「ゲームシステム名の読みがなの設定方法」(docs/dicebot_sort_key.md)を参考にして
17
+ # 設定してください
18
+ SORT_KEY = 'こんういくたあとらいふ'
19
+
20
+ # ダイスボットの使い方
21
+ HELP_MESSAGE = <<~MESSAGETEXT
22
+ xCD@z>=y: x個の10面ダイスで目標値y、クリティカルラインzの判定を行う
23
+ SLT: 技能レベル表を振る
24
+ DCT: 遅延イベント表を振る
25
+ MESSAGETEXT
26
+
27
+ TABLES = {
28
+ "SLT" => DiceTable::Table.new(
29
+ "技能ランク表",
30
+ "2D10",
31
+ [
32
+ "ランク外",
33
+ "E-",
34
+ "E",
35
+ "E+",
36
+ "D-",
37
+ "D",
38
+ "D+",
39
+ "C-",
40
+ "C",
41
+ "C+",
42
+ "B-",
43
+ "B",
44
+ "B+",
45
+ "A-",
46
+ "A",
47
+ "A+",
48
+ "S-",
49
+ "S",
50
+ "S+",
51
+ ]
52
+ ),
53
+ "DCT" => DiceTable::Table.new(
54
+ "遅延イベント表",
55
+ "1D10",
56
+ [
57
+ "状況遅延Ⅰ(全員の初期リソースを-1する)",
58
+ "状況遅延Ⅱ(全員の初期リソースを-1する)",
59
+ "状況遅延Ⅲ(全員の初期リソースを-2する)",
60
+ "武装を許すⅠ(ボスの攻撃ダイスを+1dする)",
61
+ "武装を許すⅡ(脅威度4以下のエネミーの攻撃ダイスを2体まで+1dする)",
62
+ "武装を許すⅢ(脅威度3以下のエネミーの攻撃ダイスを1体+2dする)",
63
+ "緊急出撃Ⅰ(ランダムなPCのHPを-1する)",
64
+ "緊急出撃Ⅱ(ランダムなPCのHPを-1する)",
65
+ "緊急出撃Ⅲ(ランダムなPC2人のHPを-1する)",
66
+ "絶望(ダイスを二度振り、二つ適用する)",
67
+ ]
68
+ ),
69
+ }.freeze
70
+
71
+ # ダイスボットで使用するコマンドを配列で列挙する
72
+ register_prefix("[-+*0-9\(\)]*CD", TABLES.keys)
73
+
74
+ def initialize(command)
75
+ super(command)
76
+
77
+ @sides_implicit_d = 10
78
+ end
79
+
80
+ def eval_game_system_specific_command(command)
81
+ debug("eval_game_system_specific_command Begin")
82
+
83
+ return roll_command(command) || roll_tables(command, TABLES)
84
+ end
85
+
86
+ def roll_command(command)
87
+ parser = Command::Parser.new('CD', round_type: round_type)
88
+ .has_prefix_number
89
+ .enable_critical
90
+ .restrict_cmp_op_to(:>=)
91
+ cmd = parser.parse(command)
92
+
93
+ unless cmd
94
+ return nil
95
+ end
96
+
97
+ dice_list = @randomizer.roll_barabara(cmd.prefix_number, 10)
98
+ critical = cmd.critical&.clamp(cmd.target_number, 10) || 10
99
+ succeed_num = dice_list.count { |x| x >= cmd.target_number }
100
+ critical_num = dice_list.count { |x| x >= critical }
101
+
102
+ text = [
103
+ cmd.to_s,
104
+ dice_list.join(','),
105
+ critical_num > 0 ? "クリティカル数#{critical_num}" : nil,
106
+ "成功数#{succeed_num + critical_num}",
107
+ ].compact.join(" > ")
108
+
109
+ return Result.new.tap do |r|
110
+ r.success = succeed_num > 0
111
+ r.critical = critical_num > 0
112
+ r.text = text
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
@@ -210,7 +210,7 @@ module BCDice
210
210
  }
211
211
 
212
212
  # 難度變更用Loop
213
- (0..3).each do |more_difficlty|
213
+ 4.times do |more_difficlty|
214
214
  output += getNextDifficltyMessage(more_difficlty)
215
215
 
216
216
  # ペナルティダイスを減らしながらロール用ループ削減獎勵骰時角色用Loop
@@ -207,7 +207,7 @@ module BCDice
207
207
  }
208
208
 
209
209
  # 난이도 변경용 루프
210
- (0..3).each do |more_difficlty|
210
+ 4.times do |more_difficlty|
211
211
  output += getNextDifficltyMessage(more_difficlty)
212
212
 
213
213
  # 패널티 다이스를 줄이면서 굴리는 용 루프
@@ -67,7 +67,7 @@ module BCDice
67
67
  def cp_roll_result(command)
68
68
  parser = Command::Parser.new('CP', round_type: RoundType::FLOOR)
69
69
  .enable_suffix_number
70
- .restrict_cmp_op_to(nil, :>=)
70
+ .restrict_cmp_op_to(nil, :>)
71
71
  parsed = parser.parse(command)
72
72
  return nil if parsed.nil?
73
73
 
@@ -96,11 +96,7 @@ module BCDice
96
96
  end
97
97
 
98
98
  if parsed.target_number
99
- if total >= parsed.target_number
100
- result.success = true
101
- else
102
- result.failure = true
103
- end
99
+ result.condition = total > parsed.target_number
104
100
  end
105
101
 
106
102
  result.text = "(#{dice_cnt}D#{dice_face}#{Format.modifier(modify_number)}#{parsed.cmp_op}#{parsed.target_number})"
@@ -55,7 +55,7 @@ module BCDice
55
55
  private
56
56
 
57
57
  def resolute_action(command)
58
- m = /^DLH(\d+([+\-]\d+)*)$/.match(command)
58
+ m = /^DLH(\d+([+-]\d+)*)$/.match(command)
59
59
  unless m
60
60
  return nil
61
61
  end