bcdice 3.7.0 → 3.8.0

Sign up to get free protection for your applications and to get access to all the features.
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