Class: BCDice::GameSystem::ZombiLine

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

Constant Summary collapse

ID =

ゲームシステムの識別子

"ZombiLine"
NAME =

ゲームシステム名

"ゾンビライン"
SORT_KEY =

ゲームシステム名の読みがな

"そんひらいん"
HELP_MESSAGE =
<<~TEXT
  ■ 判定 (xZL<=y)
   x:ダイス数(省略時は1)
   y:成功率

  ■ 各種表
   ストレス症状表 SST
   食材表 IT
TEXT
TABLES =
{
  'SST' => DiceTable::Table.new(
    'ストレス症状表',
    '1D10',
    [
      '憤怒:一番近い敵を攻撃(成功率+20%)しにいきます。近くに敵がいない場合、誰かのストレスを+1させます。 頭に血が上り、誰かに怒りをぶつけます。',
      '逃避:落下してでも敵から逃げるように移動します。周囲に敵が居ない場合、現実逃避します。 耐えられなくなり、逃げ出します。',
      '幻覚:戦闘中は、「行動放棄(全AP)」します。戦闘以外なら、幻覚を見て笑います。 自分が望む幻覚が見えます。',
      '絶叫:戦闘中は、「注目を集める(2AP)」をします。戦闘以外なら、無意味に叫びます。 思わず叫んでしまいます。',
      '自傷:自ら【怪我】を負います。戦闘中は「自傷行為(1AP)」をして自分が【怪我】します。 思わず自分を傷つけます。',
      '不安:誰かのストレスを1上げます。近くに誰も居ない場合、泣き出します。 不安にかられて余計なことを言います。',
      '忌避:その場から一番近い対象に「石(1AP)」を投げます。それができない場合、【転倒】してうずくまります。 嫌悪感から全てを拒みます。',
      '暴走:一番近い敵を攻撃しにいきます。近くに敵がいない場合、周りの意見も聞かずに安直な行動をします。 冷静でいられなくなり、直情的になります。',
      '混乱:近くにいるランダムな対象に格闘で攻撃しにいきます。それができない場合、「行動放棄(全 AP)」します。 世界全てが敵に見えて攻撃します。',
      '開眼:ストレスは0まで下がります。あなたは教祖となって教義をひとつつくって「布教」できます。次の症状が出るまで効果は続きます。 ゾンビだらけの世界の真理を見つけます。',
    ]
  ),
  'IT' => DiceTable::RangeTable.new(
    '食材表',
    '1d100',
    [
      [1..50, '生モノ食材'],
      [51..80, '怪しい食材'],
      [81..100, '危ない食材']
    ]
  )
}.freeze

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, prefixes_pattern, register_prefix, register_prefix_from_super_class, #sort_add_dice?, #sort_barabara_dice?

Methods included from Translate

#translate

Constructor Details

#initialize(command) ⇒ ZombiLine

Returns a new instance of ZombiLine.



25
26
27
28
# File 'lib/bcdice/game_system/ZombiLine.rb', line 25

def initialize(command)
  super(command)
  @sides_implicit_d = 10
end

Instance Method Details

#check_action(command) ⇒ Object



34
35
36
37
38
39
40
41
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
# File 'lib/bcdice/game_system/ZombiLine.rb', line 34

def check_action(command)
  parser = Command::Parser.new("ZL", round_type: @round_type)
                          .enable_prefix_number
                          .disable_modifier
                          .restrict_cmp_op_to(:<=)
  parsed = parser.parse(command)
  unless parsed
    return nil
  end

  dice_count = parsed.prefix_number || 1
  target_num = parsed.target_number

  debug(dice_count)

  dice_list = @randomizer.roll_barabara(dice_count, 100).sort
  is_success = dice_list.any? { |i| i <= target_num }
  is_critical = dice_list.any? { |i| i <= 5 }
  is_fumble = dice_list.any? { |i| i >= 96 && i > target_num }
  if is_critical && is_fumble
    is_critical = false
    is_fumble = false
  end

  success_message =
    if is_success && is_critical
      "成功(クリティカル)"
    elsif is_success && is_fumble
      "成功(ファンブル)"
    elsif is_success
      "成功"
    elsif is_fumble
      "失敗(ファンブル)"
    else
      "失敗"
    end
  sequence = [
    "(#{parsed})",
    "[#{dice_list.join(',')}]",
    success_message
  ]

  Result.new.tap do |r|
    r.text = sequence.join("")
    r.condition = is_success
    r.critical = is_critical
    r.fumble = is_fumble
  end
end

#eval_game_system_specific_command(command) ⇒ Object



30
31
32
# File 'lib/bcdice/game_system/ZombiLine.rb', line 30

def eval_game_system_specific_command(command)
  return check_action(command) || roll_tables(command, TABLES)
end