Class: BCDice::GameSystem::Ayabito

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

Constant Summary collapse

ID =

ゲームシステムの識別子

"Ayabito"
NAME =

ゲームシステム名

"あやびと"
SORT_KEY =

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

"あやひと"
HELP_MESSAGE =
<<~TEXT
  ・判定コマンド(xAB±y@c$d>=z)
    x:サイコロの数(10以上の場合9個振り、それ以降を成功数2として加算する)
    ±y:成功数への補正(省略可)
    c:クリティカル値(@ごと省略可。省略時は6)
    d:出目を2として数える数の最小値($ごと省略可。省略時は6)
    z:目標値(妨害値など。>=ごと省略可)
    (例) 4AB
         11AB>=5
         5AB+1
         6AB@5>=3

  ・各種表
    感情表 ET
    帝都東京シーン表 TST / 場面演出シーン表 BST
    交流表 CET
    ファンブル表 FT
    封印期間表 LT

    帝都東京エリア選択 TET
     浅草シーン表 AST
     上野シーン表 UST
     日本橋シーン表 NST
     銀座シーン表 GST
     霞ヶ関シーン表 KST
     新宿シーン表 SST
TEXT
TABLES =
{
  'ET' => DiceTable::D66Table.new(
    '感情表',
    D66SortType::NO_SORT,
    {
      11 => '信頼/不信感',
      12 => '好奇心/無関心',
      13 => '優越感/劣等感',
      14 => '好意/敵意',
      15 => '安心感/不安感',
      16 => '愛情/偏愛',
      21 => '同情/憐憫',
      22 => '親近感/疎外感',
      23 => '連帯感/隔意',
      24 => '尽力/面倒',
      25 => '貸し/借り',
      26 => '庇護欲/食傷',
      31 => '期待/反発',
      32 => '熱狂/心酔',
      33 => '幸福感/不快感',
      34 => '尊敬/軽蔑',
      35 => '憧憬/嫉妬',
      36 => '忠誠/服従',
      41 => '友情/侮蔑',
      42 => '競争心/警戒',
      43 => '感謝/後悔',
      44 => '感服/恐怖',
      45 => '興味/屈辱',
      46 => '誠意/憎悪',
      51 => '羨望/嫌悪',
      52 => '共感/懸念',
      53 => '傾倒/厭気',
      54 => '赦し/怒り',
      55 => '有為/苦手',
      56 => '恩義/不満',
      61 => '予感/困惑',
      62 => '懐旧/忘却',
      63 => '慕情/執着',
      64 => '夢中/退屈',
      65 => '贖罪/罪悪感',
      66 => '慈愛/殺意',
    }
  ),
  'TST' => DiceTable::D66LeftRangeTable.new(
    '帝都東京シーン表',
    D66SortType::NO_SORT,
    [
      [1..1, Array.new(6, "子~巳までの任意の十二支を選択する。")],
      [2..3, [
        "[子]帝国大学の赤門、学生たちが今日も勉学に励んでいる。",
        "[丑]吉原の歓楽街。昼間は静かだが、夜は活気を見せてくれる。",
        "[寅]上野公園。桜に新緑、紅葉など、季節の顔を見せてくれる。",
        "[卯]浅草六区は今日も賑やか。浅草寺や仲見世には、多くの人々が行き交う。",
        "[辰]凌雲閣。浅草十二階として親しまれる塔に昇り、周囲を一望する。",
        "[巳]丸の内の東京駅。構内の喧騒とは裏腹に、霞ヶ関は静かに時が流れる。",
      ]],
      [4..5, [
        "[午]銀座をぶらぶらと歩く。百貨店が立ち並ぶこの街では、何でも買うことができるらしい。",
        "[未]日比谷の帝国劇場。演目は、話題のトップスタアによる華やかなる歌劇のようだ。",
        "[申]皇居のほとり。水面にうかぶ蓮の葉が、しずかに揺れている。",
        "[酉]明治神宮の境内。神聖なる雰囲気を味わうことができる。",
        "[戌]新たな東京の名所である新宿。今では東西を二分する街である。",
        "[亥]日本帝国軍駐屯地。妖怪人間共同実働部隊の本部も敷地内にある。",
      ]],
      [6..6, Array.new(6, "午~亥まで任意の十二支を選択する。")],
    ]
  ),
  'BST' => DiceTable::D66LeftRangeTable.new(
    '場面演出シーン表',
    D66SortType::NO_SORT,
    [
      [1..1, Array.new(6, "子~巳までの任意の十二支を選択する。")],
      [2..3, [
        "[子]人々が寝静まる帝都の夜。月に雲がかかるとともに、魔の香りが漂っている。",
        "[丑]草木も眠る静けさの中、犬の遠吠えだけが聞こえてくる。",
        "[寅]一陣の風が吹き抜ける。風に乗った匂いが、妙に鼻をくすぐってきた。",
        "[卯]霧や朝もやに包まれる。向こうに見える姿は誰だろうか……",
        "[辰]帝都に朝日が射す。人々は起き出し、日々の営みを始める。",
        "[巳]清廉な雰囲気の風景。鳥や虫の声、風にそよぐ木々の音が聞こえてくる。",
      ]],
      [4..5, [
        "[午]時計の針がある時間を指し示す。刻を告げるチャイムや鐘が響き渡る。",
        "[未]昼間の大通り。自動車や路面電車が走り、行き交う人々の雑踏が至るところで見られる。",
        "[申]夕刻、どこからともなく、定かではない声や物音が漏れてくる。",
        "[酉]瓦斯灯(がすとう)が通りを鮮やかに照らす。夜が街のもうひとつの顔を出し始める。",
        "[戌]星空の下、月明かりが微かに夜道を照らしている。",
        "[亥]光ひとつない暗闇の中。何者かの気配が蠢いている……",
      ]],
      [6..6, Array.new(6, "午~亥まで任意の十二支を選択する。")],
    ]
  ),
  'CET' => DiceTable::D66LeftRangeTable.new(
    '交流表',
    D66SortType::NO_SORT,
    [
      [1..1, Array.new(6, "感情~性格までの任意のテーマを選択する。")],
      [2..3, [
        "[感情]相手に抱いている感情、伝えるべきか伝えないべきか。",
        "[人間]相手に人間という存在をどう思うか、聞いてみるとしよう。",
        "[友達]相手に友人や仲間について語ろう。話すことで分かる想いもあるだろう。",
        "[告白]相手に話していいか分からないが、自分の秘めたる想いを語ろう。",
        "[思い出]相手に、過去の思い出を話してみよう。相手から昔話をきけるかもしれない。",
        "[性格]相手に自身の性格を語ろう。表向きのみ話すか、奥底まで話してしまうかは、事と次第による。",
      ]],
      [4..5, [
        "[関係性]相手とは、いつからこうした関係だったのか。相手と関係性について話そう。",
        "[妖怪]相手に妖怪という存在をどう思うか、聞いてみるとしよう。",
        "[あやびと]相手に、自分があやびとである意味や意義を語ってみよう。",
        "[想い]相手が今、何かしら想う人や物事について聞いてみよう。",
        "[夢]相手に自分の夢を語ろう。未来の夢、かつて捨てた夢かもしれない。",
        "[半生]相手に自身の半生を語ろう。半生こそが、今の自分となるきっかけなのだから……",
      ]],
      [6..6, Array.new(6, "関係性~半生までの任意のテーマを選択する。")],
    ]
  ),
  'FT' => DiceTable::Table.new(
    'ファンブル表',
    '1D6',
    [
      'PCの【耐久値】を-5する(最低1)。',
      'PCの【活力値】を-5する(最低1)',
      'PCは戦闘ないしフェイズが終了するまで《アビリティ》を使用できない。',
      'PCは戦闘ないしフェイズが終了するまで[絆]を使用できない。',
      'セッション終了時まで、登場するエネミーすべての【耐久値】を+3する',
      'セッション終了時まで、登場するエネミーすべてのダメージを+2する。',
    ]
  ),
  'LT' => DiceTable::Table.new(
    '封印期間表',
    '1D6',
    [
      # '1日',
      '1週間',
      '1ヶ月',
      '1年',
      '10年',
      '50年',
      '100年',
      # '500年',
    ]
  ),
  'TET' => DiceTable::Table.new(
    '帝都東京エリア選択',
    '1D6',
    [
      '浅草。庶民の盛り場として賑わう商店街と下町。',
      '上野。あらゆる路線の中心である帝都の玄関口。',
      '日本橋。江戸時代から変わらぬ商業の中心地。',
      '銀座。赤煉瓦が立ち並ぶ、帝都一モダンな繁華街。',
      '霞ヶ関。国会議事堂や裁判所がある官庁街。',
      '新宿。関東大震災以降、急速に発展した新しい街。',
    ]
  ),
  'AST' => DiceTable::D66LeftRangeTable.new(
    '浅草シーン表',
    D66SortType::NO_SORT,
    [
      [1..1, Array.new(6, "子~巳までの任意の十二支を選択する。")],
      [2..3, [
        "[子]浅草寺。浅草の顔ともいえる寺。7世紀に建造された都内でも最古の寺。",
        "[丑]武神一刀流道場。浅草でも有名な剣術道場。柔術や薙刀など、剣以外の実践的な技も教えている。",
        "[寅]待乳の渡し。隅田川を橋で渡る代わりに、乗せて渡ってくれる小舟。",
        "[卯]帝都観光案内館。帝都東京内観光の案内所。ガイドつきのバス観光も行っている。",
        "[辰]神谷バー。老舗の飲食店であり、電気ブランを提供していることで有名。",
        "[巳]雷門。浅草寺の南側に建てられた門で、風神と雷神の像が安置されている。",
      ]],
      [4..5, [
        "[午]仲見世。雷門から浅草寺本堂に続く仁王門まで立ち並ぶ商店街。",
        "[未]仰天堂。やたらと大盛りの食事を提供してくれる人気店。",
        "[申]混沌興行。妖怪たちが演じることで有名な見世物小屋。いつも混み合っている。",
        "[酉]浅草六区。浅草の中心街であり、店舗や演芸場、活動写真館が並んでいる。",
        "[戌]凌雲閣。浅草十二階とも呼ばれる塔。関東大震災でも崩れることなく、そびえ立っている。",
        "[亥]花屋敷。日本最初の遊園地であり、園内には動物園も完備している。",
      ]],
      [6..6, Array.new(6, "午~亥まで任意の十二支を選択する。")],
    ]
  ),
  'UST' => DiceTable::D66LeftRangeTable.new(
    '上野シーン表',
    D66SortType::NO_SORT,
    [
      [1..1, Array.new(6, "子~巳までの任意の十二支を選択する。")],
      [2..3, [
        "[子]上野恩賜公園。桜の名所でもある巨大な公園。敷地内では、四季折々の自然を楽しむことができる。",
        "[丑]東京帝室博物館。宮内省所管の博物館であり、珍しい品々が展示されている。",
        "[寅]上野駅。帝都と地方の路線を繋ぐ駅。地方から上京してくる人々を多く見かける。",
        "[卯]精養軒。本格的な洋食が楽しめる老舗のレストラン。人間、妖怪に限らず上流階級が通っている。",
        "[辰]御徒町。高架下と周辺に所狭しと民家や長屋、様々な店がひしめきあう下町の歓楽街。",
        "[巳]一鉄工場。偏屈で頑固だが有能な老人が経営する工場。自作のラジオが置かれている。",
      ]],
      [4..5, [
        "[午]帝国大学。象徴の赤門が有名な、日本の最高学府。校内には、妖怪研究室がある。",
        "[未]鳳明館。明治創業の旅館。文士が執筆する際に、よく利用している。",
        "[申]黄龍門学園。帝国大学敷地の横にある私立学園。妖怪や半妖も多く通っている。",
        "[酉]不忍池。弁天堂と大黒天堂を構える池で、河童が隠れ住んでいる。",
        "[戌]きさらぎ長屋。行く宛のない者や、行き場をなくした者が集まる長屋。",
        "[亥]上野恩賜公園動物園。ホッキョクグマ舎やサル山をはじめ、珍しい動物が飼われている。",
      ]],
      [6..6, Array.new(6, "午~亥まで任意の十二支を選択する。")],
    ]
  ),
  'NST' => DiceTable::D66LeftRangeTable.new(
    '日本橋シーン表',
    D66SortType::NO_SORT,
    [
      [1..1, Array.new(6, "子~巳までの任意の十二支を選択する。")],
      [2..3, [
        "[子]日本銀行本店。西洋建築の先駆けといえる建築物。帝都事変では大きな被害が出た。",
        "[丑]三越。日本橋に居を構える有数の大型百貨店。この店で揃わぬ物はないとされている。",
        "[寅]日本橋。五つ街道の起点であり、東海道五十三次の出発点としてよく知られる橋。",
        "[卯]メイゾン妖の巣。妖怪や半妖の文学者たちが集うカフェー。",
        "[辰]大正座。明治座の兄弟とよばれる演芸場。歌舞伎や芝居などが上演されている。",
        "[巳]多々良堂。江戸時代より続く退魔具の専門店。多くのあやびとが訪れる。",
      ]],
      [4..5, [
        "[午]妖艶大世界。上海にある上海大世界を真似て、妖怪や半妖が集まってできた新興の花街。",
        "[未]二丁巴里。丸ノ内の一丁倫敦に対して創られた大規模な問屋街。",
        "[申]皇居外苑。桔梗門の前は大広場があり、皇居を訪れる者が集まっている。",
        "[酉]東京駅。皇居に対面する形で作られた煉瓦造りの壮麗な駅。",
        "[戌]丸ノ内ビルヂング。大正12年に竣工した東洋一ともいわれる巨大なビルヂング。",
        "[亥]将門塚。平将門公の御首が祀られる塚。大手町にひっそりと存在している。",
      ]],
      [6..6, Array.new(6, "午~亥まで任意の十二支を選択する。")],
    ]
  ),
  'GST' => DiceTable::D66LeftRangeTable.new(
    '銀座シーン表',
    D66SortType::NO_SORT,
    [
      [1..1, Array.new(6, "子~巳までの任意の十二支を選択する。")],
      [2..3, [
        "[子]ダンスホウル・ガアデン。モダンボーイやモダンガール御用達の帝都東京有数のダンスホウル。",
        "[丑]服部時計店。銀座のシンボルとなっている時計塔と、併設された店舗。",
        "[寅]松屋。大正14年に開店した百貨店。地上7階までの吹き抜けステンドグラスで知られる。",
        "[卯]歌舞伎座。歌舞伎の殿堂。古式ゆかしい意匠を取り入れた最新建築の劇場。",
        "[辰]倫敦橋。文士や芸術家が好んで訪れる2階建ての洋式建築のカフェー。",
        "[巳]資生堂パーラー。ソーダ水やアイスクリンを提供したことで有名な喫茶店。",
      ]],
      [4..5, [
        "[午]カフェープランタン。日本初のカフェーといわれる老舗。富裕層やインテリ層が多く訪れる。",
        "[未]新橋絢爛花街。関東大震災をきっかけに再建された花街。政府高官なども利用している。",
        "[申]鹿鳴館。明治時代を代表する西洋建築。華族や資産家が利用できる施設となっている。",
        "[酉]帝国ホテル。フランク・ロイド・ライトが設計した最新鋭の技術が詰め込まれたホテル。",
        "[戌]妖務省本部。妖務省と妖怪人間共同実働部隊の本部が置かれている。",
        "[亥]帝国劇場。明治時代を代表する日本最大の大劇場で\"帝劇\"の愛称で知られている。",
      ]],
      [6..6, Array.new(6, "午~亥まで任意の十二支を選択する。")],
    ]
  ),
  'KST' => DiceTable::D66LeftRangeTable.new(
    '霞ヶ関シーン表',
    D66SortType::NO_SORT,
    [
      [1..1, Array.new(6, "子~巳までの任意の十二支を選択する。")],
      [2..3, [
        "[子]桜田門。内堀にある門のひとつで皇居に通じている。",
        "[丑]警視庁庁舎。警視庁の総合本部。庁舎内に妖鬼対策本部がある。",
        "[寅]日比谷公園。市民の憩いの場所であり、図書館や音楽堂をそなえる大規模な公園。",
        "[卯]大審院庁舎。司法裁判所の中における最上級審の裁判所。",
        "[辰]私立聖ロザリオ女学園。愛宕山の森に囲まれた都内随一のお嬢様学校。",
        "[巳]片倉組。武家屋敷を改装した本邸であり、帝都屈指のヤクザの根城となっている。",
      ]],
      [4..5, [
        "[午]妖人史料編纂局。妖怪の史料の収集と編纂を目的として設置された官立組織。",
        "[未]鰐淵金融。利子こそ高いが、誰にでも門戸を開いている貸金業者。",
        "[申]料亭山王園。政治家や官僚御用達の料亭。十二真鬼も出入りしている。",
        "[酉]日枝神社。山王祭で知られる神社。数多くの刀剣が納められている。",
        "[戌]国会議事堂。現在建設中の国会議事堂。大正25年に竣工予定で、現在は木造の仮議事堂がある。",
        "[亥]帝国図書館。国立図書館で、国内で出版されたあらゆる書籍が収蔵されている。",
      ]],
      [6..6, Array.new(6, "午~亥まで任意の十二支を選択する。")],
    ]
  ),
  'SST' => DiceTable::D66LeftRangeTable.new(
    '新宿シーン表',
    D66SortType::NO_SORT,
    [
      [1..1, Array.new(6, "子~巳までの任意の十二支を選択する。")],
      [2..3, [
        "[子]武蔵野館。座席数1,200を誇る国内有数の活動大写真館。",
        "[丑]二幸。食料品専門百貨店。あやびとたちに友好的で、伝奇事件が解決すると飲食が提供される。",
        "[寅]高野フルーツパーラー。マスクメロンが有名な果物専門店と、併設された果物が楽しめる飲食店。",
        "[卯]紀伊國屋書店。大正16年に創業した、文士たちが集うサロンのような大型書店。",
        "[辰]新宿御苑。宮内省が管理する皇室のための庭園。封印具の保管庫である浄玻璃ノ宮がある。",
        "[巳]明治神宮。明治天皇と昭憲皇太后を祭神とした神社。境内は厳かな雰囲気に満ちている。",
      ]],
      [4..5, [
        "[午]新宿駅。多摩や小田原からの玄関口となる駅。1日あたりの乗降客数は日本一。",
        "[未]酩酊横丁。長屋が連なる路地に、200軒以上もの居酒屋やバーがひしめいている。",
        "[申]歌楽騒戯通り。関東大震災後に作られた真新しい建物がひしめく歓楽街。",
        "[酉]淀橋浄水場。コレラ流行後に、水道を近代化させるために作られた浄水場。",
        "[戌]新宿大通り。急速な発展を遂げた新宿のメイン通り。",
        "[亥]ほたる屋。妖狐と妖狸が経営している衣料品専門の百貨店。",
      ]],
      [6..6, Array.new(6, "午~亥まで任意の十二支を選択する。")],
    ]
  ),
}.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) ⇒ Ayabito

Returns a new instance of Ayabito.



45
46
47
48
49
# File 'lib/bcdice/game_system/Ayabito.rb', line 45

def initialize(command)
  super(command)
  @sort_barabara_dice = true
  @round_type = RoundType::CEIL
end

Instance Method Details

#check_action(command) ⇒ Object



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/Ayabito.rb', line 55

def check_action(command)
  parser = Command::Parser.new("AB", round_type: RoundType::CEIL).has_prefix_number.enable_critical.enable_dollar.restrict_cmp_op_to(nil, :>=)
  parsed = parser.parse(command)
  return nil if parsed.nil?

  if parsed.prefix_number < 10
    dice_cnt = parsed.prefix_number
    over_modify = 0
  else
    dice_cnt = 9
    over_modify = parsed.prefix_number - 9
  end
  modify = parsed.modify_number
  critical_target = parsed.critical || 6
  addition_target = parsed.dollar || 6
  target = parsed.target_number

  dice_arr = @randomizer.roll_barabara(dice_cnt, 6).sort
  dice_str = dice_arr.join(",")
  has_critical = dice_arr.any? { |x| x >= critical_target }
  success_cnt = dice_arr.count { |x| x >= 4 } + dice_arr.count { |x| x >= addition_target } + over_modify * 2
  has_fumble = success_cnt == 0 && dice_arr.include?(1)
  if has_fumble
    success_cnt = 0
  else
    success_cnt += modify
  end
  result = target.nil? ? success_cnt >= 1 : success_cnt >= target

  Result.new.tap do |r|
    r.text = "(#{dice_cnt}B6>=4)#{over_modify > 0 ? "+#{over_modify * 2}" : ''} > [#{dice_str}]#{over_modify > 0 ? "+#{over_modify * 2}" : ''} > 成功数#{success_cnt}#{result ? '成功' : '失敗'}#{has_critical ? '(クリティカル)' : ''}#{has_fumble ? '(ファンブル)' : ''}"
    r.critical = has_critical
    r.fumble = has_fumble
    r.success = result
    r.failure = !result
  end
end

#eval_game_system_specific_command(command) ⇒ Object



51
52
53
# File 'lib/bcdice/game_system/Ayabito.rb', line 51

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