bcdice 3.14.0 → 3.16.1

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 (72) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +88 -0
  3. data/i18n/Cthulhu/zh_hant.yml +1 -1
  4. data/i18n/CyberpunkRed/ko_kr.yml +389 -0
  5. data/i18n/DoubleCross/ja_jp.yml +53 -0
  6. data/i18n/DoubleCross/ko_kr.yml +52 -0
  7. data/i18n/Emoklore/ko_kr.yml +7 -0
  8. data/i18n/FutariSousa/ja_jp.yml +138 -138
  9. data/i18n/KillDeathBusiness/ja_jp.yml +198 -0
  10. data/i18n/MagicaLogia/ko_kr.yml +2 -2
  11. data/i18n/MonotoneMuseum/ko_kr.yml +227 -0
  12. data/i18n/SkynautsBouken/ja_jp.yml +28 -28
  13. data/i18n/SkynautsBouken/ko_kr.yml +114 -0
  14. data/i18n/StratoShout/ko_kr.yml +102 -102
  15. data/i18n/zh_hant.yml +5 -0
  16. data/lib/bcdice/game_system/Aionia.rb +131 -0
  17. data/lib/bcdice/game_system/Arianrhod_Korean.rb +2 -0
  18. data/lib/bcdice/game_system/ArknightsFan.rb +245 -87
  19. data/lib/bcdice/game_system/BlackJacket_Korean.rb +244 -0
  20. data/lib/bcdice/game_system/CharonSanctions.rb +112 -0
  21. data/lib/bcdice/game_system/Cthulhu7th.rb +1 -1
  22. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional/full_auto.rb +293 -0
  23. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional/rollable.rb +43 -0
  24. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +470 -306
  25. data/lib/bcdice/game_system/CyberpunkRed.rb +1 -2
  26. data/lib/bcdice/game_system/CyberpunkRed_Korean.rb +66 -0
  27. data/lib/bcdice/game_system/DoubleCross.rb +18 -1
  28. data/lib/bcdice/game_system/DoubleCross_Korean.rb +5 -1
  29. data/lib/bcdice/game_system/EdgeFlippers.rb +315 -0
  30. data/lib/bcdice/game_system/Emoklore_Korean.rb +42 -0
  31. data/lib/bcdice/game_system/FullFace.rb +25 -3
  32. data/lib/bcdice/game_system/FutariSousa.rb +17 -5
  33. data/lib/bcdice/game_system/Garactier.rb +479 -0
  34. data/lib/bcdice/game_system/GardenOrder.rb +390 -9
  35. data/lib/bcdice/game_system/GundogRevised.rb +8 -8
  36. data/lib/bcdice/game_system/JuinKansen_Korean.rb +251 -0
  37. data/lib/bcdice/game_system/KillDeathBusiness.rb +155 -3
  38. data/lib/bcdice/game_system/KimitoYell.rb +568 -0
  39. data/lib/bcdice/game_system/Magius.rb +125 -0
  40. data/lib/bcdice/game_system/Magius_3rdNewTokyoCity.rb +62 -0
  41. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +122 -2
  42. data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +4 -4
  43. data/lib/bcdice/game_system/NSSQ.rb +17 -9
  44. data/lib/bcdice/game_system/NervWhitePaper.rb +129 -0
  45. data/lib/bcdice/game_system/Revulture_Korean.rb +125 -0
  46. data/lib/bcdice/game_system/RogueLikeHalf.rb +198 -0
  47. data/lib/bcdice/game_system/RuneQuestRoleplayingInGlorantha.rb +16 -13
  48. data/lib/bcdice/game_system/ShinobiGami.rb +73 -43
  49. data/lib/bcdice/game_system/SkynautsBouken.rb +4 -4
  50. data/lib/bcdice/game_system/SkynautsBouken_Korean.rb +57 -0
  51. data/lib/bcdice/game_system/StratoShout_Korean.rb +1 -1
  52. data/lib/bcdice/game_system/SwordWorld.rb +4 -0
  53. data/lib/bcdice/game_system/SwordWorld2_5.rb +3 -2
  54. data/lib/bcdice/game_system/TensaiGunshiNiNaro.rb +51 -17
  55. data/lib/bcdice/game_system/TheIndieHack.rb +82 -0
  56. data/lib/bcdice/game_system/TorgEternity.rb +35 -6
  57. data/lib/bcdice/game_system/Ventangle_Korean.rb +130 -0
  58. data/lib/bcdice/game_system/WoW.rb +161 -0
  59. data/lib/bcdice/game_system/YankeeMustDie.rb +192 -0
  60. data/lib/bcdice/game_system/YearZeroEngine.rb +225 -28
  61. data/lib/bcdice/game_system/YuMyoKishi.rb +141 -0
  62. data/lib/bcdice/game_system/meikyu_kingdom_basic/atoz_table.rb +1184 -0
  63. data/lib/bcdice/game_system/meikyu_kingdom_basic/randr236_table.rb +254 -0
  64. data/lib/bcdice/game_system/meikyu_kingdom_basic/table.rb +54 -0
  65. data/lib/bcdice/game_system/meikyu_kingdom_basic/tk_table.rb +755 -0
  66. data/lib/bcdice/game_system/sword_world/rating_lexer.rb +1 -0
  67. data/lib/bcdice/game_system/sword_world/rating_options.rb +4 -1
  68. data/lib/bcdice/game_system/sword_world/rating_parsed.rb +5 -0
  69. data/lib/bcdice/game_system/sword_world/rating_parser.rb +129 -115
  70. data/lib/bcdice/game_system.rb +20 -0
  71. data/lib/bcdice/version.rb +1 -1
  72. metadata +31 -6
@@ -0,0 +1,125 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class Magius < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'Magius'
8
+
9
+ # ゲームシステム名
10
+ NAME = 'MAGIUS'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'まきうす'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGETEXT
17
+ ■能力値判定 MA+x>=t x:修正値 t:目標値
18
+ 例)MA>=7: ダイスを2個振って、その結果を表示
19
+
20
+ ■技能値判定 MS+x>=t x:修正値 t:目標値
21
+ 例)MS>=7: ダイスを3個振って、そのうち上位2つを採用し、結果を表示
22
+
23
+ INFO_MESSAGETEXT
24
+
25
+ register_prefix('M[AS]')
26
+
27
+ def initialize(command)
28
+ super(command)
29
+
30
+ @sort_barabara_dice = true # バラバラロール(Bコマンド)でソート有
31
+ end
32
+
33
+ def eval_game_system_specific_command(command)
34
+ resolute_ability_action(command) ||
35
+ resolute_skill_action(command)
36
+ end
37
+
38
+ private
39
+
40
+ def with_symbol(number)
41
+ if number == 0
42
+ return ""
43
+ elsif number > 0
44
+ return "+#{number}"
45
+ else
46
+ return number.to_s
47
+ end
48
+ end
49
+
50
+ # 能力値判定
51
+ # @param [String] command
52
+ # @return [Result]
53
+ def get_result_of_ability_action(total, _dice_add, target)
54
+ if total >= target
55
+ return Result.success("成功")
56
+ else
57
+ return Result.failure("失敗")
58
+ end
59
+ end
60
+
61
+ def resolute_ability_action(command)
62
+ m = /MA([+-]\d+)*>=(\d+)/.match(command)
63
+ return nil unless m
64
+
65
+ modify = m[1] ? Arithmetic.eval(m[1], @round_type) : 0
66
+ target = m[2].to_i
67
+
68
+ dices = @randomizer.roll_barabara(2, 6).sort
69
+ dice_text = dices.join(",")
70
+ dice_add = dices.sum
71
+ total = dice_add + modify
72
+
73
+ result = get_result_of_ability_action(total, dice_add, target)
74
+
75
+ sequence = [
76
+ "(#{command})",
77
+ "[#{dice_text}]#{with_symbol(modify)}",
78
+ total,
79
+ result.text,
80
+ ].compact
81
+
82
+ result.text = sequence.join(" > ")
83
+
84
+ return result
85
+ end
86
+
87
+ # 技能値値判定
88
+ # @param [String] command
89
+ # @return [Result]
90
+ def get_result_of_skill_action(total, _dice_add, target)
91
+ if total >= target
92
+ return Result.success("成功")
93
+ else
94
+ return Result.failure("失敗")
95
+ end
96
+ end
97
+
98
+ def resolute_skill_action(command)
99
+ m = /MS([+-]\d+)*>=(\d+)/.match(command)
100
+ return nil unless m
101
+
102
+ modify = m[1] ? Arithmetic.eval(m[1], @round_type) : 0
103
+ target = m[2].to_i
104
+
105
+ dices = @randomizer.roll_barabara(3, 6).sort
106
+ dice_text = dices.join(",")
107
+ dice_add = dices[1].to_i + dices[2].to_i
108
+ total = dice_add + modify
109
+
110
+ result = get_result_of_skill_action(total, dice_add, target)
111
+
112
+ sequence = [
113
+ "(#{command})",
114
+ "[#{dice_text}]#{with_symbol(modify)}",
115
+ total,
116
+ result.text,
117
+ ].compact
118
+
119
+ result.text = sequence.join(" > ")
120
+
121
+ return result
122
+ end
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bcdice/game_system/Magius'
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class Magius_3rdNewTokyoCity < Magius
8
+ # ゲームシステムの識別子
9
+ ID = 'Magius_3rdNewTokyoCity'
10
+
11
+ # ゲームシステム名
12
+ NAME = 'MAGIUS:新世紀エヴァンゲリオンRPG 決戦!第3新東京市'
13
+
14
+ # ゲームシステム名の読みがな
15
+ SORT_KEY = 'まきうすしんせいきえうあんけりおんRPGけつせんたい3しんとうきようし'
16
+
17
+ # ダイスボットの使い方
18
+ HELP_MESSAGE = <<~INFO_MESSAGETEXT
19
+ ■能力値判定 MA+x>=t x:修正値 t:目標値
20
+ 例)MA>=7: ダイスを2個振って、その結果(成功,失敗,絶対成功,絶対失敗)を表示
21
+
22
+ ■技能値判定 MS+x>=t x:修正値 t:目標値
23
+ 例)MS>=7: ダイスを3個振って、そのうち上位2つを採用し、結果(成功,失敗,絶対成功,絶対失敗)を表示
24
+
25
+ INFO_MESSAGETEXT
26
+
27
+ register_prefix('M[AS]')
28
+
29
+ private
30
+
31
+ # 能力値判定の結果取得
32
+ # @param [Integer] total, dice_add, target
33
+ # @return [Result]
34
+ def get_result_of_ability_action(total, dice_add, target)
35
+ if dice_add == 12
36
+ return Result.critical("絶対成功")
37
+ elsif dice_add == 2
38
+ return Result.fumble("絶対失敗")
39
+ elsif total >= target
40
+ return Result.success("成功")
41
+ else
42
+ return Result.failure("失敗")
43
+ end
44
+ end
45
+
46
+ # 技能値判定の結果取得
47
+ # @param [Integer] total, dice_add, target
48
+ # @return [Result]
49
+ def get_result_of_skill_action(total, dice_add, target)
50
+ if dice_add == 12
51
+ return Result.critical("絶対成功")
52
+ elsif dice_add == 2
53
+ return Result.fumble("絶対失敗")
54
+ elsif total >= target
55
+ return Result.success("成功")
56
+ else
57
+ return Result.failure("失敗")
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -23,6 +23,7 @@ module BCDice
23
23
  ・各種表
24
24
   ・休憩表:才覚 TBT/魅力 CBT/探索 SBT/武勇 VBT
25
25
  お祭り FBT/空振り EBT/全体 WBT/カップル LBT
26
+ お食事 FDBT
26
27
   ・ハプニング表:才覚 THT/魅力 CHT/探索 SHT/武勇 VHT
27
28
   ・視察表 RT/情報収集表 IG/ランダムマップ選択表 RMS
28
29
   ・痛打表 CAT/致命傷表 FWT/戦闘ファンブル表 CFT
@@ -31,9 +32,11 @@ module BCDice
31
32
   ・お宝表1/2/3/4/5 T1T/T2T/T3T/T4T/T5T
32
33
   ・特殊遭遇表 SE
33
34
     上級:人工 ARN/水域 WEN/自然 NEN/洞窟 CEN/天空 SEN/異界 OEN
35
+  ・他国との関係表 ORT
34
36
  ・潜在能力:スキル決定表 SDT
35
37
    基本:肉弾 BUS/射撃 SHS/星術 ASS/召喚 SUS/科学 SCS
36
38
       迷宮 LAS/交渉 NES/便利 COS/芸能 ENS/道具 TOS
39
+      一般 GES
37
40
    上級:肉弾 ABUS/射撃 ASHS/星術 AASS/召喚 ASUS/科学 ASCS
38
41
       迷宮 ALAS/交渉 ANES/便利 ACOS/芸能 AENS/道具 ATOS
39
42
  ・アイテム関連(上級不使用の場合、カッコ書きのものを使用して下さい)
@@ -53,6 +56,60 @@ module BCDice
53
56
   ・生まれ決定表 BDT/生まれ表:才覚 TBO/魅力 CBO/探索 SBO/武勇 VBO
54
57
   ・初期装備表 IEQ
55
58
   ・地名決定表 PNTx (xは個数)/迷宮風景表 MLTx (xは個数)
59
+ ・百万世界AtoZ関連
60
+  ・ご祝儀表 GIFT
61
+  ・ニュース表 NWST
62
+  ・王国ハプニング表 KDHT
63
+  ・王国試練表 KDTT
64
+  ・騎士道表 CHVT
65
+  ・儀式表 RITT
66
+  ・限定表 LIMT
67
+  ・固有の文化表 UNCT
68
+  ・後世の評価表 POET
69
+  ・高レベル特殊遭遇表 KSET
70
+  ・死霊の日々表 DODT
71
+  ・事件名表1/2 INT1/INT2
72
+  ・守護星座表 GUCT
73
+  ・需要表 DEMTx (x:名物レベル)
74
+  ・小鬼と一緒表 WLDT
75
+  ・侵略ハプニング表 INHT
76
+  ・新・情報収集表 NIGT
77
+  ・人種特徴表/人種名文字表 RACT/RNCTx (x:文字数)
78
+  ・迷宮化現象表/人体迷宮化表 HBLT/LAPT
79
+  ・勢力表 POWT
80
+  ・中立特殊遭遇表 NSET
81
+  ・超協調行動表 ECBT
82
+  ・通貨外見表/通貨材質表/通貨名称表 CUAT/CUMT/CUNT
83
+  ・天候表 WEAT
84
+  ・毒の追加効果表 PAET
85
+  ・媒体表 MEDT
86
+  ・反応表/民の反応表 REAT/PRET
87
+  ・遍歴表 HIST
88
+  ・由来表 ORIT
89
+  ・誘致表 ATRT
90
+  ・妖精の悪戯表 FAMT
91
+ ・R&R236関連
92
+  ・四字熟語系二つ名表/代入命名表/組み合わせ系二つ名表/名文句系二つ名表 FCNT/ASNT/CMNT/FPNT
93
+  ・形容表/用語表/行動表/呼び名表/称号表 DEST/TRMT/BEHT/NAMT/TTLT
94
+ ・旅する王国と無名階域関連
95
+  ・サブキャラクター反応表 CSRT
96
+  ・スキルグループ表 KSGT
97
+  ・ダイナマイト帝国:休憩表/特殊遭遇表/二つ名表/名前表 DRET/DSET/DNNT/DNAT
98
+  ・ハグルマ資本主義神聖共和国:休憩表/特殊遭遇表/二つ名表/名前表 HRET/HSET/HNNT/HNAT
99
+  ・メトロ汗国:休憩表/特殊遭遇表/二つ名表/名前表 MRET/MSET/MNNT/MNAT
100
+  ・千年王朝:休憩表/特殊遭遇表/二つ名表/名前表 TRET/TSET/TNNT/TNAT
101
+  ・遠征王国変動表/遠征道中表 EKCT/EXITx (x:修正)
102
+  ・候補生背景表/職長背景表 CABT/FOBT
103
+  ・上級ジョブ表・甲/乙 AJTA/AJTB
104
+  ・深階休憩表/特殊遭遇表 KART/KAET
105
+  ・天階休憩表/特殊遭遇表 TERT/TEET
106
+  ・星の階休憩表 HKRT
107
+  ・装備決定表 EQDT
108
+  ・大冒険時代表 GART
109
+  ・燃料表 FUET
110
+  ・反乱表 RBLT
111
+  ・旅する王国環境表/王国名決定表1/王国名決定表2/王国名決定表3 TKET/TKNT1/TKNT2/TKNT3
112
+  ・列強経歴表 GPHT
56
113
  ・D66ダイスあり
57
114
  INFO_MESSAGE_TEXT
58
115
 
@@ -73,7 +130,17 @@ module BCDice
73
130
  'ABUS', 'ASHS', 'AASS', 'ASUS', 'ASCS', 'ALAS', 'ANES', 'ACOS', 'AENS', 'ATOS',
74
131
  'SE', 'ARN', 'WEN', 'NEN', 'CEN', 'SEN', 'OEN',
75
132
  'DFT',
76
- 'PNT', 'MLT'
133
+ 'PNT', 'MLT',
134
+ 'FDBT', 'GIFT', 'NWST', 'EKCT', 'KDHT', 'KDTT', 'CHVT', 'RITT', 'LIMT', 'UNCT', 'POET',
135
+ 'KSET', 'DODT', 'INT1', 'INT2', 'GUCT', 'DEMT', 'WLDT', 'INHT', 'NIGT', 'RACT', 'RNCT',
136
+ 'HBLT', 'POWT', 'NSET', 'ECBT', 'CUAT', 'CUMT', 'CUNT', 'WEAT', 'PAET', 'MEDT', 'REAT',
137
+ 'HIST', 'PRET', 'LAPT', 'ORIT', 'ATRT', 'FAMT',
138
+ 'FCNT', 'ASNT', 'TRMT', 'BEHT', 'DEST', 'NAMT', 'TTLT',
139
+ 'CMNT', 'FPNT', 'CSRT', 'KSGT', 'DRET', 'DSET', 'DNNT', 'DNAT', 'HRET', 'HSET', 'HNNT',
140
+ 'HNAT', 'MRET', 'MSET', 'MNNT', 'MNAT', 'EXIT', 'TRET', 'TSET', 'TNNT', 'TNAT', 'CABT',
141
+ 'AJTA', 'AJTB', 'FOBT', 'KAET', 'KART', 'TEET', 'TERT', 'HKRT', 'EQDT', 'GART', 'FUET',
142
+ 'RBLT', 'TKET', 'GPHT',
143
+ 'TKNT1', 'TKNT2', 'TKNT3', 'GES', 'ORT'
77
144
  )
78
145
 
79
146
  def initialize(command)
@@ -81,6 +148,7 @@ module BCDice
81
148
 
82
149
  @sort_add_dice = true
83
150
  @d66_sort_type = D66SortType::ASC
151
+ @round_type = RoundType::CEIL
84
152
  end
85
153
 
86
154
  def kiryoku_result(_total_n, dice_list, _diff)
@@ -100,6 +168,12 @@ module BCDice
100
168
 
101
169
  if (output = roll_tables(command, TABLES))
102
170
  return output
171
+ elsif (output = roll_tables(command, A2Z_TABLES))
172
+ return output
173
+ elsif (output = roll_tables(command, RR236_TABLES))
174
+ return output
175
+ elsif (output = roll_tables(command, TK_TABLES))
176
+ return output
103
177
  else
104
178
 
105
179
  case command
@@ -248,6 +322,50 @@ module BCDice
248
322
  when /^ATOS/i
249
323
  type = '上級道具スキル'
250
324
  output, total_n = mk_advanced_tool_skill_table
325
+ when /^GUCT/i
326
+ type = '守護星座'
327
+ total_n = @randomizer.roll_once(6) * 100 + @randomizer.roll_once(6) * 10 + @randomizer.roll_once(6)
328
+ output = mk_guardian_constellation_table(total_n)
329
+ when /^DEMT(\d+)/i
330
+ type = '需要'
331
+ count = getCount(Regexp.last_match(1))
332
+ output, total_n = get_demand_table(count)
333
+ when /^RNCT(\d*)/i
334
+ type = '人種名文字'
335
+ count = getCount(Regexp.last_match(1))
336
+ output, total_n = get_race_name_character_table(count)
337
+ when /^CUMT/i
338
+ type = '通貨材質'
339
+ @total = [@randomizer.roll_barabara(2, 6).sum(), @randomizer.roll_once(6)]
340
+ total_n = @total.join(',')
341
+ output = get_currency_material_table(*@total)
342
+ when /^CMNT/i
343
+ type = '組み合わせ系二つ名'
344
+ output, total_n = mk_combination_nickname_table
345
+ when /^DEST/i
346
+ type = '形容'
347
+ total_n = @randomizer.roll_d66(D66SortType::ASC)
348
+ output = mk_descriptive_table(total_n)
349
+ when /^TRMT/i
350
+ type = '用語'
351
+ total_n = @randomizer.roll_d66(D66SortType::ASC)
352
+ output = mk_terminology_table(total_n)
353
+ when /^BEHT/i
354
+ type = '行動'
355
+ total_n = @randomizer.roll_d66(D66SortType::ASC)
356
+ output = mk_behavior_table(total_n)
357
+ when /^NAMT/i
358
+ type = '呼び名'
359
+ total_n = @randomizer.roll_d66(D66SortType::ASC)
360
+ output = mk_rr236_name_table(total_n)
361
+ when /^TTLT/i
362
+ type = '称号'
363
+ total_n = @randomizer.roll_d66(D66SortType::ASC)
364
+ output = mk_title_table(total_n)
365
+ when /^EXIT([-+]?\d*)/i
366
+ type = '遠征道中'
367
+ modify = get_modify(Regexp.last_match(1))
368
+ output, total_n = get_expedition_itinerary_table(modify)
251
369
  end
252
370
 
253
371
  if !output.nil?
@@ -261,9 +379,11 @@ module BCDice
261
379
  end
262
380
  end
263
381
  end
264
-
265
382
  require "bcdice/game_system/meikyu_kingdom_basic/item_table"
266
383
  require "bcdice/game_system/meikyu_kingdom_basic/kingdom_table"
267
384
  require "bcdice/game_system/meikyu_kingdom_basic/name_table"
268
385
  require "bcdice/game_system/meikyu_kingdom_basic/word_table"
269
386
  require "bcdice/game_system/meikyu_kingdom_basic/table"
387
+ require "bcdice/game_system/meikyu_kingdom_basic/atoz_table"
388
+ require "bcdice/game_system/meikyu_kingdom_basic/randr236_table"
389
+ require "bcdice/game_system/meikyu_kingdom_basic/tk_table"
@@ -22,11 +22,11 @@ module BCDice
22
22
    크리티컬, 펌블치는 생략가능합니다. ([]자체를 생략가능)
23
23
    자동성공, 자동실패, 성공, 실패를 자동표기합니다.
24
24
  ・각종표
25
-  ・감정표 ET/감정표 2.0 ET2
26
-  ・징조표 OT/징조표ver2.0 OT2/징조표ver3.0 OT3
25
+  ・감정표 ET/감정표 2.0 ET2/개정판 감정표 MET
26
+  ・징조표 OT/징조표ver2.0 OT2/징조표ver3.0 OT3 / 개정판 전투 징조표 MBOT / 개정판 비전투 징조표 MNOT
27
27
   ・일그러짐표 DT/일그러짐표ver2.0 DT2/일그러짐표(야외) DTO/일그러짐표(바다) DTS/일그러짐표(저택・성) DTM
28
-  ・세계왜곡표  WDT/세계왜곡표2.0 WDT2
29
-  ・영구소실표 EDT
28
+  ・세계왜곡표  WDT/세계왜곡표2.0 WDT2/개정판 왜곡표 MDT/개정판 세계왜곡표 MWDT
29
+  ・영구소실표 EDT/개정판 영구소실표 MEDT
30
30
  ・D66다이스 있음
31
31
  INFO_MESSAGE_TEXT
32
32
 
@@ -54,7 +54,7 @@ module BCDice
54
54
  total = largest_two.sum + modifier
55
55
  num_1 = dice_list.count(1)
56
56
 
57
- additional_result =
57
+ result =
58
58
  if largest_two == [6, 6]
59
59
  Result.critical(" > 絶対成功!")
60
60
  elsif largest_two == [1, 1]
@@ -73,10 +73,11 @@ module BCDice
73
73
  sequence = [
74
74
  "(#{command})",
75
75
  "[#{dice_list.join(',')}]#{Format.modifier(modifier)}",
76
- "#{total}[#{largest_two.join(',')}]#{additional_result.text}#{fp_result}",
76
+ "#{total}[#{largest_two.join(',')}]#{result.text}#{fp_result}",
77
77
  ]
78
78
 
79
- return sequence.join(" > ")
79
+ result.text = sequence.join(" > ")
80
+ return result
80
81
  end
81
82
 
82
83
  # ダメージロール
@@ -90,24 +91,29 @@ module BCDice
90
91
  resist = m[4].to_i
91
92
 
92
93
  dice_list = @randomizer.roll_barabara(dice_count, 6)
94
+ normal_damage = damage(dice_list, resist)
93
95
 
94
- result = "(#{command}) > [#{dice_list.join(',')}]#{resist} > #{damage(dice_list, resist)}ダメージ"
96
+ result = "(#{command}) > [#{dice_list.join(',')}]#{resist}"
95
97
 
96
98
  critical_target = critical_up ? 1 : 2
97
99
 
98
100
  if dice_list.count(6) - dice_list.count(1) >= critical_target
99
- result += " クリティカルヒット!\n"
100
- result += additional_damage_roll(increase_critical_dice, resist)
101
+ result += critical_damage_roll(increase_critical_dice, resist, normal_damage)
102
+ result = Result.critical(result)
103
+ else
104
+ result += " > #{normal_damage}ダメージ"
105
+ result = normal_damage > 0 ? Result.success(result) : Result.failure(result)
101
106
  end
102
107
 
103
108
  return result
104
109
  end
105
110
 
106
- def additional_damage_roll(increase_critical_dice, resist)
111
+ def critical_damage_roll(increase_critical_dice, resist, normal_damage)
107
112
  dice_count = increase_critical_dice ? 8 : 4
108
113
 
109
114
  dice_list = @randomizer.roll_barabara(dice_count, 6)
110
- "(#{dice_count}DR#{resist}) [#{dice_list.join(',')}]#{resist} > #{damage(dice_list, resist)}ダメージ"
115
+ critical_damage = damage(dice_list, resist)
116
+ return " > クリティカルヒット! > (#{dice_count}DR#{resist}) > [#{dice_list.join(',')}]#{resist} > #{normal_damage + critical_damage}ダメージ"
111
117
  end
112
118
 
113
119
  # 回復ロール
@@ -119,8 +125,10 @@ module BCDice
119
125
  resist = m[2]&.to_i || 3
120
126
 
121
127
  dice_list = @randomizer.roll_barabara(dice_count, 6)
128
+ heal_amount = damage(dice_list, resist)
129
+ result_text = "(#{command}) > [#{dice_list.join(',')}]#{resist} > #{heal_amount}回復"
122
130
 
123
- return "(#{command}) [#{dice_list.join(',')}]#{resist} #{damage(dice_list, resist)}回復"
131
+ return heal_amount > 0 ? Result.success(result_text) : Result.failure(result_text)
124
132
  end
125
133
 
126
134
  def damage(dice_list, resist)
@@ -0,0 +1,129 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class NervWhitePaper < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'NervWhitePaper'
8
+
9
+ # ゲームシステム名
10
+ NAME = '新世紀エヴァンゲリオンRPG NERV白書/使徒降臨'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'しんせいきえうあんけりおんああるひいしいねるふはくしよしとこおりん'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGETEXT
17
+ ■通常ロール(NR):成功、失敗、絶対成功、絶対失敗を表示します。
18
+ 例) NR
19
+
20
+ ■長所ロール(NA):成功、失敗、絶対成功、絶対失敗を表示します。
21
+ 例) NA
22
+
23
+ ■短所ロール(ND):成功、失敗、絶対成功、絶対失敗を表示します。
24
+ 例) ND
25
+
26
+ INFO_MESSAGETEXT
27
+
28
+ register_prefix('N[RAD]')
29
+
30
+ def eval_game_system_specific_command(command)
31
+ resolute_regular_action(command) ||
32
+ resolute_advantage_action(command) ||
33
+ resolute_disadvantage_action(command)
34
+ end
35
+
36
+ private
37
+
38
+ # 通常ロールによる判定
39
+ # @param [String] command
40
+ # @return [Result]
41
+ def resolute_regular_action(command)
42
+ m = /NR/.match(command)
43
+ return nil unless m
44
+
45
+ dices = @randomizer.roll_barabara(2, 6)
46
+ dice_text = dices.join(",")
47
+ dice_add = dices.sum
48
+
49
+ output = "(NR) > #{dice_text}"
50
+
51
+ if dice_add == 7
52
+ output += " > 絶対成功"
53
+ return Result.critical(output)
54
+ elsif dice_add == 2
55
+ output += " > 絶対失敗"
56
+ return Result.fumble(output)
57
+ elsif dice_add == 12
58
+ output += " > 絶対失敗"
59
+ return Result.fumble(output)
60
+ elsif dice_add.modulo(2) == 0
61
+ output += " > 失敗"
62
+ return Result.failure(output)
63
+ else
64
+ output += " > 成功"
65
+ return Result.success(output)
66
+ end
67
+ end
68
+
69
+ # 長所ロールによる判定
70
+ # @param [String] command
71
+ # @return [Result]
72
+ def resolute_advantage_action(command)
73
+ m = /NA/.match(command)
74
+ return nil unless m
75
+
76
+ dices = @randomizer.roll_barabara(2, 6)
77
+ dice_text = dices.join(",")
78
+ dice_add = dices.sum
79
+
80
+ output = "(NA) > #{dice_text}"
81
+
82
+ if dice_add == 7
83
+ output += " > 絶対成功"
84
+ return Result.critical(output)
85
+ elsif dice_add == 2
86
+ output += " > 絶対失敗"
87
+ return Result.fumble(output)
88
+ elsif dice_add == 12
89
+ output += " > 絶対失敗"
90
+ return Result.fumble(output)
91
+ elsif dices[0] == dices[1]
92
+ output += " > 失敗"
93
+ return Result.failure(output)
94
+ else
95
+ output += " > 成功"
96
+ return Result.success(output)
97
+ end
98
+ end
99
+
100
+ # 短所ロールによる判定
101
+ # @param [String] command
102
+ # @return [Result]
103
+ def resolute_disadvantage_action(command)
104
+ m = /ND/.match(command)
105
+ return nil unless m
106
+
107
+ dices = @randomizer.roll_barabara(2, 6)
108
+ dice_text = dices.join(",")
109
+ dice_add = dices.sum
110
+
111
+ output = "(ND) > #{dice_text}"
112
+
113
+ if dice_add == 7
114
+ output += " > 絶対成功"
115
+ return Result.critical(output)
116
+ elsif dice_add == 2
117
+ output += " > 絶対失敗"
118
+ return Result.fumble(output)
119
+ elsif dice_add == 12
120
+ output += " > 絶対失敗"
121
+ return Result.fumble(output)
122
+ elsif dice_add != 7
123
+ output += " > 失敗"
124
+ return Result.failure(output)
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end