Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

『実況ゴーストライヴ』のダイスボットを追加 #548

Merged
merged 2 commits into from
Aug 20, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lib/bcdice/game_system.rb
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@
require "bcdice/game_system/GardenOrder"
require "bcdice/game_system/GehennaAn"
require "bcdice/game_system/GeishaGirlwithKatana"
require "bcdice/game_system/GhostLive"
require "bcdice/game_system/GoblinSlayer"
require "bcdice/game_system/GoldenSkyStories"
require "bcdice/game_system/Gorilla"
Expand Down
144 changes: 144 additions & 0 deletions lib/bcdice/game_system/GhostLive.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
# frozen_string_literal: true

module BCDice
module GameSystem
class GhostLive < Base
# ゲームシステムの識別子
ID = 'GhostLive'

# ゲームシステム名
NAME = '実況ゴーストライヴ'

# ゲームシステム名の読みがな
SORT_KEY = 'しつきようこおすとらいふ'

# ダイスボットの使い方
HELP_MESSAGE = <<~MESSAGE
■追加目標表(p11)
ATT, AdditionalTargetTable

■種別:地縛霊(p26)
□A.霊障リスト
JHA, JibakuHauntA
□B.霊障効果リスト
JHB, JibakuHauntB

■種別:シャイな幽霊(p27)
□A.霊障リスト
SHA, ShyHauntA
□B.霊障効果リスト
SHB, ShyHauntB

■種別:ぐちゃぐちゃ(p28)
□A.霊障リスト
GHA, GuchaHauntA
□B.霊障効果リスト
GHB, GuchaHauntB
MESSAGE

def eval_game_system_specific_command(command)
command = ALIAS[command] || command
roll_tables(command, TABLES)
end

TABLES = {
"AdditionalTargetTable" => DiceTable::Table.new(
"追加目標表",
"1D6",
[
"オバケを撮影する。(依頼主:専門家/報酬:1L)",
"誰かひとりが霊障を[サイクル数]回受ける。(依頼主:専門家/報酬:[サイクル数]L)",
"誰かひとりが[精神力]を10以下の状態で帰る。(依頼主:専門家/報酬:3L)",
"[精神力]の平均が20以下の状態で帰る。(依頼主:リスナー/報酬:[視聴回数]を10倍)",
"全員がスマホ以外の[アイテム]を1個だけ持ち込んで生還する。(依頼主:リスナー/報酬:[視聴回数]を10倍)",
"すべての[回収品]を集める。(依頼主:専門家/報酬:5L)",
]
),
"JibakuHauntA" => DiceTable::Table.new(
"地縛霊:霊障リスト",
"1D6",
[
"隙間――家具の隙間、扉の隙間、そんな暗がりから視線を感じる。",
"腐臭――吐き気を催すような、下水に似た臭いが漂ってくる。",
"吐息――「ハァ……」耳元に、やけに湿った吐息が吹きかけられる。",
"足音――立ち止まる度に、ひとつ多く足音が響く。誰か、いる……?",
"背後――振り向いても、そこには誰もいない。それなのに、ずっと後ろに気配を感じる。",
"鏡――鏡に背を向けた瞬間、あり得ない強さでそちらへ引き寄せられた。肩には手の形のアザができている。",
]
),
"JibakuHauntB" => DiceTable::Table.new(
"地縛霊:霊障効果リスト",
"1D6",
[
"[精神力]減少:[1D2+PC人数]点/[視聴回数]増加:とくになし/特殊効果:とくになし",
"[精神力]減少:[1D4+PC人数]点/[視聴回数]増加:とくになし/特殊効果:とくになし",
"[精神力]減少:[1D6+PC人数]点/[視聴回数]増加:2倍/特殊効果:とくになし",
"[精神力]減少:[1D10+PC人数]点/[視聴回数]増加:3倍/特殊効果:シーンに登場しているPCの[アイテム]を1つ破壊する。",
"[精神力]減少:[1D20+PC人数]点/[視聴回数]増加:5倍/特殊効果:シーンに登場しているPCのスマホを破壊する。",
"[精神力]減少:[1D100+PC人数]点/[視聴回数]増加:10倍/特殊効果:シーンに登場しているPCのスマホを破壊する。",
]
),
"ShyHauntA" => DiceTable::Table.new(
"シャイな幽霊:霊障リスト",
"1D6",
[
"倦怠感――歩くのも辛いくらいの倦怠感。生きているのも辛い。",
"ラップ音――弾けるような、叩くような音が連続して聞こえる。",
"空飛ぶ皿――棚に収まっていた食器が、不意に飛び出し、けたたましい音を立てて砕けていく。",
"頭痛――頭が、割れそうに痛い。小さな物音ですら頭に響いてくる。",
"点滅――灯りが明滅する。……あれ、ここ電気通ってたっけ?",
"血文字――壁に、床に、赤⿊い液体が滲み出す。それは文字を形作った。「か え れ」",
]
),
"ShyHauntB" => DiceTable::Table.new(
"シャイな幽霊:霊障効果リスト",
"1D6",
[
"[精神力]減少:[2+PC人数]点/[視聴回数]増加:とくになし/特殊効果:とくになし",
"[精神力]減少:[4+PC人数]点/[視聴回数]増加:2倍/特殊効果:シーンに登場しているPCがふたりの場合、追加で[精神力]を2減少させる。",
"[精神力]減少:[6+PC人数]点/[視聴回数]増加:3倍/特殊効果:シーンに登場しているPCがひとりの場合、追加で[精神力]を4減少させる。",
"[精神力]減少:[10+PC人数]点/[視聴回数]増加:5倍/特殊効果:シーンに登場しているPCがふたりの場合、追加で[精神力]を6減少させる。",
"[精神力]減少:[20+PC人数]点/[視聴回数]増加:10倍/特殊効果:シーンに登場しているPCがひとりの場合、追加で[精神力]を2減少させる。",
"[精神力]減少:[40+PC人数]点/[視聴回数]増加:20倍/特殊効果:シーンに登場しているPCのスマホを破壊する。",
]
),
"GuchaHauntA" => DiceTable::Table.new(
"ぐちゃぐちゃ:霊障リスト",
"1D6",
[
"走る人形――ひび割れた人形が落ちている。一瞬視線をそらした瞬間、それはありえない動きで走り去っていった。",
"血痕――天井から血が滴ってくる。その量は、おおよそ人一人分……いや、それ以上だ。",
"着信――スマホの着信音が鳴る。こんな時に誰が――表示されていたのは、死んだはずの知り合いの名前だった。",
"自分に似た他人――自分にそっくりな人が目の前に立っていた、気がする。",
"衝撃――誰かに思いっきり押された気がしたのに誰もいない。",
"記憶がない――数分間のことを何も覚えてない。コメント欄がリスナーの心配する声でいっぱいだ。いったい何が……?",
]
),
"GuchaHauntB" => DiceTable::Table.new(
"ぐちゃぐちゃ:霊障効果リスト",
"1D6",
[
"[精神力]減少:[5+PC人数]点/[視聴回数]増加:2倍/特殊効果:とくになし",
"[精神力]減少:[10+PC人数]点/[視聴回数]増加:3倍/特殊効果:とくになし",
"[精神力]減少:[2D10+PC人数]点/[視聴回数]増加:4倍/特殊効果:シーンに登場しているPCがふたりの場合、追加で[精神力]を5減少させる。",
"[精神力]減少:[3D10+PC人数]点/[視聴回数]増加:5倍/特殊効果:シーンに登場しているPCがひとりの場合、[アイテム]をランダムに1つ壊す。",
"[精神力]減少:[1D100+PC人数]点/[視聴回数]増加:10倍/特殊効果:シーンに登場しているPCのスマホを破壊する。",
"[精神力]減少:[1D100+10+PC人数]点/[視聴回数]増加:20倍/特殊効果:すべてのPCのスマホを破壊する。",
]
),
}.transform_keys(&:upcase).freeze

ALIAS = {
"ATT" => "AdditionalTargetTable",
"JHA" => "JibakuHauntA",
"JHB" => "JibakuHauntB",
"SHA" => "ShyHauntA",
"SHB" => "ShyHauntB",
"GHA" => "GuchaHauntA",
"GHB" => "GuchaHauntB",
}.transform_values(&:upcase).freeze

register_prefix(TABLES.keys, ALIAS.keys)
end
end
end
119 changes: 119 additions & 0 deletions test/data/GhostLive.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
[[ test ]]
game_system = "GhostLive"
input = "1D10000+5000" # 初期[視聴回数]の決定,レジェンド
output = "(1D10000+5000) > 18[18]+5000 > 5018"
rands = [
{ sides = 10000, value = 18 },
]

[[ test ]]
game_system = "GhostLive"
input = "AdditionalTargetTable"
output = "追加目標表(1) > オバケを撮影する。(依頼主:専門家/報酬:1L)"
rands = [
{ sides = 6, value = 1 },
]

[[ test ]]
game_system = "GhostLive"
input = "att"
output = "追加目標表(6) > すべての[回収品]を集める。(依頼主:専門家/報酬:5L)"
rands = [
{ sides = 6, value = 6 },
]

[[ test ]]
game_system = "GhostLive"
input = "jibakuHauntA"
output = "地縛霊:霊障リスト(1) > 隙間――家具の隙間、扉の隙間、そんな暗がりから視線を感じる。"
rands = [
{ sides = 6, value = 1 },
]

[[ test ]]
game_system = "GhostLive"
input = "jha"
output = "地縛霊:霊障リスト(6) > 鏡――鏡に背を向けた瞬間、あり得ない強さでそちらへ引き寄せられた。肩には手の形のアザができている。"
rands = [
{ sides = 6, value = 6 },
]

[[ test ]]
game_system = "GhostLive"
input = "jibakuHauntB"
output = "地縛霊:霊障効果リスト(1) > [精神力]減少:[1D2+PC人数]点/[視聴回数]増加:とくになし/特殊効果:とくになし"
rands = [
{ sides = 6, value = 1 },
]

[[ test ]]
game_system = "GhostLive"
input = "jhb"
output = "地縛霊:霊障効果リスト(6) > [精神力]減少:[1D100+PC人数]点/[視聴回数]増加:10倍/特殊効果:シーンに登場しているPCのスマホを破壊する。"
rands = [
{ sides = 6, value = 6 },
]

[[ test ]]
game_system = "GhostLive"
input = "shyHauntA"
output = "シャイな幽霊:霊障リスト(1) > 倦怠感――歩くのも辛いくらいの倦怠感。生きているのも辛い。"
rands = [
{ sides = 6, value = 1 },
]

[[ test ]]
game_system = "GhostLive"
input = "sha"
output = "シャイな幽霊:霊障リスト(6) > 血文字――壁に、床に、赤⿊い液体が滲み出す。それは文字を形作った。「か え れ」"
rands = [
{ sides = 6, value = 6 },
]

[[ test ]]
game_system = "GhostLive"
input = "shyHauntB"
output = "シャイな幽霊:霊障効果リスト(1) > [精神力]減少:[2+PC人数]点/[視聴回数]増加:とくになし/特殊効果:とくになし"
rands = [
{ sides = 6, value = 1 },
]

[[ test ]]
game_system = "GhostLive"
input = "shb"
output = "シャイな幽霊:霊障効果リスト(6) > [精神力]減少:[40+PC人数]点/[視聴回数]増加:20倍/特殊効果:シーンに登場しているPCのスマホを破壊する。"
rands = [
{ sides = 6, value = 6 },
]

[[ test ]]
game_system = "GhostLive"
input = "guchaHauntA"
output = "ぐちゃぐちゃ:霊障リスト(1) > 走る人形――ひび割れた人形が落ちている。一瞬視線をそらした瞬間、それはありえない動きで走り去っていった。"
rands = [
{ sides = 6, value = 1 },
]

[[ test ]]
game_system = "GhostLive"
input = "gha"
output = "ぐちゃぐちゃ:霊障リスト(6) > 記憶がない――数分間のことを何も覚えてない。コメント欄がリスナーの心配する声でいっぱいだ。いったい何が……?"
rands = [
{ sides = 6, value = 6 },
]

[[ test ]]
game_system = "GhostLive"
input = "guchaHauntB"
output = "ぐちゃぐちゃ:霊障効果リスト(1) > [精神力]減少:[5+PC人数]点/[視聴回数]増加:2倍/特殊効果:とくになし"
rands = [
{ sides = 6, value = 1 },
]

[[ test ]]
game_system = "GhostLive"
input = "ghb"
output = "ぐちゃぐちゃ:霊障効果リスト(6) > [精神力]減少:[1D100+10+PC人数]点/[視聴回数]増加:20倍/特殊効果:すべてのPCのスマホを破壊する。"
rands = [
{ sides = 6, value = 6 },
]