「シノアリス」のマッチングロジックを考える

「マッチングロジック」を運営目線から考える記事です。最初の三分の一は対象ゲームの仕組みについての説明。残りの三の分の二は、マッチングロジックの説明記事。後半にいけばいくほど、話がディープになります。

今回は筆者がプレイしているスクウェア・エニックスのソーシャルゲーム「シノアリス」を例に考えてみます。


ツッコミやコメントなどあれば、twitter @ryuktia までどうぞ

===========================

「マッチングロジック」とは?

対戦相手を決めるためのルールです。例えば100チーム存在する場合に、「どのギルド」と「どのギルド」を対戦相手とするかを決めるためのものです。

通常は複数の「変数」を元に点数やランキングを算出し、近い同士をマッチングさせるというのが基本系です。

===========================

マッチングロジックで実現したいこと

基本的には

・接戦になること(一方的にならないこと)

・その中で勝ちすぎないor負けすぎない

なぜ、この2つが大切か。それは「公平さ」と「悔しさ」を演出するためです。この辺りは記事の後半で

===========================

シノアリスのギルド戦(「コロシアム」)の基本仕様

・ギルド(1ギルド最大15名)同士の対戦(通称GvG形式)

・対戦ではお互いに戦い点数が多いほうが勝ち(詳細はここでは省きます)

・対戦は1日1回20分。対戦時間は複数の候補からギルドマスターが選ぶことが可能

・勝敗数によりギルドのランク帯が決まる。最初はD帯からスタートし、D⇒C⇒B⇒A⇒Sとなる

・その時間に参加していないギルドメンバーはCPUが操作する。実際の人間がプレイするより行動スピードが遅く、敵や見方を任意で選べないため貢献度が低い

===========================

コロシアムのマッチングロジックの基本的な考え方

・ギルド順位が算出され、ギルド順位が近い同士の対戦が行われる

・ギルド順位がどのように算出されているかは非公開だが「マッチングに利用している(「ヘルプ」より)ということが分かっている

・上記とは別に「ギルドレベル」というものも公開されているが、こちらに関してマッチングに利用されているかは非公開

・また対戦中に獲得した点数のデイリーランキングが別途公開されている。こちらに関してマッチングに利用されているかは非公開

・S帯~D帯とあるが、B帯とA帯がマッチングすることがもある

・(当然だが)順位の算出ロジックは非公開

===========================

マッチングロジックに使われている変数

この辺りからようやく本題に入ります。

ロジックを決める変数には大きく分けて3種類あります

1)(いつでも)意図的に下げることができる変数

シノアリスの場合:物理攻撃力・物理防御力・魔法攻撃力・魔法防御力 →装備の付け替えにより変更が可能

ギルドの人数なんかもこの中に入れることが(一応)できます

2)意図的に下げることはできないが、上げるのを止めることができる変数 

シノアリスの場合:試合での獲得点数、攻撃回数、魔法利用回数、召喚の利用回数、ギルドシップ撃墜数、試合の参加人数(CPU以外の人数)、

3)努力によって上げることができる変数 

この努力が何を指すかによってさらに二つに分けることができます

3-A)プレイ時間によって上げやすい変数(あるいは課金によって上げにくい変数)

シノアリスの場合:スキルレベル、ナイトメアのレベル、武器・防具等の限界突破数、ジョブレベル、プレイ時間など

3-B)課金によって上げやすい変数(あるいはプレイ時間によって上げにくい変数)

シノアリスの場合:武器・防具等のレベル、ガチャでしか入らないジョブ・武器等の所持数、課金額など

基本的に3-Aと3ーBはそれぞれ独立しておらず、どの変数も両方の要素が含まれていてその配分が「プレイ時間より」なのか「課金より」なのかが変わります ※このあたり分類してみたけど、あまり自信ないです。

===========================

さて、マッチングロジックの話に戻しますが、マッチングロジックの変数として使ってはいけないのは「1)(いつでも)意図的に下げることができる変数」です。


以下、シノアリスの8月17日の告知です。

ここでいう「総合値」とは、物理攻撃力・物理防御力・魔法攻撃力・魔法防御力の4つの数値の合計です。

ここから読み取れることは2つあります。

A)上げ下げが可能な総合値を変数に使っていたということ

これ自体も問題ですが

B)総合値を見に行く「タイミング」が試合中「以外」だった

ということです。


B)の何が問題かというと、試合前に総合値を意図的に下げ(装備を外すなどして)おいて、その低い点数を基準に弱い相手とマッチングさせ、その上で試合前に総合値を元に戻し対戦するということが可能だったということです。

※試合30分前まで装備を変更可能で、30分前~試合中は不可

「見ている変数がおかしい」そして「見に行くタイミングがおかしい」ことの相乗効果によって、このような抜け道が発生してしまいました。


※ちなみに試合のマッチングは、その日の対戦が終わり(23時20分)、翌日に入ったタイミングから最初の試合(朝8時)までの間に行われているということになります。通常マッチングロジックを決めるためには、順位を決定するための処理(バッチ)を流すことになります。

このバッチを流すタイミングで総合値を見ていた可能性が高いのではないでしょうか。バッチ処理が失敗するリスクを考えると、試合終了からなるべく近い時間帯で対戦相手を決める方が運用上のリスクは少ないので、シノアリスでも同じような考え方をしているかもしれません。

===========================

1)の意図的に下げられる変数は使わないという話をしましたが、2)の「意図的に下げることはできないが、上げるのを止めることができる変数」に関しては扱いが難しいところです。

例えば試合中に一方的に勝っていて、「残り時間はこれ以上攻撃しなくても勝てる」という場合にどうするべきか

A)最大の点数を目指して、頑張る

B)意図的に攻撃を止めて点数を稼がない

という2つの選択肢が考えられます。


もしマッチングロジックに「獲得した点数」を使っている場合は、B)の方が次の試合で弱い相手と当たる可能性が増えます。なので基本的に2)に関しても変数として使うことは推奨しません。

しかし、これに対しての例外が数パターンあります

あ)点数をいっぱい稼げば稼ぐほど良い報酬(アイテム)がもらえる

い)点数をいっぱい稼げば稼ぐほど次の対戦相手が弱くなる

シノアリスでは、あ)・い)どちらもそのようなロジックは働かない形となっています。コロシアムの報酬は「参加報酬」「撃墜報酬(ギルドシップを1回でも破壊すれば入手可能(破壊回数は関係ない)」「勝利・敗北報酬」となってります。

見ての通り3つとも、点数をいっぱい稼がなくても入手できるのです。そして現在のマッチングロジックから「い)」は実装されている可能性は極めて少ないです。

上記のようなこともあり、シノアリスで2)の「意図的に下げることはできないが、上げるのを止めることができる変数」を利用する場合は、止めるのを防ぐ仕組みを組み込まないと利用することに意味がありません。


ちなみに「あ)」あるいは「い)」を実現できるような仕組みを作ると、課金へのモチベーションを高めることは可能です。そしてさらに突き詰めれば試合中に課金(=有料アイテムの購入)を促すこともできますが、かなりリスキーな戦略なので、こちらはあまりオススメしません(1試合が数日間のような長期間のバトルの場合は別)

===========================

なのでマッチングロジックとして適している変数は

3)努力によって上げることができる変数

ということになります。こちらが一番「公平さ」を出すことができ、かつユーザーが「操作しにくい」ものになります。

わかりやすい変数の例でいうと「バトル中の攻撃・魔法などのダメージ量(相手の防御値を考慮前)」などはその例でしょう。

攻撃回数はコントロールできますが、試合中の武器の基礎攻撃力などは変えることができないため、この値(の平均値や中央値)を使うのは1つの選択肢です。攻撃力はプレイ時間・課金どちらもで上げることができるため活用しやすい変数です。


努力をより反映させたいのであれば、「プレイ時間」「プレイヤーレベル」「コロシアム以外での通常ストーリーでの戦闘回数」なども候補になります。強くするためには必ず増やさなければいけないもので、下げることもできません。なお、ここではプレイヤー単位で書いていますが、実際にはギルドメンバーの平均値や中央値を使う形になります。

逆に課金要素をより反映させたいのであれば、課金であげやすい変数を使うとよいでしょう。

当然ですが、変数は1つであることは滅多にありません。上記にあげたような複数の変数を組み合わせて点数(と順位)が計算されます。


===========================

変数をどのタイミングで、どこまでさかのぼってみるか

時系列の概念もマッチングロジックを決めるうえでは大切です。過去に遡りすぎるとギルドメンバーが変わっていたり最新の状態が反映されなかったりします。逆に期間が身近すぎると、直近の結果や数値の重要度が増し、積み上げの努力などは評価しにくくなります。

筆者の基本的な考え方は、コロシアム関連の変数(攻撃力・ログイン人数等)に関しては直近数試合を利用し、コロシアム以外の変数(プレイ時間、戦闘回数)などは累計あるいは少し長めに見てもよいかもしれません。レベルなどは直近のもので問題ないでしょう。

大切なのは試合中のデータを利用するのか、そうではないのかを明確に分けて考えることです。試合外での攻撃力を使うと、前述の画像のような抜け道が発生してしまいます。

===========================

変数に対しての重みづけを考える

複数の変数を利用する場合、その重みづけをすることが必要です。

具体的な例を見てみましょう。

マッチングロジックを決めるための点数 = 試合時の平均攻撃力 + 平均プレイヤーレベル + コロシアム獲得点数

という式があるとします。これを単純に使うと

20,000点 + 100レベル + 500,000点 = 520,100点

となり、ほぼコロシアムの獲得点数によって決まってしまいます。そこで「重みづけ」を行います。たとえば、レベルに関しては1,000倍にして、攻撃力に関しては100倍してみましょう

20,000×100倍(200万)点 + 100×1,000倍(10万) + 500,000点 = 2,600,000点

になります。これによって試合時の平均攻撃力が大きな要素になりました。このように変数の重み付けをすることによって、どの変数が大切になるかが変わります。攻撃力を100倍ではなく10倍にすれば他の変数の影響が大きくなります。

変数の重みづけは、まさにマッチングロジック設計時の腕の見せどころです。どの変数の影響を強めたいのか。それはどういったゲームにしたいのかに左右されます。努力の要素が大切なのか、課金の要素が大切なのか、運の要素が大切なのか。ポリシーにもよるでしょう。

値が変わるごとの差をより大きくしたい場合は「レベルを二乗する」、値が変わるごとに差をより小さくしたい場合は「ルート(√)を利用する」という設計も可能です。

このあたりは実際に回しながら検証するしかありません。

===========================

マッチングロジック例

筆者が以前、あるソーシャルゲームで設計し運用していたマッチングロジック(月間プレイ人数10万人、参加ギルド数万のサービス)の時には、以下の変数を利用しました。

・直近X試合の勝敗

・直近X試合の獲得点数

・平均攻撃力(試合開始時)

・直近X日間でのログイン日数(またはプレイ時間)

獲得点数を使用したのは、点数が高いほど「より良い報酬が得られる」という施策を実施していたためです。ほかの変数は主にプレイ時間によって上げられる変数を利用していました。

この時も事前にテストは行うものの、実際のデータを見て果たして適切なマッチングだったかを検証の上、毎週重みづけに関しては細かく調整していました。ちょっとした変更でゲームプレイは大きく変わります。


※なお「適切なマッチング」だったかは、点数差・攻撃回数の差・試合中のアクティブ時間など「実際に遊んでいるか」をもとに確認を行います。勝敗に関しても、実力7割・運3割くらいのところで調整をしていました。この辺りはかなりマニアックな話になるので(この記事もそうですが)このあたりで割愛

===========================
継続的にコロシアムを楽しんでもらうために

やはりコロシアムの楽しさは「接戦」と「自分たちの努力(試合外での頑張り+試合での頑張り&戦略)によって勝った・負けた」にあるのではないでしょうか。

これを良い意味で演出できないと、継続的に遊んでもらうことは難しいです。接戦(あるいは公平さ)に関してはマッチングロジックでコントロールできますが、試合中の努力と戦略に関してはゲームシステムに依存します。

また課金がどれくらい勝敗に反映されるか。これも非常に調整が難しい要素です。つまり100円=何時間分の努力とするか をある程度算出する必要があります。

本記事は「マッチングロジック」に関する記事なので、システムに関しては詳しく言及しません。個人的に「神魔」システムは良いと思います。これにさらに戦略要素を加えることが出来れば、もっとも白熱するのではないでしょうか。候補としては「コンボ部分の拡張・見直し」「召喚以外の任意で発動できる必殺技」「前衛後衛仕組みの拡張」「不遇な武器(魔具など)の対応」あたりでしょうかね。


===========================
ちなみに…

多くのGvGを提供しているサービスでは、経験上ざっくりですがまともに試合が行われているのは上位30%くらいだと思われます。残りは1人ギルドや誰も試合に参加していないギルドなどになります。そしてまともに試合が行われている中でも同じくらいの割合が、いろいろ戦略まで考えてプレイしているのではないでしょうか。

なのでマッチングロジックを考えるときに、大切なのは上のギルドを見ることです。下のギルドに関しては、マッチングロジックを考えるときの優先度は低くなってしまいます。

GvGをよりアクティブなものにするために、できることは主に2つです(ここではギルドバトル自体を面白くするという根本的な話は除きます)

1)ギルドあたりの平均人数を増やす

ギルド数を増やすのではなく、ギルド数が少なくてもギルド人数が多い方がアクティブ率はあがります。そのためのキャンペーンや施策を行うのもよいでしょう

2)ギルドバトルの報酬をより豪華にする

報酬を豪華にする、また獲得した点数(例えば試合で獲得した点数ランキング)によって報酬をより豪華にするなどが考えられます。シノアリスはその要素が比較的弱いかなと

どちらもアクティブになる施策ではあるものの、その分ギルド内やギルド間での競争は激しくなるので、リスクもあります。

このあたりもサービス運営側がどう考えるかです。

===========================
もし筆者がシノアリスのマッチングロジックを考えるなら

最後にこのトピックスで終わりにしましょうか。

マッチングロジックの変数として以下の5つの中から、いくつか組み合わせるかと思います。

A)コロシアムのアクティブな参加人数

B)直近X日の「プレイ」時間

※「プレイ」の定義はストーリーやイベントなどのクエストを指す(装備変更やガチャ回しの時間は含まない)

C)前試合の試合中の攻撃力・防御力(アクティブな参加者のみ)

D)ギルド参加メンバーの平均レベル(ただしギルドメンバーの下位2割は除く)

E)各種武器のスキルレベル

そして

F)チームが連勝すればするほど、点数に倍率をかける→つまり連勝すればするほど強い相手と当たりやすくなる。その逆も然りで、チームが連敗すればするほど、弱い相手と当たりやすくなる。

というロジックを追加します。

思想としては

「頑張っている同士を対戦させたい(一方的な試合を極力減らす)」

「簡単にプレイヤー側で調整できる要素を極力排除する」

「努力と課金のバランスを取りたい」

点数を稼ぐモチベーションや報酬を用意できるのであれば、点数も変数に入れたいところです。現状の報酬とマッチングロジック設計では難しいでしょうが


外部から適当に書いている内容ですし、他にも良いロジックはいっぱいあると思います。皆さんだったらどのような変数を入れますか?


この記事が気に入ったらサポートをしてみませんか?