開発の松尾です。
テックブログのネタを要求されたので、色々と考えてみまして、弊社が運営しているサービスとは全く関係のない、最近社内でランチタイムに遊んでいる人狼型カードゲーム『レジスタンス:アヴァロン』を遊びやすくするための、ちょっとしたDIYについて書いてみることにしました。

『レジスタンス:アヴァロン』とは

20150824_1
『レジスタンス:アヴァロン』は2013年にホビージャパンより日本語版が発売された、人狼系正体秘匿型推理ゲームです。ゲームマスターのような中立な立場のプレイヤーが必要ない、手軽な人狼系カードゲームといったところでしょうか。「アーサー王伝説」を下敷きにしたファンタジーな雰囲気がお気に入りです。

ゲームのルールがわからないと、後段で紹介するちっちゃなアプリたちが意味不明過ぎるシロモノに見えてしまうので、ゲーム内容とルールについて解説してみましょう。

『レジスタンス:アヴァロン』は5人~10人のプレイヤーで遊ぶことができるカードゲームです。経験上7,8人で遊ぶのが一番バランスがとれていて楽しいと思います。また、面白い特徴として参加人数の多寡によらず1ゲームがおよそ30分程度で決着します。昼休みにお弁当をつつきつつ気軽にプレイできるところが嬉しいですね。

20150824_2
最もオーソドックスに5人でプレイする場合は、画像に見える5枚のキャラクターカードを使用します。青いマークがアーサー王側のキャラクターであることを、赤いマークはモードレッド側のキャラクターであることを示しています。これらのキャラクターカードをシャッフルしてプレイヤーに一枚づつ配ります。各々のプレイヤーは原則として誰がどのキャラクターであるかは分からない状態でゲームを開始します。プレイヤーは自分に割り当てられたキャラクターが示す陣営に属し、その陣営の勝利条件を目指します。アーサー王側のキャラクターであれば各クエストを成功させることを目指し、モードレッド側のキャラクターであればアーサー王側に属するフリをしながら各クエストを失敗させるために頑張ります。

20150824_3
クエストと言っても内容は単純です。この画像はプレイヤーが5人の場合のクエストシートですが、「2、3、2、3、3」と並んでいるところが各クエストに参加するプレイヤーの人数を表しています。第1クエストの数字は「2」になっているので、5人で討議しつつ2人のプレイヤーを選出しなければなりません。クエストに参加するプレイヤーを選出するのはリーダー権を持つプレイヤーです。ゲーム開始時のリーダー権はジャンケンかなにかで任意のプレイヤーに付与し、そのプレイヤーの位置から時計回りに移動していきます。

20150824_4
リーダー権を持つプレイヤーがクエストに参加するメンバーを提案したら、プレイヤー全員による投票を行います。各々のプレイヤーが投票トークンを伏せて提出し、過半数強の承認が得られればクエストフェイズに移ります。5人プレイでは3人以上の承認が、6人プレイでは4人以上の承認が必要になります。また、提案が却下されるとリーダー権が次のプレイヤーに移動します。提案の却下が5回続くと自動的にアーサー王側陣営の敗北が決定します。クエストシートの投票トラックは提案が却下される度に数字を進めて、今が何度目の投票であるかを示しています。

※ちなみにラクーンのメンバーで遊んでいるときは、面倒くさいという理由もあって投票トークンは使わずに、承認の場合は一斉に挙手という手法を採用しています。「いっせぇーのっ、せっ」って感じで。

20150824_5
クエストに参加するプレイヤーが決定したらクエストフェーズに入ります。クエストに参加するプレイヤーは、任務を成功させるか、はたまた失敗させるかをカードで提出します。任務カードに各々の陣営のアイコンがあるように、アーサー王側のプレイヤーであれば絶対に「任務成功」のカードしか提出できません。しかし、モードレッド側のプレイヤーであれば、自身がモードレッド側であることを隠すために、あえて「任務成功」のカードを選択する自由があります。内容を隠して提出されたカードをシャッフルし一斉にオープンします。全ての任務カードが「任務成功」であれば、そのクエストではアーサー王側の勝利です。しかし、ひとつでも「任務失敗」が混じっていればそのクエストはモードレッド側の勝利となります。
※プレイヤーが7人以上になると「任務失敗」が2枚提出されないとアーサー王側の勝利となる特殊なクエストも存在します。
このように第1クエスト、第2クエストとゲームを進めていく中で、先に3回目的を達成した陣営が勝利します。誰が味方で誰が敵なのか、疑心暗鬼にかられつつ自分の陣営の勝利のために考え抜き議論していくのが、このゲームのもっとも面白いところです。
とは言え、全てのプレイヤーが他のプレイヤーについて情報をまったく知らないままだと単に運否天賦なゲームになってしまいます。人狼ゲームに特殊な能力を備えた役職があるように、『レジスタンス:アヴァロン』では特定のキャラクターに付与された能力が存在し、その能力によってゲーム開始時点の情報量に差をつけます。
それぞれの主要なキャラクターの能力は以下のように分かれます。

マーリン(アーサー王側)

  • 能力:ゲーム開始時点にモードレッドの手下をすべて知ることができる。
  • 戦略:アーサー王側が勝利を飾っても、モードレッド側の「暗殺者」にマーリンであることを見ぬかれると逆転負けになるルールがあるため、身分がバレないように行動しつつ、うまくアーサー王陣営を勝利に導く。

アーサーの忠実なる家来(アーサー王側)

  • 能力:なし
  • 戦略:敵も味方もさっぱり分からない状態で開始。疑心暗鬼に負けず知力を尽くす。

モードレッドの手下(モードレッド側)

  • 能力:ゲーム開始時点で味方がどのプレイヤーなのかを知っている。
  • 戦略:モードレッド陣営であることがバレないようにしつつ、クエストに自分か仲間が含まれるように誘導する。

暗殺者(モードレッド側)

  • 能力:ゲーム開始時点で味方がどのプレイヤーなのかを知っている。また、アーサー王側が勝利した場合に、マーリンだと思われるプレイヤーを指名して正解すると暗殺によるモードレッド側の逆転勝ちになる。
  • 戦略:基本はモードレッドの手下と同様。しかし、負けた場合にマーリンを指名する責任があるため、誰がマーリンであるのかに常に気を配る必要がある。

何人でプレイした場合でも絶対に「マーリン」と「暗殺者」は含まれます。キャラクターがマーリンであれば、自分がマーリンとバレないように、時にはわざと任務を失敗させるなどのテクニックを駆使して、頑張って味方を勝利へ誘導しなければなりません。モードレッド側のキャラクターであれば、陣営は少数派ながら、味方が誰かはわかっていることを活かしつつ、アーサー王陣営に属しているフリをしながら、うまく任務を失敗させる必要があります。このようなキャラクターによる情報量の差がゲームに深みと戦略性を与えています。もっとも情報量の少ない「アーサーの忠実な家来」で疑心暗鬼にかられる中で知力を絞るも良し、何食わぬ顔でモードレッド陣営であることを隠しつつ任務の失敗に邁進するなど、ゲームのたびに自分の立ち位置や戦略ががらりと変わっていくのが『レジスタンス:アヴァロン』の醍醐味だといえるでしょう。

『レジスタンス:アヴァロン』を10倍遊びやすくするDIY

さて、こんな楽しい『レジスタンス:アヴァロン』ですが、ゲームマスターのいない人狼型ゲームであるという特性から、ゲームの開始時に少々やっかいな儀式が必要になります。具体的には、各々のキャラクターの情報量をコントロールするために、全員で目をつぶり、モードレッド陣営の味方の確認フェーズやマーリンによるモードレッドの手下確認フェーズを設けなければなりません。

以下は、ゲームのマニュアルより引用した、全員が目を閉じた状態で行うこの儀式を進行するためのセリフの例です。

「皆の者は目を閉じ、自分の手を握り拳にして前に差し出せ」

「モードレッドの手下は目を開き、周囲を確認してだれが邪悪のしもべであるか確認せよ」

「モードレッドの手下は目を閉じよ」

「すべてのプレイヤーは目を閉じ、自分の手を握り拳にせよ」

「モードレッドの手下は親指を立て、マーリンがお前らを知られるようにせよ」

(以下略)

キャラクターの能力による情報量の差を実現するためには、この儀式を正確に執り行う必要があります。

『レジスタンス:アヴァロン』で遊ぶようになった当初は、自分で買って持ってきた責任から、わたし自身が目をつぶりつつ、上記のようなセリフを唱えていたのですが、やはりセリフや順序を間違ってしまうことが多々ありました。せっかくプレイヤーにキャラクターを割り当てても、この儀式に不備があるとキャラクターのシャッフルからやり直さなければなりません。ゲームを何度か遊ぶうちに段々とこの手順が面倒くさくなってくるのはいかんともしがたいところでした。

そんな時に天啓のごとくひらめきました。

OSXってたぶん喋れたよな!?

『レジスタンス:アヴァロン』オープニングスクリプト on OSX

$ say "松尾です"

さっそくググってコマンド名を調べ、サブノートMacのコンソールからsayコマンドを叩いてみます。多少不自然なイントネーションながらも女性の声で「まつおです」とはっきり喋るではないですか!この仕組さえあればあとは一気呵成に書くのみ。

#!/bin/sh
STORM="storm.mp3"
THUNDER="thunder.mp3"

function effect() {
  if [ -f "$1" ]; then
    afplay "$1" -t $2
  else
    sleep $2
  fi
}

say "「レジスタンス:アヴァロン」を開始します"
sleep 2
say "みな、目を閉じ、拳を前に出せ"
effect $STORM 4
say "モードレットの手下は、目を開け"
sleep 1
say "モードレットの手下は、仲間を確認せよ"
effect $THUNDER 5
say "モードレットの手下は、目を閉じよ"
sleep 2
say "マーリンは、目を開け"
sleep 1
(以下略)

概略このようなシェルスクリプトを書いてざっくりとデバッグ。afplayコマンドを使えばmp3ファイルの再生も可能だとわかったので、無料素材サイトより拾ってきた効果音を鳴らして雰囲気を盛り上げる仕掛けも施しました。上記のスクリプトの先頭部にある、変数STORMやTHUNDERに入っているファイルが存在すればそれを効果音として指定した秒数で再生します。ファイルがなければないで単に無音でsleepするという単純な仕組みです。

『レジスタンス:アヴァロン』では「マーリン」や「暗殺者」以外にも、マーリンが誰なのかを知ることができる「パーシヴァル」、マーリンからモードレッド陣営だと見抜けない「モードレッド」など、任意で追加できる特殊なキャラクターがいます。そういったパターンに全部対応できるように仕上げたスクリプトの完成版はgistに置いています。環境変数で特殊キャラクターの有り無しをコントロールすることも考えましたが、面倒臭いのでやめました。このちょっと頭の悪そうなシェルスクリプトで完成版です。不要だったらコメントアウトすれば良いという方針です。セリフを変えたければスクリプト内の日本語をいじりましょう。必ずしもsayコマンドが日本語を正しく区切って読んでくれるわけではないので、変な読み方をされたら「、(句読点)」で区切るのがオススメです。

※ちなみに上記のスクリプトには、『レジスタンス:アヴァロン』の拡張版『湖の騎士』での追加キャラクター「ランスロット」を使った場合の選択ルールにも対応していますが、大抵の場合は不要なため「ランスロット」と書いてある行はコメントアウトしちゃいましょう。

『レジスタンス:アヴァロン』クエストフェーズ解決ミニアプリ

さてこのように、『レジスタンス:アヴァロン』の難儀なポイントがひとつ解決しました。昼休みのたびに持ちだされて、オープンニングスクリプトだけを喋らされるMacbook Airに多少の憐憫の情が湧きますが、標準状態のWindowsでは逆立ちしても真似ができない仕事をあっさりと実現できたわけですので、きっと故スティーブ・ジョブスも草葉の陰で喜んでいるのではないかと妄想しつつ、もうひとつ煩雑な手順があることに気づきました。

それは、クエストフェーズの投票と開票が非常にセンシティブな手順である、という問題です。

具体的には、仮に3人がクエストを実行する場合、3人にそれぞれ「成功」「失敗」の2枚組のカードを割り当てて、選択したカードを回収してシャッフルの後オープンします。結果として1枚「失敗」のカードが含まれていても、誰が出したのか分からないようにする必要があるからです。また、選択されなかったカードについても回収してシャッフルしなければなりません。誰がどのカードを残していたかは、どのカードを選択したかの裏の結果に過ぎないため、これら情報についても慎重に取り扱う必要があります。

この手順の実行には少々緊張感が漂います。仮に、誰かの選択したカードが見えてしまったら最後、その瞬間からゲームバランスが崩壊し、せっかく進行したゲームが途中で台無しになってしまいます。

と、このような悩みを解決するためにエンジニアの下田が作ったのが、HTML5+JSのみで作られた、えーっと名前は無いので適当につけると「クエストフェーズ解決ミニアプリ」です。
20150825_1
スマホからここにアクセスするだけで簡単に起動します。ソースコードはgistに置いてあります

とりあえずクエストフェーズに入ったらこの画面より「START」をタップします。

20150825_2
クエストの「成功(SUCCESS)」か「失敗(FAILURE)」のどちらかを選んでタップします。タップする指の位置で投票内容がバレないように、ボタンの上下はランダムに入れ替わるようになっています。(わたしが「指の位置でバレそう」と呟いていたら翌日実装されていました。きっと小人さんの仕業でしょう。)

20150825_3
投票が完了するとこのような画面が表示されます。クエストの投票を完了していないプレイヤーが残っていたら、このままの状態で次のプレイヤーにスマホを手渡します。「CONTINUE」をタップすると次のクエスト投票が続行され、すべてのプレイヤーが完了したら「OPEN」をタップしてクエストの結果を確認します。

20150825_4
「成功」が2人、「失敗」が1人という結果が出ました。残念なことにクエストは失敗です。3人のプレイヤーにモードレッド陣営の邪悪なキャラクターが混じっていた模様です。

と、このような感じのミニアプリを使うことで、慎重にカードを取り扱う必要のあったクエストフェーズの煩雑さが一気に解決してしまいました。文明の利器の最たるものである現代のスマホ上で、インターネット技術の重要な基盤であるHTML5を用いて、単なる計数機を作ってしまったような罪悪感をちょっぴり感じてしまうのですが、これもまた一種のIoTではなかろうかと強弁して逃げ切ることにします。

テーブルゲームのDIY万歳

このように『レジスタンス:アヴァロン』にハマったがゆえに、エンジニアの余技でDIYしてしまったという、誰得な記事を書いてしまいました。実際に他部署の人間と『レジスタンス:アヴァロン』を遊んだ時に、急にMacが喋り出したり、スマホでクエスト投票ができたりする様を見て、ちょっぴり引かれた空気を感じてしまい、落ち込んだりもするけど、私は元気です。

この内容が役に立ちそうな局面がほとんど思いつかないのですが、快適に『レジスタンス:アヴァロン』を遊んでみたいという奇特な方であれば喜んでいただけるのではないかと思っています。

それではみなさん、素敵なテーブルゲームライフを!