Class: BCDice::GameSystem::Shiranui
- 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
- #eval_game_system_specific_command(command) ⇒ Object
-
#initialize(command) ⇒ Shiranui
constructor
A new instance of Shiranui.
- #roll_infinite_d66(fixed_score) ⇒ Object
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
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.(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 |