bcdice 3.0.0.pre.alpha.2 → 3.0.0.pre.rc.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 (151) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/README.md +1 -0
  4. data/i18n/KillDeathBusiness/ja_jp.yml +4 -4
  5. data/i18n/KillDeathBusiness/ko_kr.yml +5 -4
  6. data/i18n/MagicaLogia/ko_kr.yml +564 -0
  7. data/i18n/MonotoneMuseum/ja_jp.yml +37 -1
  8. data/i18n/StratoShout/ja_jp.yml +4 -4
  9. data/i18n/StratoShout/ko_kr.yml +4 -4
  10. data/lib/bcdice.rb +2 -1
  11. data/lib/bcdice/arithmetic.rb +22 -0
  12. data/lib/bcdice/arithmetic/node.rb +112 -43
  13. data/lib/bcdice/arithmetic/parser.rb +240 -0
  14. data/lib/bcdice/arithmetic_evaluator.rb +5 -156
  15. data/lib/bcdice/base.rb +8 -1
  16. data/lib/bcdice/command/lexer.rb +57 -0
  17. data/lib/bcdice/command/parsed.rb +65 -0
  18. data/lib/bcdice/command/parser.rb +489 -0
  19. data/lib/bcdice/common_command/add_dice.rb +1 -1
  20. data/lib/bcdice/common_command/add_dice/node.rb +142 -69
  21. data/lib/bcdice/common_command/add_dice/parser.rb +100 -83
  22. data/lib/bcdice/common_command/barabara_dice/node.rb +7 -1
  23. data/lib/bcdice/common_command/barabara_dice/result.rb +22 -0
  24. data/lib/bcdice/common_command/calc/node.rb +10 -1
  25. data/lib/bcdice/common_command/calc/parser.rb +1 -1
  26. data/lib/bcdice/common_command/d66_dice.rb +3 -1
  27. data/lib/bcdice/common_command/lexer.rb +2 -1
  28. data/lib/bcdice/common_command/upper_dice/parser.rb +118 -97
  29. data/lib/bcdice/common_command/version.rb +1 -1
  30. data/lib/bcdice/deprecated/checker.rb +6 -6
  31. data/lib/bcdice/dice_table.rb +1 -0
  32. data/lib/bcdice/dice_table/d66_parity_table.rb +34 -0
  33. data/lib/bcdice/game_system.rb +3 -0
  34. data/lib/bcdice/game_system/AceKillerGene.rb +1 -1
  35. data/lib/bcdice/game_system/AlchemiaStruggle.rb +312 -0
  36. data/lib/bcdice/game_system/Alshard.rb +0 -1
  37. data/lib/bcdice/game_system/Amadeus.rb +1 -1
  38. data/lib/bcdice/game_system/AnimaAnimus.rb +1 -5
  39. data/lib/bcdice/game_system/BadLife.rb +1 -1
  40. data/lib/bcdice/game_system/BeastBindTrinity.rb +1 -10
  41. data/lib/bcdice/game_system/BeginningIdol.rb +4 -4
  42. data/lib/bcdice/game_system/BeginningIdol_Korean.rb +4 -4
  43. data/lib/bcdice/game_system/BladeOfArcana.rb +4 -4
  44. data/lib/bcdice/game_system/BlindMythos.rb +12 -9
  45. data/lib/bcdice/game_system/BloodCrusade.rb +12 -38
  46. data/lib/bcdice/game_system/BloodMoon.rb +2 -2
  47. data/lib/bcdice/game_system/CardRanker.rb +23 -63
  48. data/lib/bcdice/game_system/ChaosFlare.rb +3 -3
  49. data/lib/bcdice/game_system/CodeLayerd.rb +1 -1
  50. data/lib/bcdice/game_system/ColossalHunter.rb +2 -2
  51. data/lib/bcdice/game_system/Cthulhu7th.rb +2 -2
  52. data/lib/bcdice/game_system/CthulhuTech.rb +0 -1
  53. data/lib/bcdice/game_system/DarkBlaze.rb +4 -4
  54. data/lib/bcdice/game_system/DeadlineHeroes.rb +1 -1
  55. data/lib/bcdice/game_system/DoubleCross.rb +60 -93
  56. data/lib/bcdice/game_system/EmbryoMachine.rb +5 -5
  57. data/lib/bcdice/game_system/EtrianOdysseySRS.rb +0 -1
  58. data/lib/bcdice/game_system/FilledWith.rb +3 -3
  59. data/lib/bcdice/game_system/FullMetalPanic.rb +0 -1
  60. data/lib/bcdice/game_system/GURPS.rb +1 -1
  61. data/lib/bcdice/game_system/Garako.rb +3 -2
  62. data/lib/bcdice/game_system/GardenOrder.rb +1 -1
  63. data/lib/bcdice/game_system/GehennaAn.rb +3 -3
  64. data/lib/bcdice/game_system/Gundog.rb +1 -1
  65. data/lib/bcdice/game_system/GundogRevised.rb +3 -3
  66. data/lib/bcdice/game_system/GundogZero.rb +2 -2
  67. data/lib/bcdice/game_system/GurpsFW.rb +2 -5
  68. data/lib/bcdice/game_system/HatsuneMiku.rb +1 -1
  69. data/lib/bcdice/game_system/HuntersMoon.rb +17 -110
  70. data/lib/bcdice/game_system/JuinKansen.rb +251 -0
  71. data/lib/bcdice/game_system/KanColle.rb +17 -166
  72. data/lib/bcdice/game_system/KillDeathBusiness.rb +35 -44
  73. data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +2 -1
  74. data/lib/bcdice/game_system/LogHorizon.rb +8 -8
  75. data/lib/bcdice/game_system/LostRoyal.rb +1 -3
  76. data/lib/bcdice/game_system/MagicaLogia.rb +3 -3
  77. data/lib/bcdice/game_system/MagicaLogia_Korean.rb +66 -0
  78. data/lib/bcdice/game_system/MeikyuDays.rb +1 -1
  79. data/lib/bcdice/game_system/MeikyuKingdom.rb +1 -1
  80. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +1 -1
  81. data/lib/bcdice/game_system/MetalHeadExtream.rb +4 -4
  82. data/lib/bcdice/game_system/MetallicGuardian.rb +0 -1
  83. data/lib/bcdice/game_system/MonotoneMuseum.rb +3 -2
  84. data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +1 -1
  85. data/lib/bcdice/game_system/NSSQ.rb +2 -2
  86. data/lib/bcdice/game_system/Nechronica.rb +3 -3
  87. data/lib/bcdice/game_system/NightWizard.rb +1 -1
  88. data/lib/bcdice/game_system/NightmareHunterDeep.rb +3 -4
  89. data/lib/bcdice/game_system/NinjaSlayer.rb +26 -28
  90. data/lib/bcdice/game_system/OracleEngine.rb +13 -17
  91. data/lib/bcdice/game_system/Paradiso.rb +2 -2
  92. data/lib/bcdice/game_system/PhantasmAdventure.rb +0 -4
  93. data/lib/bcdice/game_system/Raisondetre.rb +1 -1
  94. data/lib/bcdice/game_system/RecordOfLodossWar.rb +2 -3
  95. data/lib/bcdice/game_system/RokumonSekai2.rb +2 -2
  96. data/lib/bcdice/game_system/RuinBreakers.rb +1 -1
  97. data/lib/bcdice/game_system/Ryutama.rb +1 -1
  98. data/lib/bcdice/game_system/SRS.rb +0 -5
  99. data/lib/bcdice/game_system/SamsaraBallad.rb +4 -3
  100. data/lib/bcdice/game_system/Satasupe.rb +22 -14
  101. data/lib/bcdice/game_system/ScreamHighSchool.rb +2 -2
  102. data/lib/bcdice/game_system/ShinkuuGakuen.rb +1 -1
  103. data/lib/bcdice/game_system/ShinobiGami.rb +75 -39
  104. data/lib/bcdice/game_system/StellarKnights.rb +1 -3
  105. data/lib/bcdice/game_system/SterileLife.rb +1 -1
  106. data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -1
  107. data/lib/bcdice/game_system/StratoShout.rb +10 -36
  108. data/lib/bcdice/game_system/StratoShout_Korean.rb +2 -1
  109. data/lib/bcdice/game_system/SwordWorld.rb +5 -5
  110. data/lib/bcdice/game_system/SwordWorld2_5.rb +1 -1
  111. data/lib/bcdice/game_system/TherapieSein.rb +2 -2
  112. data/lib/bcdice/game_system/TokumeiTenkousei.rb +2 -2
  113. data/lib/bcdice/game_system/Torg.rb +1 -1
  114. data/lib/bcdice/game_system/TorgEternity.rb +4 -7
  115. data/lib/bcdice/game_system/TrinitySeven.rb +2 -2
  116. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +6 -6
  117. data/lib/bcdice/game_system/TwilightGunsmoke.rb +1 -1
  118. data/lib/bcdice/game_system/Utakaze.rb +1 -1
  119. data/lib/bcdice/game_system/Warhammer.rb +6 -6
  120. data/lib/bcdice/game_system/Warhammer4.rb +9 -12
  121. data/lib/bcdice/game_system/ZettaiReido.rb +1 -1
  122. data/lib/bcdice/normalize.rb +1 -1
  123. data/lib/bcdice/preprocessor.rb +12 -8
  124. data/lib/bcdice/randomizer.rb +12 -0
  125. data/lib/bcdice/repl.rb +1 -1
  126. data/lib/bcdice/result.rb +2 -0
  127. data/lib/bcdice/user_defined_dice_table.rb +26 -15
  128. data/lib/bcdice/version.rb +1 -1
  129. metadata +14 -25
  130. data/.editorconfig +0 -21
  131. data/.github/.codecov.yaml +0 -10
  132. data/.github/workflows/coverage.yaml +0 -21
  133. data/.github/workflows/lint.yaml +0 -13
  134. data/.github/workflows/test.yml +0 -20
  135. data/.gitignore +0 -14
  136. data/.rubocop.yml +0 -108
  137. data/.rubocop_todo.yml +0 -114
  138. data/Gemfile +0 -14
  139. data/ROADMAP.md +0 -30
  140. data/Rakefile +0 -152
  141. data/bcdice.gemspec +0 -29
  142. data/bin/repl.rb +0 -21
  143. data/docs/README.txt +0 -2028
  144. data/docs/dicebot_sort_key.md +0 -72
  145. data/docs/how_to_make_dicebot.md +0 -453
  146. data/lib/bcdice/command_parser.rb +0 -242
  147. data/lib/bcdice/common_command/add_dice/parser.y +0 -153
  148. data/lib/bcdice/common_command/barabara_dice/parser.y +0 -107
  149. data/lib/bcdice/common_command/calc/parser.y +0 -79
  150. data/lib/bcdice/common_command/reroll_dice/parser.y +0 -158
  151. data/lib/bcdice/common_command/upper_dice/parser.y +0 -143
@@ -8,7 +8,7 @@ module BCDice
8
8
  command = command.split(" ", 2).first
9
9
  if command.match?(/^BCDiceVersion$/i)
10
10
  Result.new.tap do |r|
11
- r.text = "BCDice Ver#{BCDice::VERSION}"
11
+ r.text = "BCDice #{BCDice::VERSION}"
12
12
  end
13
13
  end
14
14
  end
@@ -3,7 +3,7 @@
3
3
  module BCDice
4
4
  module Deprecated
5
5
  # 2D6などの特定の加算ダイスの結果をゲームシステムごとにカスタマイズするための
6
- # @deprecate Base#result_2d6 等を利用してください
6
+ # @deprecated Base#result_2d6 等を利用してください
7
7
  module Checker
8
8
  private
9
9
 
@@ -47,12 +47,12 @@ module BCDice
47
47
  # @param cmp_op [Symbol]
48
48
  # @param target
49
49
  # @return [String, nil]
50
- # @deprecate Base#result_1d100 を使ってください
50
+ # @deprecated Base#result_1d100 を使ってください
51
51
  def check_1D100(total, dice_total, cmp_op, target); end
52
52
 
53
53
  # @param (see #check_1D100)
54
54
  # @return [String, nil]
55
- # @deprecate Base#result_1d20 を使ってください
55
+ # @deprecated Base#result_1d20 を使ってください
56
56
  def check_1D20(total, dice_total, cmp_op, target); end
57
57
 
58
58
  # @param total [Integer]
@@ -61,17 +61,17 @@ module BCDice
61
61
  # @param cmp_op [Symbol]
62
62
  # @param target
63
63
  # @return [String, nil]
64
- # @deprecate Base#result_nd10 を使ってください
64
+ # @deprecated Base#result_nd10 を使ってください
65
65
  def check_nD10(total, dice_total, dice_list, cmp_op, target); end
66
66
 
67
67
  # @param (see #check_nD10)
68
68
  # @return [String, nil]
69
- # @deprecate Base#result_2d6 を使ってください
69
+ # @deprecated Base#result_2d6 を使ってください
70
70
  def check_2D6(total, dice_total, dice_list, cmp_op, target); end
71
71
 
72
72
  # @param (see #check_nD10)
73
73
  # @return [String, nil]
74
- # @deprecate Base#result_nd6 を使ってください
74
+ # @deprecated Base#result_nd6 を使ってください
75
75
  def check_nD6(total, dice_total, dice_list, cmp_op, target); end
76
76
  end
77
77
  end
@@ -1,6 +1,7 @@
1
1
  require "bcdice/dice_table/roll_result"
2
2
  require "bcdice/dice_table/chain_table"
3
3
  require "bcdice/dice_table/d66_grid_table"
4
+ require "bcdice/dice_table/d66_parity_table"
4
5
  require "bcdice/dice_table/d66_range_table"
5
6
  require "bcdice/dice_table/d66_table"
6
7
  require "bcdice/dice_table/range_table"
@@ -0,0 +1,34 @@
1
+ module BCDice
2
+ module DiceTable
3
+ # 出目の偶奇による場合分け機能をもつD66表
4
+ class D66ParityTable
5
+ # @param name [String] 表の名前
6
+ # @param odd [Array<String>] 左ダイスが奇数だったときの次層テーブル(サイズ6)
7
+ # @param even [Array<String>] 左ダイスが偶数だったときの次層テーブル(サイズ6)
8
+ def initialize(name, odd, even)
9
+ @name = name
10
+ @odd = odd.freeze
11
+ @even = even.freeze
12
+ end
13
+
14
+ # 表を振る
15
+ # @param randomizer [#roll_once] ランダマイザ
16
+ # @return [String] 結果
17
+ def roll(randomizer)
18
+ dice1 = randomizer.roll_once(6)
19
+ dice2 = randomizer.roll_once(6)
20
+
21
+ if dice1.odd?
22
+ second_table = @odd
23
+ else
24
+ second_table = @even
25
+ end
26
+
27
+ result = second_table[dice2 - 1]
28
+ key = dice1 * 10 + dice2
29
+
30
+ return RollResult.new(@name, key, result)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -1,6 +1,7 @@
1
1
  require "bcdice/game_system/AFF2e"
2
2
  require "bcdice/game_system/AceKillerGene"
3
3
  require "bcdice/game_system/Airgetlamh"
4
+ require "bcdice/game_system/AlchemiaStruggle"
4
5
  require "bcdice/game_system/Alsetto"
5
6
  require "bcdice/game_system/Alshard"
6
7
  require "bcdice/game_system/AlterRaise"
@@ -90,6 +91,7 @@ require "bcdice/game_system/Insane"
90
91
  require "bcdice/game_system/Insane_Korean"
91
92
  require "bcdice/game_system/IthaWenUa"
92
93
  require "bcdice/game_system/JamesBond"
94
+ require "bcdice/game_system/JuinKansen"
93
95
  require "bcdice/game_system/Kamigakari"
94
96
  require "bcdice/game_system/Kamigakari_Korean"
95
97
  require "bcdice/game_system/KanColle"
@@ -103,6 +105,7 @@ require "bcdice/game_system/LogHorizon_Korean"
103
105
  require "bcdice/game_system/LostRecord"
104
106
  require "bcdice/game_system/LostRoyal"
105
107
  require "bcdice/game_system/MagicaLogia"
108
+ require "bcdice/game_system/MagicaLogia_Korean"
106
109
  require "bcdice/game_system/MeikyuDays"
107
110
  require "bcdice/game_system/MeikyuKingdom"
108
111
  require "bcdice/game_system/MeikyuKingdomBasic"
@@ -34,7 +34,7 @@ module BCDice
34
34
 
35
35
  def eval_game_system_specific_command(command)
36
36
  case command
37
- when %r{(AK|AKG)(\-?\d+)(/(\d+))?(@(\d+))?}i
37
+ when %r{(AK|AKG)(-?\d+)(/(\d+))?(@(\d+))?}i
38
38
  success_rate = Regexp.last_match(2).to_i
39
39
  repeat_count = (Regexp.last_match(4) || 1).to_i
40
40
  critical_border_text = Regexp.last_match(6)
@@ -0,0 +1,312 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bcdice"
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class AlchemiaStruggle < Base
8
+ ID = "AlchemiaStruggle"
9
+ NAME = "アルケミア・ストラグル"
10
+ SORT_KEY = "あるけみあすとらくる"
11
+
12
+ HELP_MESSAGE = <<~MESSAGETEXT
13
+ ■ ダイスロール( xAS )
14
+ xDをロールします。
15
+ 例) 5AS
16
+ #{' '}
17
+ ■ ダイスロール&最大になるようにピック( xASy )
18
+ xDをロールし、そこから最大になるようにy個をピックします。
19
+ 例) 4AS3
20
+ #{' '}
21
+ ■ 表
22
+ ・奇跡の触媒
23
+ ・エレメント (CELE, CElement)
24
+ ・アルケミア (CALC, CAlchemia)
25
+ ・インフォーマント (CINF, CInformant)
26
+ ・イノセンス (CINN, CInnocence)
27
+ ・アクワイヤード (CACQ, CAcquired)
28
+ ・携行品
29
+ ・Sサイズ (ARS, ArticleS)
30
+ ・Mサイズ (ARM, ArticleM)
31
+ ・Lサイズ (ARL, ArticleL)
32
+ ・PC情報獲得表 (PCI, PCInformation)
33
+ ・理由表 (REA, Reason)
34
+ ・交流表 (ASS, Associate)
35
+ ・接触のきっかけ表 (CON, Contact)
36
+ MESSAGETEXT
37
+
38
+ ROLL_REG = /^(\d+)AS(\d+)?$/i.freeze
39
+
40
+ register_prefix('\\d+AS')
41
+
42
+ def eval_game_system_specific_command(command)
43
+ c = ALIAS[command] || command
44
+
45
+ try_roll_alchemia(c) ||
46
+ roll_tables(c, TABLES)
47
+ end
48
+
49
+ def try_roll_alchemia(command)
50
+ match = ROLL_REG.match(command)
51
+ return nil unless match
52
+
53
+ roll_dice_count = match[1].to_i
54
+
55
+ if match[2].nil?
56
+ # ロールのみ(ピックなし):
57
+
58
+ result = roll_alchemia(roll_dice_count)
59
+ return make_roll_text(result)
60
+ else
61
+ # ロールして最大値をピック:
62
+
63
+ pick_dice_count = match[2].to_i
64
+
65
+ result = roll_alchemia_and_pick(roll_dice_count, pick_dice_count)
66
+ return make_roll_and_pick_text(result[:rolled_dices], pick_dice_count, result[:picked_dices])
67
+ end
68
+ end
69
+
70
+ def roll_alchemia(roll_dice_count)
71
+ @randomizer.roll_barabara(roll_dice_count, 6)
72
+ end
73
+
74
+ def roll_alchemia_and_pick(roll_dice_count, pick_dice_count)
75
+ rolled_dice_list = roll_alchemia(roll_dice_count)
76
+
77
+ return {
78
+ rolled_dices: rolled_dice_list,
79
+ picked_dices: pick_maximum(rolled_dice_list, pick_dice_count),
80
+ }
81
+ end
82
+
83
+ def pick_maximum(dice_list, pick_dice_count)
84
+ if dice_list.size <= pick_dice_count
85
+ dice_list
86
+ else
87
+ dice_list.sort.pop(pick_dice_count)
88
+ end
89
+ end
90
+
91
+ def make_roll_text(rolled_dice_list)
92
+ "(#{rolled_dice_list.size}D6) > #{make_dice_text(rolled_dice_list)}"
93
+ end
94
+
95
+ # 実際にピックできた数と要求されたピック数は一致しないケースが(ルール上)あるため、 pick_dice_count はパラメータとして受ける必要がある。
96
+ def make_roll_and_pick_text(rolled_dice_list, pick_dice_count, picked_dice_list)
97
+ "(#{rolled_dice_list.size}D6|>#{pick_dice_count}D6) > #{make_dice_text(rolled_dice_list)} >> #{make_dice_text(picked_dice_list)} > #{picked_dice_list.sum}"
98
+ end
99
+
100
+ def make_dice_text(dice_list)
101
+ "[#{dice_list.sort.join ', '}]"
102
+ end
103
+
104
+ CATALYST_TABLES = {
105
+ 'CElement' => DiceTable::Table.new(
106
+ "奇跡の触媒(エレメント)",
107
+ "1D6",
108
+ [
109
+ "ワンド",
110
+ "水晶玉",
111
+ "カード",
112
+ "ステッキ",
113
+ "手鏡",
114
+ "宝石",
115
+ ]
116
+ ),
117
+ 'CAlchemia' => DiceTable::Table.new(
118
+ "奇跡の触媒(アルケミア)",
119
+ "1D6",
120
+ [
121
+ "指輪",
122
+ "ブレスレット",
123
+ "イヤリング",
124
+ "ネックレス",
125
+ "ブローチ",
126
+ "ヘアピン",
127
+ ]
128
+ ),
129
+ 'CInformant' => DiceTable::Table.new(
130
+ "奇跡の触媒(インフォーマント)",
131
+ "1D6",
132
+ [
133
+ "スマートフォン",
134
+ "タブレット",
135
+ "ノートパソコン",
136
+ "無線機(トランシーバー)",
137
+ "ウェアラブルデバイス",
138
+ "携帯ゲーム機",
139
+ ]
140
+ ),
141
+ 'CInnocence' => DiceTable::Table.new(
142
+ "奇跡の触媒(イノセンス)",
143
+ "1D6",
144
+ [
145
+ "手袋",
146
+ "笛",
147
+ "靴",
148
+ "鈴",
149
+ "拡声器",
150
+ "弦楽器",
151
+ ]
152
+ ),
153
+ 'CAcquired' => DiceTable::Table.new(
154
+ "奇跡の触媒(アクワイヤード)",
155
+ "1D6",
156
+ [
157
+ "ボタン",
158
+ "音声",
159
+ "モーション",
160
+ "脳波",
161
+ "記録媒体",
162
+ "AI",
163
+ ]
164
+ ),
165
+ }.transform_keys(&:upcase).freeze
166
+
167
+ ARTICLE_TABLES = {
168
+ 'ArticleS' => DiceTable::D66Table.new(
169
+ "携行品(Sサイズ)",
170
+ D66SortType::ASC,
171
+ {
172
+ 11 => "マッチ",
173
+ 12 => "ペットボトル",
174
+ 13 => "試験管",
175
+ 14 => "団扇",
176
+ 15 => "植物",
177
+ 16 => "ハンカチ",
178
+ 22 => "化粧用具",
179
+ 23 => "ベルト",
180
+ 24 => "タバコ",
181
+ 25 => "チェーン",
182
+ 26 => "電池",
183
+ 33 => "お菓子",
184
+ 34 => "針金",
185
+ 35 => "コイン",
186
+ 36 => "ナイフ",
187
+ 44 => "カトラリー",
188
+ 45 => "砂",
189
+ 46 => "スプレー",
190
+ 55 => "石",
191
+ 56 => "文房具",
192
+ 66 => "ペンライト",
193
+ }
194
+ ),
195
+ 'ArticleM' => DiceTable::D66ParityTable.new(
196
+ "携行品(Mサイズ)",
197
+ [
198
+ "本",
199
+ "傘",
200
+ "金属板",
201
+ "花火",
202
+ "エアガン",
203
+ "包帯",
204
+ ],
205
+ [
206
+ "工具",
207
+ "ジャケット",
208
+ "ロープ",
209
+ "人形",
210
+ "軽食",
211
+ "ガラス瓶",
212
+ ]
213
+ ),
214
+ 'ArticleL' => DiceTable::D66ParityTable.new(
215
+ "携行品(Lサイズ)",
216
+ [
217
+ "木刀",
218
+ "釣り具",
219
+ "自転車",
220
+ "バット",
221
+ "寝袋",
222
+ "丸太",
223
+ ],
224
+ [
225
+ "物干し竿",
226
+ "鍋",
227
+ "スケートボード",
228
+ "シャベル(スコップ)",
229
+ "タンク",
230
+ "脚立",
231
+ ]
232
+ ),
233
+ }.transform_keys(&:upcase).freeze
234
+
235
+ DRAMA_SEQUENCE_TABLES = {
236
+ 'PCInformation' => DiceTable::D66ParityTable.new(
237
+ "PC情報獲得表",
238
+ [
239
+ "前の場面の直後 ―― 直前にやり取りをしていた場所。聞きたいことを突きつける頃合いかもしれない。",
240
+ "自分の拠点 ―― 自分の心身を休められる場所。こちらのペースに引き込み、ゆさぶりをかける。",
241
+ "相手の拠点 ―― 相手が生活の基点にしている場所。相手のペースに呑まれないよう、慎重にいこう。",
242
+ "自学派の拠点 ―― 自分が学派の仲間と共に使用する場所。仲間に手は出させず、あくまでプレッシャーを与えるだけにしてもらう。",
243
+ "カフェ、バー ―― 厳かな空気に包まれた大人の場所。ここで声を荒げるのは紳士的ではない。",
244
+ "路地裏 ―― 建物と建物の間や、人通りの少ない裏通り。多少手荒な手段に出ても目立ちはしないだろう。",
245
+ ],
246
+ [
247
+ "廃墟 ―― 廃ビル、廃工場のような人が立ち入らない場所。おあつらえ向きの場所を用意してやった。",
248
+ "公共交通機関 ―― バス、電車など。昼夜問わず多くの人が利用する乗り物。敢えて人目に付く場所で詰め寄り、動揺を誘う。",
249
+ "雑木林 ―― 草木が揺れる音、虫や鳥の鳴き声だけが聞こえる。そこに邪魔する者はいない。",
250
+ "夜の公園 ―― 寝静まった街の公園。街灯に照らされない場所なら目立つこともないだろう。",
251
+ "駐車場 ―― 立体、平面、地下を問わず車を停める場所。人の出入りの激しさに対し、そこに留まる人は少ない。目撃者も多くはないだろう。",
252
+ "高架下 ―― 線路、道路の橋の下。響く騒音が自分たちの存在を薄めてくれる。",
253
+ ]
254
+ ),
255
+ 'Reason' => DiceTable::Table.new(
256
+ "理由表",
257
+ "1D6",
258
+ [
259
+ "不信感 ―― 行動や言動になにか釈然としない部分を感じる。白黒はっきりさせよう。",
260
+ "好奇心 ―― 相手のことを知りたいと掻き立てられる。知りたい気持ちを抑えられない。",
261
+ "庇護感 ―― 知古の姿を重ねて守りたくなってしまう。信頼関係を君と築くため、踏み込んだところまで知っておきたい。",
262
+ "嫌悪感 ―― 理由はないけど気に食わない。情報のアドバンテージを握ることで優位に立てるはずだ。",
263
+ "偏愛 ―― 愛ゆえに知りたくなってしまう。君の思考、目的、感情のすべてを手に入れたい。",
264
+ "直感 ―― 根拠はないが、なにか隠している気がする。一か八か、勝負に出よう。",
265
+ ]
266
+ ),
267
+ 'Associate' => DiceTable::D66ParityTable.new(
268
+ "交流表",
269
+ [
270
+ "前の場面の直後 ―― 直前にやり取りをした場所。ちょっと一息つくものいいだろう。",
271
+ "自分の拠点 ―― 自分の心身を休められる場所。一緒にくつろぎながら話をしよう。",
272
+ "相手の拠点 ―― 相手が生活の基点にしている場所。ちょっとお邪魔させてもらえないだろうか?",
273
+ "相手学派の拠点 ―― 相手が学派の仲間と共に使用する場所。若干の居心地悪さはあるが、好感を持ってもらうためには我慢も必要。",
274
+ "食事処 ―― ファミレス、居酒屋など。人でにぎわう食事処。気軽に飲み食いできる空間で、話も弾むはず。",
275
+ "アミューズメント施設 ―― カラオケ、ボーリング、ゲームセンターなどの娯楽施設。遊べば人となりがわかる。手っ取り早くいこう。",
276
+ ],
277
+ [
278
+ "お祭り ―― 老若男女が参加するイベント。非日常的な空気を楽しむことで、気分転換もできるだろう。",
279
+ "昼間の公園 ―― 散歩する人や子連れの家族で溢れる公園。僕らにもああやって生きる道があったのだろうか。",
280
+ "思い出の場所 ―― 自分にとって思い入れのある大事な場所。この人になら胸の内を明かしてもいい気分になった。",
281
+ "スポーツ観戦 ―― 野球、サッカー、バスケなど。プロアマ問わず観戦する。手に汗握る展開を共に見届けよう。",
282
+ "屋上 ―― 街と人を見下ろす眺めのいい場所。この景色を君は喜ぶだろうか、怖がるだろうか。",
283
+ "ショッピング ―― 大型商業施設やショッピングストリートに向かう。互いの興味があるものを知るいい機会だ。",
284
+ ]
285
+ ),
286
+ 'Contact' => DiceTable::Table.new(
287
+ "接触のきっかけ表",
288
+ "1D6",
289
+ [
290
+ "体勢を崩す ―― 転びそうになったところを支える、支えられる。",
291
+ "付着物をとる ―― 髪や服についているゴミ、汚れをとってあげる。",
292
+ "思わず手が出る ―― 言葉より先に、強めに手が出てしまう。",
293
+ "物ごしに触れる ―― 物を渡す、拾う際に指先同士がぶつかる。",
294
+ "友好のサイン ―― 肩を組む、握手をする、ハグをするなど。",
295
+ "ケアをしてあげる ―― 髪をとかす、肩をもむ、頭を撫でる。相手を労ってする行為全般。",
296
+ ]
297
+ ),
298
+ }.transform_keys(&:upcase).freeze
299
+
300
+ TABLES =
301
+ CATALYST_TABLES.merge(ARTICLE_TABLES).merge(DRAMA_SEQUENCE_TABLES)
302
+
303
+ alias_catalyst_tables = CATALYST_TABLES.keys.map { |key| [key[0, 4], key] }.to_h
304
+ alias_article_tables = ARTICLE_TABLES.keys.map { |key| [key[0, 2] + key[-1], key] }.to_h
305
+ alias_drama_sequence_tables = DRAMA_SEQUENCE_TABLES.keys.map { |key| [key[0, 3], key] }.to_h
306
+
307
+ ALIAS = alias_catalyst_tables.merge(alias_article_tables).merge(alias_drama_sequence_tables).freeze
308
+
309
+ register_prefix(ALIAS.keys, TABLES.keys)
310
+ end
311
+ end
312
+ end
@@ -2,7 +2,6 @@
2
2
 
3
3
  require 'bcdice/game_system/SRS'
4
4
 
5
- # アルシャードのダイスボット
6
5
  module BCDice
7
6
  module GameSystem
8
7
  class Alshard < SRS