Skip to content

Commit

Permalink
Desperate Run TRPG と ジキルとハイドとグリトグラ に対応 (#362)
Browse files Browse the repository at this point in the history
* DesperateRunTRPG と ジキルとハイドとグリトグラのダイスボット、テストコードを追加。

* [DesperateRun] リファクタリング

* [JekyllAndHyde] ファイル名変更

* [JekyllAndHyde] ID変更

* [JekyllAndHyde] DesperateRunと共通化

* 出力の区切り文字を修正

* 全角を半角に

* Resultに対応

* [DesperateRun] 加算ダイスをソートする

Co-authored-by: SAKATA Sinji <ysakasin@gmail.com>
  • Loading branch information
saronpasu and ysakasin authored Jan 4, 2021
1 parent ce24046 commit 128c9da
Show file tree
Hide file tree
Showing 5 changed files with 885 additions and 0 deletions.
2 changes: 2 additions & 0 deletions lib/bcdice/game_system.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
require "bcdice/game_system/DarkSouls"
require "bcdice/game_system/DeadlineHeroes"
require "bcdice/game_system/DemonParasite"
require "bcdice/game_system/DesperateRun"
require "bcdice/game_system/DetatokoSaga"
require "bcdice/game_system/DetatokoSaga_Korean"
require "bcdice/game_system/DiceBot"
Expand Down Expand Up @@ -93,6 +94,7 @@
require "bcdice/game_system/Insane_Korean"
require "bcdice/game_system/IthaWenUa"
require "bcdice/game_system/JamesBond"
require "bcdice/game_system/JekyllAndHyde"
require "bcdice/game_system/JuinKansen"
require "bcdice/game_system/Kamigakari"
require "bcdice/game_system/Kamigakari_Korean"
Expand Down
163 changes: 163 additions & 0 deletions lib/bcdice/game_system/DesperateRun.rb
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
42 changes: 42 additions & 0 deletions lib/bcdice/game_system/JekyllAndHyde.rb
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
Loading

0 comments on commit 128c9da

Please sign in to comment.