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

[Arknights Fan TRPG] アップデート #700

Closed
wants to merge 44 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
b4855b8
first_commit
Jan 1, 2024
f2d7196
2nd commit
Jan 2, 2024
4ee09a7
3rd commit
Jan 2, 2024
e0b958c
Refined.
Ayase00 Jan 2, 2024
58af5ca
4th commit
Ayase00 Jan 2, 2024
e14fe52
4.2 commits
Ayase00 Jan 2, 2024
0c0a0e0
[ArknightsTRPG] Add example comments on command persers.
NOBUTOKA Jan 2, 2024
598ee92
[ArknightsTRPG]
Ayase00 Jan 2, 2024
8b7a9aa
[ArknightsTRPG]
Ayase00 Jan 2, 2024
85e84bf
[ArknightsTRPG]
Ayase00 Jan 2, 2024
79d8929
[ArknightsTRPG]
Ayase00 Jan 2, 2024
a1beada
[ArknightsTRPG]
Ayase00 Jan 3, 2024
ea1824c
[ArknightsTRPG]
Ayase00 Jan 3, 2024
dbc866a
[ArknightsTRPG] > Add testcaces for (\d*) patterns.
NOBUTOKA Jan 3, 2024
29a7f12
[ArknightsTPRG]
Ayase00 Jan 3, 2024
938015e
[ArknightsFan] SORT_KEY を修正
ysakasin Jan 22, 2024
b2098be
[ArknightsFan] コマンドのパース位置を変更
ysakasin Jan 23, 2024
812b4de
[ArknightsFan] refactor
ysakasin Jan 23, 2024
8a8dfb2
[ArknightsFan] refactor
ysakasin Jan 24, 2024
0354b48
NightWizard3rd: Fix help message
opparco Jan 6, 2024
e118f29
『フルフェイス』に対応(#668)
Faceless192x Jan 22, 2024
bb3d81d
『アニマラス』を追加 (#669)
Faceless192x Jan 22, 2024
cc1c5ce
[VampireTheMasquerade5th] ダイスプールよりHungerダイスが大きい時に全てがHungerダイスになるように変更
Jan 23, 2024
44fbfa3
[WerewolfTheApocalypse5th] ダイスプールよりRageダイスが大きい時に全てがRageダ イスになるように変更
Jan 23, 2024
c75c12e
Support Ruby 3.3
ysakasin Dec 27, 2023
f8375fb
Drop Ruby 2.6 support
ysakasin Dec 27, 2023
8961b01
Update rubocop
ysakasin Dec 27, 2023
0e69715
Update development dependencies
ysakasin Dec 27, 2023
eb57788
Cop
ysakasin Jan 24, 2024
3420265
「パストフューチャーパラドックス」を追加 (#673)
hikoyamamayo Jan 29, 2024
6d52bab
[Chil3] 出力を英語版に合わせる (#672)
Faceless192x Jan 29, 2024
70ac66a
虚構侵蝕TRPG に対応
ysakasin Jan 29, 2024
85c9e00
nRR を追加
ysakasin Jan 22, 2024
e513630
[InfiniteFantasia] 成功レベル判定の方法を記載
ysakasin Feb 8, 2024
3c748b5
Release BCDice 3.13.0
ysakasin Feb 8, 2024
6ba8770
Merge tag 'v3.13.0' into develop
NOBUTOKA Feb 17, 2024
f83fe27
HELP_MESSAGEの更新
NOBUTOKA Feb 17, 2024
2439a43
Defined func check_roll(), enum-like module Status
Ayase00 Apr 28, 2024
ed95f8f
Enable "Type"1 (e.g. Sniper1) in roll_ab.
Ayase00 Apr 28, 2024
11ad14e
Add test caces for last 2 commits.
Ayase00 Apr 28, 2024
4f843b2
Merge remote-tracking branch 'upstream/master'
Ayase00 May 6, 2024
e1d9778
Merge branch 'develop'
Ayase00 May 6, 2024
28979e2
Rubocopped.
NOBUTOKA May 6, 2024
18e744b
Fix HELP_MESSAGE for 2439a43
NOBUTOKA May 6, 2024
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
131 changes: 88 additions & 43 deletions lib/bcdice/game_system/ArknightsFan.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,25 +13,38 @@ class ArknightsFan < Base
SORT_KEY = "ああくないつTRPGはいたふと"

HELP_MESSAGE = <<~TEXT
判定 (nADm>=x)
nDmのダイスロールをして、x 以下であれば成功。
出目が91以上でエラー。
出目が10以下でクリティカル。
能力値判定 (nADm<=x)
nDmのダイスロールをして、出目が x 以下であれば成功。
失敗のうち、出目が91以上でエラー。
成功のうち、出目が10以下でクリティカル。

判定 (nABm>=x)
攻撃/防御判定 (nABm<=x)
nBmのダイスロールをして、
x 以下であれば成功数+1。
出目が91以上でエラー。成功数+1。
出目が10以下でクリティカル。成功数-1。
出目が x 以下であれば成功数+1。
出目が x より上かつ91以上でエラー。成功数-1。
出目が x 以下かつ10以下でクリティカル。成功数さらに+1。
上記による成功数をカウント。

判定 (nABm>=x--役職)
役職効果付き攻撃判定 (nABm<=x--役職名)
nBmのダイスロールをして、
出目が x 以下であれば成功数+1。
出目が91以上でエラー。成功数+1。
出目が10以下でクリティカル。成功数-1。
上記による成功数をカウントした上で、以下の役職による成功数増加効果を適応。
狙撃(SNIPER) 成功数1以上のとき、成功数+1。
出目が x より上かつ91以上でエラー。成功数-1。
出目が x 以下かつ10以下でクリティカル。成功数さらに+1。
上記による成功数をカウントした上で、以下の役職名による成功数増加効果を適応。
狙撃(SNIPER): 成功数1以上のとき、成功数+1。

■ 増悪判定(--WORSENING)
症状を「末梢神経障害」「内臓機能不全」「精神症状」からランダムに選択。
継続ラウンド数を1d6+1で判定。

■ 中毒判定(--ADDICTION)
症状を「中枢神経障害」「多臓器不全」「急性ストレス反応」からランダムに選択。

■ 判定の省略表記
nADm、nABm、nABmにおいて、
n(ダイス個数)を省略した場合、1として扱われる。
m(ダイス種類)を省略した場合、100として扱われる。
例えば、AD<=90は1AD100<=90として解釈される。
TEXT

register_prefix('\d*AD\d*', '\d*AB\d*', '--ADDICTION', '--WORSENING')
Expand All @@ -42,6 +55,51 @@ def eval_game_system_specific_command(command)

private

module Status
CRITICAL = 1
SUCCESS = 2
FAILURE = 3
ERROR = 4
end

STATUS_NAME = {
Status::CRITICAL => 'クリティカル!',
Status::SUCCESS => '成功',
Status::FAILURE => '失敗',
Status::ERROR => 'エラー'
}.freeze

# クリティカル、エラー、成功失敗周りの閾値や優先関係が複雑かつルールが変動する可能性があるため、明示的にルール管理するための関数。
def check_roll(roll_result, target)
success = roll_result <= target

crierror =
if roll_result <= 10
"Critical"
elsif roll_result >= 91
"Error"
else
"Neutral"
end

result =
if success && (crierror == "Critical")
Status::CRITICAL
elsif success && (crierror == "Neutral")
Status::SUCCESS
elsif success && (crierror == "Error")
Status::SUCCESS
elsif !success && (crierror == "Critical")
Status::FAILURE
elsif !success && (crierror == "Neutral")
Status::FAILURE
elsif !success && (crierror == "Error")
Status::ERROR
end

return result
end

def roll_ad(command)
m = /^(\d*)AD(\d*)<=(\d+)$/.match(command)
return nil unless m
Expand All @@ -55,18 +113,19 @@ def roll_ad(command)
end

def roll_ab(command)
m = /^(\d*)AB(\d*)<=(\d+)(?:--([^\d\s]+)(0)?)?$/.match(command)
m = /^(\d*)AB(\d*)<=(\d+)(?:--([^\d\s]+)(0|1)?)?$/.match(command)
return nil unless m

times = m[1]
sides = m[2]
target = m[3].to_i
type = m[4]
suffix = m[5]
type_enable = m[5]
times = !times.empty? ? times.to_i : 1
sides = !sides.empty? ? sides.to_i : 100
type_enable = !type_enable.nil? ? type_enable.to_i : 1

if suffix || type.nil?
if type.nil? || (type_enable == 0)
roll_b(command, times, sides, target)
else
roll_b_withtype(command, times, sides, target, type)
Expand All @@ -76,31 +135,9 @@ def roll_ab(command)
def roll_d(command, times, sides, target)
dice_list = @randomizer.roll_barabara(times, sides).sort
total = dice_list.sum
success = total <= target

crierror =
if total <= 10
"Critical"
elsif total >= 91
"Error"
else
"Neutral"
end

result =
if success && (crierror == "Critical")
"クリティカル!"
elsif success && (crierror == "Neutral")
"成功"
elsif success && (crierror == "Error")
"成功"
elsif !success && (crierror == "Critical")
"失敗"
elsif !success && (crierror == "Neutral")
"失敗"
elsif !success && (crierror == "Error")
"エラー"
end
result = check_roll(total, target)
result = STATUS_NAME[result]

if times == 1
return "(#{command}) > #{dice_list.join(',')} > #{result}"
Expand Down Expand Up @@ -139,9 +176,17 @@ def process_b(times, sides, target)
error_count = 0

dice_list.each do |value|
success_count += 1 if value <= target
critical_count += 1 if value <= 10
error_count += 1 if value >= 91
case check_roll(value, target)
when Status::CRITICAL
critical_count += 1
success_count += 1
when Status::SUCCESS
success_count += 1
when Status::FAILURE
# Nothing to do
when Status::ERROR
error_count += 1
end
end

return [dice_list, success_count, critical_count, error_count]
Expand Down
68 changes: 68 additions & 0 deletions test/data/ArknightsFan.toml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,14 @@ rands = [
{ sides = 100, value = 95 },
]

[[ test ]]
game_system = "ArknightsFan"
input = "AD<=5"
output = "(AD<=5) > 9 > 失敗"
rands = [
{ sides = 100, value = 9 },
]

[[ test ]]
game_system = "ArknightsFan"
input = "AB<=70"
Expand Down Expand Up @@ -146,6 +154,36 @@ rands = [
{ sides = 100, value = 10 },
]

[[ test ]]
game_system = "ArknightsFan"
input = "3AB100<=5"
output = "(3AB100<=5) > [9,10,11] > 0+0C-0E > 成功数0"
rands = [
{ sides = 100, value = 9 },
{ sides = 100, value = 10 },
{ sides = 100, value = 11 },
]

[[ test ]]
game_system = "ArknightsFan"
input = "3AB100<=5"
output = "(3AB100<=5) > [5,10,11] > 1+1C-0E > 成功数2"
rands = [
{ sides = 100, value = 5 },
{ sides = 100, value = 10 },
{ sides = 100, value = 11 },
]

[[ test ]]
game_system = "ArknightsFan"
input = "3AB100<=95"
output = "(3AB100<=95) > [90,95,96] > 2+0C-1E > 成功数1"
rands = [
{ sides = 100, value = 90 },
{ sides = 100, value = 95 },
{ sides = 100, value = 96 },
]

[[ test ]]
game_system = "ArknightsFan"
input = "4AB100<=60"
Expand Down Expand Up @@ -360,6 +398,16 @@ rands = [
{ sides = 100, value = 50 },
]

[[ test ]]
game_system = "ArknightsFan"
input = "3AB100<=70--Sniper1"
output = "(3AB100<=70--SNIPER1) > [50,50,90] > 2+0C-0E+1(SNIPER) > 成功数3"
rands = [
{ sides = 100, value = 90 },
{ sides = 100, value = 50 },
{ sides = 100, value = 50 },
]

[[ test ]]
game_system = "ArknightsFan"
input = "3AB100<=70--先鋒"
Expand All @@ -370,6 +418,26 @@ rands = [
{ sides = 100, value = 50 },
]

[[ test ]]
game_system = "ArknightsFan"
input = "3AB100<=70--先鋒1"
output = "(3AB100<=70--先鋒1) > [50,50,90] > 2+0C-0E+0(先鋒) > 成功数2"
rands = [
{ sides = 100, value = 90 },
{ sides = 100, value = 50 },
{ sides = 100, value = 50 },
]

[[ test ]]
game_system = "ArknightsFan"
input = "3AB100<=70--先鋒0"
output = "(3AB100<=70--先鋒0) > [50,50,90] > 2+0C-0E > 成功数2"
rands = [
{ sides = 100, value = 90 },
{ sides = 100, value = 50 },
{ sides = 100, value = 50 },
]

[[ test ]]
game_system = "ArknightsFan"
input = "--WORSENING"
Expand Down
Loading