bcdice 3.0.0.pre.alpha.2 → 3.0.0.pre.rc.1

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