Class: BCDice::GameSystem::Shiranui

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

Defined Under Namespace

Classes: InifiniteD66Step

Constant Summary collapse

ID =

ゲームシステムの識別子

'Shiranui'
NAME =

ゲームシステム名

'不知火'
SORT_KEY =

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

'しらぬい'
HELP_MESSAGE =

ダイスボットの使い方

<<~HELP
  ■∞D66ダイスロール
  「 ∞D66 」または「 ID66 」
  ( ID は Infinite D の略です)

  □行動力や攻撃力の指定
  「 x+∞D66 」または「 x+ID66 」
  ( x は行動力や攻撃力)

  □鬼火の使用について
  鬼火を使用する∞D66は、ダイスボットでサポートしていません。

  ■おみくじを引く
  OMKJ
HELP
INFINITE_D66_ROLL_REG =
/^((\d+)\+)?(∞|I)D66$/i.freeze
TABLES =
{
  "OMKJ" => DiceTable::Table.new(
    "おみくじ",
    "1D6",
    [
      "大凶[御利益1]――このみくじにあたる人は、凶運から逃れることができぬ者なり。まさに凶運にその身をゆだねてこそ、浮かぶ瀬もあれ。……これより上演中に演者が振る[∞D66]で初めて⚀⚀が出たら、御利益を使っても振り直しができない。",
      "凶[御利益2]――このみくじにあたる人は、吉兆を逃す定めにある。まさに、天の与うるを取らざれば反ってその咎めを受く。……これより上演中に演者が振る[∞D66]で初めて⚅⚅が出たら、強制的に1回の振り直しをする。",
      "小吉[御利益3]――このみくじにあたる人は、神使の機嫌を損ねている。神使が何に怒り、何に苛立っているのかは、まさに神のみぞ知る。……神使の機嫌が突然、悪くなる。これより上演中に神使は何かと理由をつけてはシラヌイの前から立ち去ろうとする。",
      "中吉[御利益4]――このみくじにあたる人は、神使の機嫌を良くすることを行った者なり。神使が何に喜び、なぜ機嫌が良いのか、まさに神のみぞ知る。……神使の機嫌がすこぶる良くなる。これより上演中に神使は上機嫌となり、シラヌイに何かにつけて話しかけてくれる。",
      "吉[御利益5]――このみくじにあたる人は、悪運を幸運へと変える道を進む者なり。まさに禍福は糾える縄の如し。……これより上演中に演者が振る[∞D66]で初めて⚀⚀が出たら、御利益を消費することなく、1回の振り直しをする。",
      "大吉[御利益6]――このみくじにあたる人は、思いもよらぬ幸運に巡り合う者なり。まさに、暗き道より出て、気づけば月の光あり。……これより上演中に演者が振る[∞D66]で1回だけ、サイコロの出目を⚅⚅に変えてよい。",
    ]
  ),
}.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

Class Method Summary collapse

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) ⇒ Shiranui

Returns a new instance of Shiranui.



35
36
37
38
39
# File 'lib/bcdice/game_system/Shiranui.rb', line 35

def initialize(command)
  super(command)

  @sort_barabara_dice = true
end

Class Method Details

.make_command_text(fixed_score) ⇒ Object



79
80
81
# File 'lib/bcdice/game_system/Shiranui.rb', line 79

def self.make_command_text(fixed_score)
  fixed_score.nil? ? "∞D66" : "#{fixed_score}+∞D66"
end

.score_expression_text(steps, fixed_score) ⇒ Object



83
84
85
86
87
# File 'lib/bcdice/game_system/Shiranui.rb', line 83

def self.score_expression_text(steps, fixed_score)
  text = steps.map(&:score).join('+')
  text = "#{fixed_score}+(#{text})" unless fixed_score.nil?
  text
end

Instance Method Details

#eval_game_system_specific_command(command) ⇒ Object



41
42
43
44
45
46
47
48
# File 'lib/bcdice/game_system/Shiranui.rb', line 41

def eval_game_system_specific_command(command)
  if (m = INFINITE_D66_ROLL_REG.match(command))
    fixed_score = m[1]&.to_i
    roll_infinite_d66(fixed_score)
  else
    roll_tables(command, TABLES)
  end
end

#roll_infinite_d66(fixed_score) ⇒ Object



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
# File 'lib/bcdice/game_system/Shiranui.rb', line 50

def roll_infinite_d66(fixed_score)
  steps = []

  while steps.empty? || steps.last.to_continue_diceroll?
    # 個別の出目をあつかうので、 roll_d66 ではなく roll_barabara を使う
    dices = @randomizer.roll_barabara(2, 6).sort

    steps << InifiniteD66Step.new(dices)
  end

  is_failure = steps.first.score.zero? # 「しくじり」か?
  total = is_failure ? 0 : steps.sum(&:score) + fixed_score.to_i

  result_text = "(#{self.class.make_command_text(fixed_score)})"
  result_text += "" + steps.map(&:to_s).join('')
  if is_failure
    result_text += " > しくじり"
  else
    result_text += "" + self.class.score_expression_text(steps, fixed_score) if steps.size > 1 || !fixed_score.nil?
    result_text += "" + total.to_s
  end

  Result.new(result_text).tap do |r|
    r.critical = steps.size > 1
    r.failure = is_failure
    r.fumble = is_failure
  end
end