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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +1 -0
- data/i18n/KillDeathBusiness/ja_jp.yml +4 -4
- data/i18n/KillDeathBusiness/ko_kr.yml +5 -4
- data/i18n/MagicaLogia/ko_kr.yml +564 -0
- data/i18n/MonotoneMuseum/ja_jp.yml +37 -1
- data/i18n/StratoShout/ja_jp.yml +4 -4
- data/i18n/StratoShout/ko_kr.yml +4 -4
- data/lib/bcdice.rb +2 -1
- data/lib/bcdice/arithmetic.rb +22 -0
- data/lib/bcdice/arithmetic/node.rb +112 -43
- data/lib/bcdice/arithmetic/parser.rb +240 -0
- data/lib/bcdice/arithmetic_evaluator.rb +5 -156
- data/lib/bcdice/base.rb +8 -1
- data/lib/bcdice/command/lexer.rb +57 -0
- data/lib/bcdice/command/parsed.rb +65 -0
- data/lib/bcdice/command/parser.rb +489 -0
- data/lib/bcdice/common_command/add_dice.rb +1 -1
- data/lib/bcdice/common_command/add_dice/node.rb +142 -69
- data/lib/bcdice/common_command/add_dice/parser.rb +100 -83
- data/lib/bcdice/common_command/barabara_dice/node.rb +7 -1
- data/lib/bcdice/common_command/barabara_dice/result.rb +22 -0
- data/lib/bcdice/common_command/calc/node.rb +10 -1
- data/lib/bcdice/common_command/calc/parser.rb +1 -1
- data/lib/bcdice/common_command/d66_dice.rb +3 -1
- data/lib/bcdice/common_command/lexer.rb +2 -1
- data/lib/bcdice/common_command/upper_dice/parser.rb +118 -97
- data/lib/bcdice/common_command/version.rb +1 -1
- data/lib/bcdice/deprecated/checker.rb +6 -6
- data/lib/bcdice/dice_table.rb +1 -0
- data/lib/bcdice/dice_table/d66_parity_table.rb +34 -0
- data/lib/bcdice/game_system.rb +3 -0
- data/lib/bcdice/game_system/AceKillerGene.rb +1 -1
- data/lib/bcdice/game_system/AlchemiaStruggle.rb +312 -0
- data/lib/bcdice/game_system/Alshard.rb +0 -1
- data/lib/bcdice/game_system/Amadeus.rb +1 -1
- data/lib/bcdice/game_system/AnimaAnimus.rb +1 -5
- data/lib/bcdice/game_system/BadLife.rb +1 -1
- data/lib/bcdice/game_system/BeastBindTrinity.rb +1 -10
- data/lib/bcdice/game_system/BeginningIdol.rb +4 -4
- data/lib/bcdice/game_system/BeginningIdol_Korean.rb +4 -4
- data/lib/bcdice/game_system/BladeOfArcana.rb +4 -4
- data/lib/bcdice/game_system/BlindMythos.rb +12 -9
- data/lib/bcdice/game_system/BloodCrusade.rb +12 -38
- data/lib/bcdice/game_system/BloodMoon.rb +2 -2
- data/lib/bcdice/game_system/CardRanker.rb +23 -63
- data/lib/bcdice/game_system/ChaosFlare.rb +3 -3
- data/lib/bcdice/game_system/CodeLayerd.rb +1 -1
- data/lib/bcdice/game_system/ColossalHunter.rb +2 -2
- data/lib/bcdice/game_system/Cthulhu7th.rb +2 -2
- data/lib/bcdice/game_system/CthulhuTech.rb +0 -1
- data/lib/bcdice/game_system/DarkBlaze.rb +4 -4
- data/lib/bcdice/game_system/DeadlineHeroes.rb +1 -1
- data/lib/bcdice/game_system/DoubleCross.rb +60 -93
- data/lib/bcdice/game_system/EmbryoMachine.rb +5 -5
- data/lib/bcdice/game_system/EtrianOdysseySRS.rb +0 -1
- data/lib/bcdice/game_system/FilledWith.rb +3 -3
- data/lib/bcdice/game_system/FullMetalPanic.rb +0 -1
- data/lib/bcdice/game_system/GURPS.rb +1 -1
- data/lib/bcdice/game_system/Garako.rb +3 -2
- data/lib/bcdice/game_system/GardenOrder.rb +1 -1
- data/lib/bcdice/game_system/GehennaAn.rb +3 -3
- data/lib/bcdice/game_system/Gundog.rb +1 -1
- data/lib/bcdice/game_system/GundogRevised.rb +3 -3
- data/lib/bcdice/game_system/GundogZero.rb +2 -2
- data/lib/bcdice/game_system/GurpsFW.rb +2 -5
- data/lib/bcdice/game_system/HatsuneMiku.rb +1 -1
- data/lib/bcdice/game_system/HuntersMoon.rb +17 -110
- data/lib/bcdice/game_system/JuinKansen.rb +251 -0
- data/lib/bcdice/game_system/KanColle.rb +17 -166
- data/lib/bcdice/game_system/KillDeathBusiness.rb +35 -44
- data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +2 -1
- data/lib/bcdice/game_system/LogHorizon.rb +8 -8
- data/lib/bcdice/game_system/LostRoyal.rb +1 -3
- data/lib/bcdice/game_system/MagicaLogia.rb +3 -3
- data/lib/bcdice/game_system/MagicaLogia_Korean.rb +66 -0
- data/lib/bcdice/game_system/MeikyuDays.rb +1 -1
- data/lib/bcdice/game_system/MeikyuKingdom.rb +1 -1
- data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +1 -1
- data/lib/bcdice/game_system/MetalHeadExtream.rb +4 -4
- data/lib/bcdice/game_system/MetallicGuardian.rb +0 -1
- data/lib/bcdice/game_system/MonotoneMuseum.rb +3 -2
- data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +1 -1
- data/lib/bcdice/game_system/NSSQ.rb +2 -2
- data/lib/bcdice/game_system/Nechronica.rb +3 -3
- data/lib/bcdice/game_system/NightWizard.rb +1 -1
- data/lib/bcdice/game_system/NightmareHunterDeep.rb +3 -4
- data/lib/bcdice/game_system/NinjaSlayer.rb +26 -28
- data/lib/bcdice/game_system/OracleEngine.rb +13 -17
- data/lib/bcdice/game_system/Paradiso.rb +2 -2
- data/lib/bcdice/game_system/PhantasmAdventure.rb +0 -4
- data/lib/bcdice/game_system/Raisondetre.rb +1 -1
- data/lib/bcdice/game_system/RecordOfLodossWar.rb +2 -3
- data/lib/bcdice/game_system/RokumonSekai2.rb +2 -2
- data/lib/bcdice/game_system/RuinBreakers.rb +1 -1
- data/lib/bcdice/game_system/Ryutama.rb +1 -1
- data/lib/bcdice/game_system/SRS.rb +0 -5
- data/lib/bcdice/game_system/SamsaraBallad.rb +4 -3
- data/lib/bcdice/game_system/Satasupe.rb +22 -14
- data/lib/bcdice/game_system/ScreamHighSchool.rb +2 -2
- data/lib/bcdice/game_system/ShinkuuGakuen.rb +1 -1
- data/lib/bcdice/game_system/ShinobiGami.rb +75 -39
- data/lib/bcdice/game_system/StellarKnights.rb +1 -3
- data/lib/bcdice/game_system/SterileLife.rb +1 -1
- data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -1
- data/lib/bcdice/game_system/StratoShout.rb +10 -36
- data/lib/bcdice/game_system/StratoShout_Korean.rb +2 -1
- data/lib/bcdice/game_system/SwordWorld.rb +5 -5
- data/lib/bcdice/game_system/SwordWorld2_5.rb +1 -1
- data/lib/bcdice/game_system/TherapieSein.rb +2 -2
- data/lib/bcdice/game_system/TokumeiTenkousei.rb +2 -2
- data/lib/bcdice/game_system/Torg.rb +1 -1
- data/lib/bcdice/game_system/TorgEternity.rb +4 -7
- data/lib/bcdice/game_system/TrinitySeven.rb +2 -2
- data/lib/bcdice/game_system/TunnelsAndTrolls.rb +6 -6
- data/lib/bcdice/game_system/TwilightGunsmoke.rb +1 -1
- data/lib/bcdice/game_system/Utakaze.rb +1 -1
- data/lib/bcdice/game_system/Warhammer.rb +6 -6
- data/lib/bcdice/game_system/Warhammer4.rb +9 -12
- data/lib/bcdice/game_system/ZettaiReido.rb +1 -1
- data/lib/bcdice/normalize.rb +1 -1
- data/lib/bcdice/preprocessor.rb +12 -8
- data/lib/bcdice/randomizer.rb +12 -0
- data/lib/bcdice/repl.rb +1 -1
- data/lib/bcdice/result.rb +2 -0
- data/lib/bcdice/user_defined_dice_table.rb +26 -15
- data/lib/bcdice/version.rb +1 -1
- metadata +14 -25
- data/.editorconfig +0 -21
- data/.github/.codecov.yaml +0 -10
- data/.github/workflows/coverage.yaml +0 -21
- data/.github/workflows/lint.yaml +0 -13
- data/.github/workflows/test.yml +0 -20
- data/.gitignore +0 -14
- data/.rubocop.yml +0 -108
- data/.rubocop_todo.yml +0 -114
- data/Gemfile +0 -14
- data/ROADMAP.md +0 -30
- data/Rakefile +0 -152
- data/bcdice.gemspec +0 -29
- data/bin/repl.rb +0 -21
- data/docs/README.txt +0 -2028
- data/docs/dicebot_sort_key.md +0 -72
- data/docs/how_to_make_dicebot.md +0 -453
- data/lib/bcdice/command_parser.rb +0 -242
- data/lib/bcdice/common_command/add_dice/parser.y +0 -153
- data/lib/bcdice/common_command/barabara_dice/parser.y +0 -107
- data/lib/bcdice/common_command/calc/parser.y +0 -79
- data/lib/bcdice/common_command/reroll_dice/parser.y +0 -158
- data/lib/bcdice/common_command/upper_dice/parser.y +0 -143
@@ -3,7 +3,7 @@
|
|
3
3
|
module BCDice
|
4
4
|
module Deprecated
|
5
5
|
# 2D6などの特定の加算ダイスの結果をゲームシステムごとにカスタマイズするための
|
6
|
-
# @
|
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
|
-
# @
|
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
|
-
# @
|
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
|
-
# @
|
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
|
-
# @
|
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
|
-
# @
|
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
|
data/lib/bcdice/dice_table.rb
CHANGED
@@ -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
|
data/lib/bcdice/game_system.rb
CHANGED
@@ -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)(
|
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
|