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

[DoubleCross]ハプニングチャートとRWプロローグチャートを振るためのコマンド(HC, PCP, PCN)を追加 #736

Open
wants to merge 16 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 3 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
22 changes: 22 additions & 0 deletions i18n/DoubleCross/ja_jp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,25 @@ ja_jp:
"86_90": 不快感(ふかいかん)
"91_95": 憤懣(ふんまん)
"96_100": 敵愾心(てきがいしん)
HC:
name: ハプニングチャート
items:
"1_5" : こともなし。修正は特にない。
"6_10" : 専門的知識が必要。そのラウンドの間、指定された技能が4レベル以下のキャラクターが獲得する進行値は-1となる(最低0)
"11_15" : 焦り。そのラウンド中、難易度+1D10。
"16_20" : 一歩間違えば致命的な状況。次の進行判定に失敗した場合、今まで獲得した進行値が0になる。
"21_25" : 異常な興奮。そのラウンド中、進行判定に失敗したキャラクターは暴走を受ける。
"26_30" : プレッシャー。そのラウンド中に進行判定を行なったキャラクターは、判定の直後に重圧を受ける。
"31_35" : 幸運がほほえむ。このラウンド中に行なう進行判定はすべてクリティカル値-1される。
"36_40" : 破滅的不運。このラウンド中に行なう進行判定はすべてクリティカル値+1される。
"41_45" : ーか八かのチャンス。このラウンド中、最大達成値と難易度に+10。
"46_55" : 膠着した進行。修正は特にない。
"56_60" : 綱渡りのような状況。このラウンド中、難易度+1D10。
"61_65" : あるかなきかのチャンス。このラウンド中、最大達成値+10。
"66_70" : 消耗を伴う作業。このラウンド中に進行判定を行なったキャラクターは、判定の直後に1D10点のHPダメージを受ける。
"71_75" : チャンス到来。このラウンド中に行なう進行判定は、ダイスが+5個される。
"76_80" : 予想外のビンチ。このラウンド中に行なう進行判定は、ダイスが-5個される。
"81_85" : 緊張がレネゲイドを活性化。そのラウンド中に進行判定を行なったキャラクターは、判定の直後に1D10点侵蝕率が増加。
"86_90" : 突破口の発見。このシーン中の最大達成値+10。この効果は重複しない。
"91_95" : 事態の断続的な悪化。このシーン中の難易度+1D10。この効果は重複する。
"96_100": 順当な進行。このラウンド中に進行判定に成功したキャラクターは、進行値を+1得る。
RYOSKATE marked this conversation as resolved.
Show resolved Hide resolved
52 changes: 52 additions & 0 deletions lib/bcdice/game_system/DoubleCross.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ class DoubleCross < Base
  ポジティブとネガティブの両方を振って、表になっている側に○を付けて表示します。
  もちろん任意で選ぶ部分は変更して構いません。

・ハプニングチャート(HC)

RYOSKATE marked this conversation as resolved.
Show resolved Hide resolved
・D66ダイスあり
INFO_MESSAGE_TEXT

Expand All @@ -36,6 +38,7 @@ def initialize(command)
end

register_prefix('\d+DX', 'ET')
register_prefix('\d+DX', 'HC')

RYOSKATE marked this conversation as resolved.
Show resolved Hide resolved
# 成功判定コマンドのノード
class DX
Expand Down Expand Up @@ -213,6 +216,10 @@ def eval_game_system_specific_command(command)
return dx.execute(@randomizer)
end

RYOSKATE marked this conversation as resolved.
Show resolved Hide resolved
if command == 'HC'
return roll_happening_chart()
end

if command == 'ET'
return roll_emotion_table()
end
Expand Down Expand Up @@ -286,6 +293,18 @@ def roll_emotion_table
return Result.new(output_parts.join(' > '))
end

# ハプニングチャートを振る
#
#
#
# @return [Result]
def roll_happening_chart
result = self.class::HAPPENING_CHART.roll(@randomizer)
name = translate("DoubleCross.HC.name")
output_parts = ["#{name}(#{result.sum})", result.content]
return Result.new(output_parts.join(' > '))
end

RYOSKATE marked this conversation as resolved.
Show resolved Hide resolved
class << self
private

Expand Down Expand Up @@ -356,13 +375,46 @@ def negative_emotion_table(locale)
]
).freeze
end

# @param locale [Symbol]
# @return [RangeTable]
def happening_chart(locale)
DiceTable::RangeTable.new(
I18n.translate("DoubleCross.HC.name", locale: locale),
"1D100",
[
[1..5, I18n.translate("DoubleCross.HC.items.1_5", locale: locale)],
[6..10, I18n.translate("DoubleCross.HC.items.6_10", locale: locale)],
[11..15, I18n.translate("DoubleCross.HC.items.11_15", locale: locale)],
[16..20, I18n.translate("DoubleCross.HC.items.16_20", locale: locale)],
[21..25, I18n.translate("DoubleCross.HC.items.21_25", locale: locale)],
[26..30, I18n.translate("DoubleCross.HC.items.26_30", locale: locale)],
[31..35, I18n.translate("DoubleCross.HC.items.31_35", locale: locale)],
[36..40, I18n.translate("DoubleCross.HC.items.36_40", locale: locale)],
[41..45, I18n.translate("DoubleCross.HC.items.41_45", locale: locale)],
[46..55, I18n.translate("DoubleCross.HC.items.46_55", locale: locale)],
[56..60, I18n.translate("DoubleCross.HC.items.56_60", locale: locale)],
[61..65, I18n.translate("DoubleCross.HC.items.61_65", locale: locale)],
[66..70, I18n.translate("DoubleCross.HC.items.66_70", locale: locale)],
[71..75, I18n.translate("DoubleCross.HC.items.71_75", locale: locale)],
[76..80, I18n.translate("DoubleCross.HC.items.76_80", locale: locale)],
[81..85, I18n.translate("DoubleCross.HC.items.81_85", locale: locale)],
[86..90, I18n.translate("DoubleCross.HC.items.86_90", locale: locale)],
[91..95, I18n.translate("DoubleCross.HC.items.91_95", locale: locale)],
[96..100, I18n.translate("DoubleCross.HC.items.96_100", locale: locale)],
]
)
end
end
RYOSKATE marked this conversation as resolved.
Show resolved Hide resolved

# 感情表(ポジティブ)
POSITIVE_EMOTION_TABLE = positive_emotion_table(:ja_jp).freeze

# 感情表(ネガティブ)
NEGATIVE_EMOTION_TABLE = negative_emotion_table(:ja_jp).freeze

RYOSKATE marked this conversation as resolved.
Show resolved Hide resolved
# ハプニングチャート
HAPPENING_CHART = happening_chart(:ja_jp).freeze
end
end
end
24 changes: 24 additions & 0 deletions test/data/DoubleCross.toml
Original file line number Diff line number Diff line change
Expand Up @@ -1872,6 +1872,30 @@ rands = [
{ sides = 2, value = 1 },
]

[[ test ]]
game_system = "DoubleCross"
input = "HC"
output = "ハプニングチャート(1) > こともなし。修正は特にない。"
rands = [
{ sides = 100, value = 1 }
]

[[ test ]]
game_system = "DoubleCross"
input = "HC"
output = "ハプニングチャート(55) > 膠着した進行。修正は特にない。"
rands = [
{ sides = 100, value = 55 }
]

[[ test ]]
game_system = "DoubleCross"
input = "HC"
output = "ハプニングチャート(100) > 順当な進行。このラウンド中に進行判定に成功したキャラクターは、進行値を+1得る。"
rands = [
{ sides = 100, value = 100 }
]

[[ test ]]
game_system = "DoubleCross"
input = "10dx+5*2@8"
Expand Down