-
Notifications
You must be signed in to change notification settings - Fork 186
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Desperate Run TRPG と ジキルとハイドとグリトグラ に対応 (#362)
* DesperateRunTRPG と ジキルとハイドとグリトグラのダイスボット、テストコードを追加。 * [DesperateRun] リファクタリング * [JekyllAndHyde] ファイル名変更 * [JekyllAndHyde] ID変更 * [JekyllAndHyde] DesperateRunと共通化 * 出力の区切り文字を修正 * 全角を半角に * Resultに対応 * [DesperateRun] 加算ダイスをソートする Co-authored-by: SAKATA Sinji <ysakasin@gmail.com>
- Loading branch information
Showing
5 changed files
with
885 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,163 @@ | ||
# frozen_string_literal: true | ||
|
||
require "bcdice/base" | ||
|
||
module BCDice | ||
module GameSystem | ||
class DesperateRun < Base | ||
# ゲームシステムの識別子 | ||
ID = "DesperateRun" | ||
|
||
# ゲームシステム名 | ||
NAME = "Desperate Run TRPG" | ||
|
||
# ゲームシステム名の読みがな | ||
SORT_KEY = "てすへれいとらんTRPG" | ||
|
||
# ダイスボットの使い方 | ||
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT | ||
・難易度算出コマンド DDC | ||
・判定コマンド RCx or RCx+y or RCx-y(x=難易度、y=修正値(省略可能)) | ||
・アクシデント表 ACT | ||
・初期アイテム表 ITEMT | ||
・動機表 DOUKIT | ||
・死亡フラグ台詞表 FLAGT | ||
・途中参加動機表 ENTRYT | ||
・途中参加道中表 ROADT | ||
INFO_MESSAGE_TEXT | ||
|
||
TABLES = { | ||
"ACT" => DiceTable::Table.new( | ||
"アクシデント表", | ||
"1D6", [ | ||
"PC全員、隊列を1D6で決める(12:前列、34:中列、56:後列)", | ||
"1ターン、モンスター側のみ行動する。", | ||
"この戦闘の行動順が、PC→モンスター、から、モンスター→PCに変わる。", | ||
"PC全員、アイテム1つを選んで失う。", | ||
"PC全員1D6を振る。この戦闘中、その出目はノープランになる。", | ||
"PC全員、Flagが1増加する。" | ||
] | ||
), | ||
"ITEMT" => DiceTable::Table.new( | ||
"初期アイテム表", | ||
"2D6", [ | ||
"ロケットランチャー 効果:(装備)マカブルLv+3 回数:攻撃1回", | ||
"キーピック 効果:(消費)ムーブシーンで使用可。判定の出目の合計+1 回数:2回", | ||
"レーダー 効果:(装備)ノープラン 装備時、「危険」を1減らすことが出来る 回数:危険減少2回", | ||
"食料 効果:(消費)ムーブシーンで使用可。Life3回復 回数:1回", | ||
"応急キット 効果:(装備)メディカルLv+1 回数:回復3回", | ||
"刃物 効果:(装備)アタックLv+1 回数:攻撃6回", | ||
"銃 効果:(装備)シュートLv+1 回数:攻撃6回", | ||
"ドラッグ 効果:(消費)いつでも使用可。Brave1回復 回数:1回", | ||
"金券 効果:(消費)アフタープレイで使用可。経験点+2 回数:1回", | ||
"プロテクター 効果:(装備)ガードLv+1 回数:防御5回", | ||
"トミーガン 効果:(装備)チェーンLv+5 回数:攻撃1回" | ||
] | ||
), | ||
"DOUKIT" => DiceTable::Table.new( | ||
"動機表", | ||
"1D6", [ | ||
"隷属。何か弱みに付け込まれ、嫌々ながらも参加することとなる。後ろめたい事、借金、など。", | ||
"献身。この番組は誰かのために出ている。病気の家族を救うため、参加者の一人が恋人である、など。", | ||
"成行。望んでいないのに参加することとなってしまった。誰かが勝手に申し込んだ、紛れ込んでしまった、など。", | ||
"渇望。とにかく何かを欲して参加している。金、スリル、金で手に入るもの、など。", | ||
"奇人。好き好んでこの番組に出ている。殺人癖、ナルシスト、自殺願望、化け物マニア、など。", | ||
"仕事。この番組に出るのは仕事だからだ。賞金稼ぎ、芸能人、記者、番組スタッフ、など。" | ||
] | ||
), | ||
"FLAGT" => DiceTable::Table.new( | ||
"死亡フラグ台詞表", | ||
"1D6", [ | ||
"希望。「これが終わったら、一緒に酒でも飲もうや」「もう何も怖くない」など。", | ||
"望郷。「くそっ、、、俺には、帰りを待つ人が、、、っ!」「ああ、故郷のマルゲリータをもう一度食べたかった、、、」など。", | ||
"狂乱。「お前を、殺せば、俺は、億万長者なんだよぉぉぉお!!」「ヒハッ、死ね死ね死ね死ねぇぇぇぇ」など。", | ||
"絶望。「もうだめだぁ、、、おしまいだぁ、、、」「く、くるなっ、くるなぁぁぁぁ!!」など。", | ||
"慢心。「なんだ、こんなやつ、俺だけで十分だ」「大丈夫だ、問題ない」など。", | ||
"犠牲。「ふふ、俺なら大丈夫だ、、、気にするな」「お前ら下がれっ!ここは俺に任せろ!」など。" | ||
] | ||
), | ||
"ENTRYT" => DiceTable::Table.new( | ||
"途中参加動機表", | ||
"1D6", [ | ||
"遅刻。もともと参加する予定だったのだが遅れてしまった。今からでも走れと無理矢理参加。", | ||
"現住。もともとここに住んでいた。何?番組?え?あ、お金もらえんの?イイネ!", | ||
"突発。もともと視聴者としてスタジオに居たんだけど、司会にうまく乗せられて・・・", | ||
"乱入。何か目的があって乱入した。今回のステージが簡単に見えたり、参加者に大事な人がいたのかもしれない。", | ||
"神隠。今回より前の番組に参加していたが行方不明・死んだと思われていた。が。君はまだここにいる。", | ||
"職員。あれ、逃げ遅れました?あらあら、大変ですね、しょうがないから参加者さんと一緒に走ってください。" | ||
] | ||
), | ||
"ROADT" => DiceTable::Table.new( | ||
"途中参加道中表", | ||
"1D6", [ | ||
"死線。死ぬかと思った。Flag+1", | ||
"怪我。痛い。Life-1", | ||
"失意。どうしてこうなった。Brave-1。減らせない場合、Flag+1", | ||
"紛失。どっかいった。Itemをどれか1つ捨てる。捨てれない場合、Flag+1", | ||
"追尾。後ろ!後ろーっ!参加開始部屋の危険+1", | ||
"迷子。あれ、ここどこだ?途中参加道中表を振る回数+2" | ||
] | ||
) | ||
}.freeze | ||
|
||
register_prefix('RC\d+', 'DDC', TABLES.keys) | ||
|
||
def initialize(command) | ||
super(command) | ||
@sort_add_dice = true | ||
@d66_sort_type = D66SortType::ASC | ||
end | ||
|
||
private | ||
|
||
def eval_game_system_specific_command(command) | ||
check_roll(command) || ddc_table(command) || roll_tables(command, self.class::TABLES) | ||
end | ||
|
||
def check_roll(string) | ||
parser = Command::Parser.new(/RC\d+/, round_type: round_type) | ||
.restrict_cmp_op_to(nil) | ||
cmd = parser.parse(string) | ||
return nil unless cmd | ||
|
||
d1, d2 = @randomizer.roll_barabara(2, 6) | ||
dice_total = d1 + d2 | ||
total = d1 + d2 + cmd.modify_number | ||
target = cmd.command[2..-1].to_i | ||
|
||
modifier_str = " 修正値:#{cmd.modify_number}" if cmd.modify_number != 0 | ||
|
||
result = | ||
if d1 == d2 | ||
Result.critical("ゾロ目!【Critical】") | ||
elsif dice_total == 7 | ||
Result.fumble("ダイスの出目が表裏!【Fumble】") | ||
elsif total >= target | ||
Result.success("#{total}、難易度以上!【Success】") | ||
else | ||
Result.failure("#{total}、難易度未満!【Miss】") | ||
end | ||
|
||
sequence = [ | ||
"判定 難易度:#{target}#{modifier_str}", | ||
"出目:#{d1}、#{d2}", | ||
result.text, | ||
] | ||
|
||
result.text = sequence.join(" > ") | ||
result | ||
end | ||
|
||
def ddc_table(command) | ||
return nil if command != "DDC" | ||
|
||
d1, d2 = @randomizer.roll_barabara(2, 6) | ||
|
||
smaller, larger = [d1, d2].sort | ||
difference = larger - smaller | ||
|
||
"難易度決定 > 出目:#{d1}、#{d2} > #{larger}-#{smaller}=#{difference} > 難易度#{5 + difference}" | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
# frozen_string_literal: true | ||
|
||
require "bcdice/game_system/DesperateRun" | ||
|
||
module BCDice | ||
module GameSystem | ||
class JekyllAndHyde < DesperateRun | ||
# ゲームシステムの識別子 | ||
ID = "JekyllAndHyde" | ||
|
||
# ゲームシステム名 | ||
NAME = "ジキルとハイドとグリトグラ" | ||
|
||
# ゲームシステム名の読みがな | ||
SORT_KEY = "しきるとはいととくりとくら" | ||
|
||
# ダイスボットの使い方 | ||
HELP_MESSAGE = <<~HELP | ||
・難易度算出コマンド DDC | ||
・判定コマンド RCx or RCx+y or RCx-y(x=難易度、y=修正値(省略可能)) | ||
・目標決定表 GOALT | ||
HELP | ||
|
||
TABLES = { | ||
"GOALT" => DiceTable::Table.new( | ||
"目標決定表", | ||
"1D6", | ||
[ | ||
"「主人格の目的達成」", | ||
"「主人格の目的阻害」", | ||
"「主人格のハッピーエンド(目的達成しなくてもよい)」", | ||
"「主人格のバッドエンド(目的達成していてもよい)」", | ||
"「自分の人格が目的を決定できる」", | ||
"「主人格の目的達成」「主人格の目的阻害」「主人格のハッピーエンド(目的達成しなくてもよい)」「主人格のバッドエンド(目的達成していてもよい)」「自分の人格が目的を決定できる」のどれかを自由に選べる" | ||
] | ||
) | ||
}.freeze | ||
|
||
register_prefix('RC\d+', 'DDC', TABLES.keys) | ||
end | ||
end | ||
end |
Oops, something went wrong.