lib/bcdice/game_system/ScreamHighSchool.rb
# frozen_string_literal: true
require 'bcdice/game_system/GardenOrder'
module BCDice
module GameSystem
class ScreamHighSchool < GardenOrder
# ゲームシステムの識別子
ID = 'ScreamHighSchool'
# ゲームシステム名
NAME = 'スクリームハイスクール'
# ゲームシステム名の読みがな
SORT_KEY = 'すくりいむはいすくうる'
# ダイスボットの使い方
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
・基本判定
SHx/y@z x:成功率、y:連続攻撃回数(省略可)、z:クリティカル値(省略可)
(連続攻撃では1回の判定のみが実施されます)
例)SH55 SH(40-20) SH100/2 SH70@10 SH155/3@44
・感情判定
EMx@z x:成功率、z:クリティカル値(省略可)
例)EM50 EM50@15
・性格傾向判定
TRx@z x:成功率、z:クリティカル値(省略可)
例)TR60 TR60@15
・恐怖判定
FEx@z x:成功率、z:クリティカル値(省略可)
例)FE70 FE70@15
・負傷表
DCxxy
xx:属性(切断:SL,銃弾:BL,衝撃:IM,灼熱:BR,冷却:RF,電撃:EL)
y:ダメージ
例)DCSL7 DCEL22
INFO_MESSAGE_TEXT
register_prefix(
'(SH|SHS)',
'(EM|TR|FE)',
'DC(SL|BL|IM|BR|RF|EL).+'
)
def eval_game_system_specific_command(command)
case command
when /(EM|TR|FE)(-?\d+)(@(\d+))?/i
command_type = Regexp.last_match(1).upcase
success_rate = Regexp.last_match(2).to_i
critical_border_text = Regexp.last_match(4)
critical_border = get_critical_border(critical_border_text, success_rate)
return check_roll_sh(success_rate, critical_border, command_type)
when %r{(SH|SHS)(-?\d+)(/(\d+))?(@(\d+))?}i
success_rate = Regexp.last_match(2).to_i
repeat_count = (Regexp.last_match(4) || 1).to_i
critical_border_text = Regexp.last_match(6)
critical_border = get_critical_border(critical_border_text, success_rate)
return check_roll_repeat_attack(success_rate, repeat_count, critical_border)
when /^DC(SL|BL|IM|BR|RF|EL)(\d+)/i
type = Regexp.last_match(1)
damage_value = Regexp.last_match(2).to_i
return look_up_damage_chart(type, damage_value)
end
return nil
end
def check_roll_sh(success_rate, critical_border, command_type)
success_rate = 0 if success_rate < 0
fumble_border = (success_rate < 100 ? 96 : 99)
dice_value = @randomizer.roll_once(100)
result = get_check_result(dice_value, success_rate, critical_border, fumble_border)
title, supplementary = get_supplementary(command_type, result.text)
unless supplementary.empty?
supplementary = "(#{supplementary})"
end
result.text = "#{title}判定 D100<=#{success_rate}@#{critical_border} > #{dice_value} > #{result.text}#{supplementary}"
return result
end
def get_supplementary(command_type, result)
title = ''
supplementary = ''
case command_type
when 'EM'
title = '感情'
case result
when 'クリティカル'
supplementary = '次に行う判定の成功率に+50%'
when '成功'
supplementary = '次に行う判定の成功率に+30%'
when '失敗'
supplementary = '次に行う判定の成功率に-20%、呪縛+1点'
when 'ファンブル'
supplementary = '次に行う判定の成功率に-50%、呪縛+1D5点'
end
when 'TR'
title = '性格傾向'
case result
when '失敗'
supplementary = '反対側の性格傾向で再判定する。あるいは、もしこれがその再判定の結果であればプレイヤーが性格傾向を選択する'
when 'ファンブル'
supplementary = '反対側の性格傾向に従い、呪縛+1D5点する。あるいは、もしこれが失敗後の再判定の結果だった場合、PCは混乱し行動を放棄するか逃げ出す。呪縛+2点'
else
supplementary = '判定した性格傾向に従う'
end
when 'FE'
title = '恐怖'
case result
when '成功'
supplementary = 'ショックを受け流した。恐怖判定効果表の成功側の値分、呪縛が上昇する'
when '失敗'
supplementary = 'ショックを受けた。恐怖判定効果表の失敗側の値分、呪縛が上昇する'
when 'ファンブル'
supplementary = '深いショックを受けた。恐怖判定効果表の失敗側の値分に加え、さらに1D5点分、呪縛が上昇する'
else
supplementary = '何もショックを受けなかった'
end
end
return title, supplementary
end
end
end
end