Class: BCDice::GameSystem::NeonUnderRealm

Inherits:
Base
  • Object
show all
Defined in:
lib/bcdice/game_system/NeonUnderRealm.rb

Constant Summary collapse

ID =
"NeonUnderRealm"
NAME =
"光都暗域〈ネオン・アンダーレルム〉"
SORT_KEY =
"ねおんあんたあれるむ"
HELP_MESSAGE =
<<~TEXT
  ・判定(D10の出目が「目標値以下」を成功として数える)
    [M]NU[N][±K][@L][±K']

    M:判定ダイス数(省略不可)。「10+5+3-2」のような加減算を許可
    N:目標値(1~10)。省略時は 5
    K, K':達成値への補正。両方指定された場合はKを採用し、K'は無視される。(省略可)
    L:気合の閾値(0~5)。省略時は 0(気合は常に0扱い)

    ※Nが1~10の範囲外、またはLが0~5の範囲外の場合はコマンドとして処理しません(出力しません)
    ※達成値 = max(0, 素の成功数 + K)
    ※効果値 = ダイス数 - 素の成功数
    ※素の成功数が0なら判定は失敗(達成値が補正で1以上でも失敗扱い)
    ※成功は表示しません。素の成功数0または達成値0のときのみ「失敗」を表示します。

  例)
    4NU
    4NU7+2
    10+5+3-2NU5-1@2
TEXT
DEFAULT_THRESHOLD =
5
MIN_THRESHOLD =
1
MAX_THRESHOLD =
10
DEFAULT_KIAI_THRESHOLD =
0
MIN_KIAI_THRESHOLD =
0
MAX_KIAI_THRESHOLD =
5
DEFAULT_MODIFIER =
0

Instance Attribute Summary

Attributes inherited from Base

#d66_sort_type, #default_cmp_op, #default_target_number, #randomizer, #reroll_dice_reroll_threshold, #round_type, #sides_implicit_d, #upper_dice_reroll_threshold

Instance Method Summary collapse

Methods inherited from Base

#change_text, #check_result, command_pattern, #enable_debug, #enabled_d9?, eval, #eval, #grich_text, #initialize, prefixes_pattern, register_prefix, register_prefix_from_super_class, #sort_add_dice?, #sort_barabara_dice?

Methods included from Translate

#translate

Constructor Details

This class inherits a constructor from BCDice::Base

Instance Method Details

#eval_game_system_specific_command(command) ⇒ Object

[M]NU±[K]@[L]



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/bcdice/game_system/NeonUnderRealm.rb', line 42

def eval_game_system_specific_command(command)
  m_expr, n_str, k_str, l_str = parse_command(command)
  return nil unless m_expr

  dice_count = eval_dice_count(m_expr)
  return nil unless dice_count && dice_count >= 1

  threshold = n_str&.to_i || DEFAULT_THRESHOLD
  return nil unless (MIN_THRESHOLD..MAX_THRESHOLD).cover?(threshold)

  modifier = k_str&.to_i || DEFAULT_MODIFIER

  kiai_threshold = l_str&.to_i || DEFAULT_KIAI_THRESHOLD
  return nil unless (MIN_KIAI_THRESHOLD..MAX_KIAI_THRESHOLD).cover?(kiai_threshold)

  dice_list = @randomizer.roll_barabara(dice_count, 10).sort

  raw_success = dice_list.count { |x| x <= threshold }
  achieved = raw_success + modifier
  achieved = 0 if achieved < 0

  effect = dice_count - raw_success
  kiai = kiai_threshold > 0 ? dice_list.count { |x| x <= kiai_threshold } : 0

  expr_text = build_expr_text(dice_count, threshold,  modifier, kiai_threshold, dice_list)

  result_text_parts = [
    "達成値:#{achieved}(成功数:#{raw_success}",
    "効果値:#{effect}",
    "気合:#{kiai}",
  ]

  # 素成功0なら失敗。または達成値0なら失敗。成功表示は不要。失敗表示はこのケースのみ。
  result_text_parts << "失敗" if raw_success == 0 || achieved == 0

  text = [
    "(#{command.upcase})",
    expr_text,
    result_text_parts.join(" / "),
  ].join("")

  result = Result.new(text)

  # 成功条件:達成値>=1 かつ 素成功>=1
  is_success = (achieved >= 1) && (raw_success >= 1)
  result.success = is_success
  result.failure = !is_success

  result
end