ゲームAI 実践編 −Shadowverseに見るTCG AI開発の事例(1)−


みなさん、こんにちは!
Cygames Research 所属、リサーチャーの佐藤です。

いよいよリリースされましたShadowverse、楽しんで頂けていますでしょうか?
トレーディングカードゲーム(TCG)が初めての方でも本格的な戦術と対戦が楽しめる、
シンプルで奥深い内容となっていますので、
まだ、という方は是非是非、御手に取って遊んでみてくださいね。

Shadowverse公式サイトはこちらから

 


ShadowverseではNPC戦…AIの挙動についても、
開発陣のありったけの愛とこだわりを詰め込みました。

 

上の動画はNPC戦の様子をキャプチャしたものです。
画面上のダンディなオジサマ(AI)が、
スペルカードや進化の能力を駆使して、プレイヤーと一進一退の攻防を繰り広げていますね。

このような動きをするTCGのAIは、一体どのように作っていけば良いのでしょうか?

今回の記事では、Shadowverseでの実際の開発事例を題材に、
ゲームAI開発における『プレイングとヒアリング』の重要性 について、
皆さんと一緒に考えていきたいと思います。

 


■ShadowverseのAI開発における取り組み

 

ShadowverseではAIの開発初期から現在に至るまで継続して、
デザイン・設計・実装前のアナログのカードを利用した対戦・検証と、
AI戦の感想収集・分析を続けています。

こうしたゲームのプレイフィールについてリサーチを繰り返すことは、
AIの開発においても極めて重要です。

ゲームにおけるAIは常に『キャラクターの挙動をどのように感じるのか、
プレイヤーへの心理的な作用を考慮しながらデザインされるもの』ですし、
ゲーム体験の理解と分析が、下図のように様々な部分に影響を及ぼしてくるからです。

 

 

レベルデザインのほかに、開発効率や処理速度にも関わってくるのは少し意外ですね?
でもこれ、本当のことなんです。

Shadowverseをワークケースに一つ一つ事例を見ていきましょう。

 


■ソーシャルゲーム TCGにおけるAIの要件分析

ソーシャルゲームのTCGにおいてAIに求められる
役割、機能にはどのようなものがあるでしょうか?まずは要件を分析してみましょう。

 

【Ⅰ】運用要件

(1)環境追従性

トレーディングカードゲームは環境による変化が極めて激しいゲームです。
提供されているカードの種類が変われば、戦術の幅やプレイセオリーも大きく変化します。

長期の運用を前提にしたソーシャルゲームとして展開する以上、
AIにおいても、環境の変化に耐えうるロバスト性と柔軟性、保守拡張性が必須要件となります。

 

(2)開発負荷の低減・量産性

継続的なイベント施策が行われるソーシャルゲームにおいては、
定期的なNPCの追加が必要となる可能性が見込まれます。

短期的なサイクルで上記を実現するためには、
レベルデザイナーの開発負荷を低減しつつ、品質の高いNPCを制作するための
量産性を担保する必要がありそうですね。

 

(3)レスポンス

モバイルゲームとして展開する以上は、
スマートフォンデバイス上で軽快に動作する必要があります。
AIの思考時間が長すぎるためにゲーム体験を損ねてしまうことが避けたいところですよね。

思考の質を担保しつつ、高速駆動させるための仕組みが重要になってきそうです。

 

(4)積み込み・ドロー操作の禁止

NPC戦であればドローするカードの順番を事前に組み替えたり、
入れ替えることも可能ですが、これには下記のようなデメリットもあります。

  • TCGの醍醐味でもあるランダム性による多様なゲーム展開を損なう。
  • NPC側の不正行為が発覚した場合に、ユーザー側のストレスとなる。勝利体験を損なう。

競技制の高いゲームとして展開する以上は、NPC戦であったとしても公平さを貫きたいという
開発陣の強い要望もあって、Shadowverseでは
AIはプレイヤーと対等の条件下で戦うものとし、AI側のチート行為は一切を禁止しました。

勿論、これはタイトル個々の要件や特性により異なってくる部分ではあるので、
ゲームによっては、積み込みやドロー操作といった仕掛けは
良い方向に作用することもあります。

 


【Ⅱ】ゲームデザイン上の役割

Shadowverseは対人戦を主眼としたゲームコンテンツであり、
そのための手段が手厚く用意されていますので、
人間の代わりに対戦する相手を用意すること自体には、余り意味がありません。

不特定の練習相手を探すのであればフリーマッチがありますし、
より強い相手と戦いたいのであれば、ランクマッチを勝ちあがっていけば良さそうです。
では、このゲームにおいてAIでなければ果たせない役割とはなんでしょうか?

 

(1)デッキチューナー

ランクマッチで使うには不安の残る試行錯誤中のデッキをチューンしていく際に、
相手のデッキ傾向や強さ・戦法を指定することができれば便利です。

例えば、『長期戦を狙うデッキを組んでみたけど、
ばんばんリーダーを攻めてくる速い展開の相手にどこまで通じるか試してみたい』という
ユーザー要望は発生しそうです。

フリーマッチでは対戦相手のデッキと戦法は指定できませんが、
AI戦であれば常に特定のデッキと戦法をとる対戦相手を提供することが可能です。
強さの質も段階を踏んだものが提供できれば、デッキ強度の指標として利用して頂けますよね。

そのためには、流行のデッキをはじめとして様々な戦術を表現可能である必要がありそうです。

 

(2)対戦での感情表現を通じたキャラクター性の演出とアハ体験の導線

対戦相手がなんの反応も返してこないのは寂しいですよね。

対戦を盛り上げ、キャラクターにより感情移入してもらうためにも、
プレイヤーが素晴らしいプレイングをしたときには喝采や驚嘆を、
NPCが勝負を仕掛けてくる局面では意気軒昂に、感情表現させてあげたいところです。

 

 

また、NPCの感情表現は、プレイングノウハウに、
『プレイヤー自身が気づく・発見する(アハ体験する)』ための
機会を仕掛ける際にも便利です。

例えばNPCのエリカは、『盤面にいる数多くユニットを展開し、強化しながら戦う』ことを
得意とするロイヤルというクラスのヒーローです。

「プレイヤーが、エリカの強化対象となるユニットを一掃した」時に悔しがったり、
「エリカが、味方のユニットを数多く展開することに成功した」時に気勢を吐くことで、
エリカの特性や効果的な対抗方法について、さりげなく印象付けることができます。

そのためにも「実際の対戦で感情が動く局面、ゲーム体験への作用」を分析するとともに、
AIの機能要件として「プレイヤーの行動や、ゲームの局面を評価する」ための仕組み
必要になってきそうですね。

 

(3)プレイング・デッキサンプルの例示

プレイヤーに対してデッキの組み方や、使い方を例示するためにも利用できそうです。
例えばプラクティスの中級のNPCは
『初期デッキの扱い方』を例示する用途で用意されています。

新弾のカードの使い方をNPC戦で例示できれば、
プロモーターとしての働きも期待できますよね。

 

 

■機能要件まとめ

まとめると、AIの機能として、

  • プレイヤーのプレイング・局面を評価する仕組み
  • カード・デッキの個性を活かしたプレイングを可能とする思考・表現力
  • デザイン意図を反映するためのレベルコントロール性
  • 新弾カードの追加・長期運用に耐えうる環境追従性
  • 継続的なNPC提供を可能とする量産性
  • モバイルデバイスでのレスポンスを保証する高速駆動

が、必要になることが見えてきました。

 


■要件から設計を切り出す

ゲームの特性と開発要件、
レベルデザインの要所が理解できれば、採択するべきAIの構造と設計の指針が見えてきます。

先程分析した要件をベースに、AIの骨格となる構造を考えてみましょう。

リリース後、カードの能力・パラメータの修正の度に、
実行ファイルを更新することは避けたいところですので、
環境の変化やレベルデザインに関わる領域は、
アセットバンドル化可能な外部データに切り出しておく必要がありそうです。

AIのデータドリブン化と、局面やプレイング(行動プラン)の評価を行う上では、
『ゲームAI 基礎編』の記事で紹介したユーティリティベースの構造が有効そうですね!
パラメータの調整により、多様な性格傾向のAIを量産できますし、
メンテナンスも容易になりそうです。

ゲームデザインおよび環境の変化の粒度は、カード単位で行われますので、
AIのデータもカードを最小粒度に用意するのが良い…
NPCの性格やデッキごとの戦術がデザイン要件に含まれるので、コントロールの口が必要…
…と考えていくと、必要なデータ構造の大枠も見えてくる気がしませんか?

一例として、下図にShadowverseのAIの概観図を示します。

 

 

「シミュレーションベース」という新しい単語がでてきましたね?
少し詳しく見てみましょう。

 


■シミュレーションベース?

シミュレーションベースとはAIのプラン評価の手法の一つで、
『行動プランを実行した結果をシミュレーションし、
その結果に基づいて、プランの評価を行う』手法です。

囲碁や将棋における『読み』と呼ばれるような、
『先の展開を予測した上での判断・思考』を再現することに向いており、
下記のようなメリットを持ちます。

 

 

勿論、メリットばかりではありません。

 

 

 

グラフ探索を行って全ての展開を走査してみると…

 

「最近のスマートフォンであれば、100万程度…」と思われるかもしれませんが、
相手の手番の行動まで読みたい…、スペルを組み込んだ展開は…と適用していくと
必要なシミュレーションケースは更に爆発的に増加していきます。…困りましたね。
高速駆動という要件に反するので、シミュレーションの採用は諦めざるを得ないでしょうか…。

ここで、役に立ってくるのがゲームの特性・プレイングノウハウについての分析です。
ゲームの特性が理解できていれば、最適化への道筋が見えてきます!

 


■最悪の計算量になるのはいつか?

5vs5の戦闘のシミュレーションが最悪の計算量となるのは、
どのようなケースかを考えてみましょう。

味方ユニットの攻撃により相手ユニットが破壊されていけば、
他の味方ユニットの攻撃先の選択肢は減っていくため、展開の分岐量は少なくなります。
逆を言えば、『戦闘を通じて相手ユニットが1体も破壊されない』場合に
計算量が最悪になることがわかりますね。

さて、『相手ユニットの破壊に到らない戦闘』が
ゲーム的にどのような意味合いを持つかを見てみましょう。
いくつかの例外はありますが、実はほとんどのケースにおいて
『そのターン中にユニットの破壊に到らない行動』というのは、
盤面の形勢にあまり影響を与えません。

次のターンでの敵ユニットの攻撃機会(能力の使用権)を奪うことができないからです。

上記のような行動を事前に刈り込むことができれば、
シミュレーションの質を落とさずに、計算量を削減することができそうです。

 


■最適化してみよう!

「どの敵を破壊するのか、事前に撃破目標を確定させ、
その目標を攻撃先とする行動パターンのみ走査する」と
いう方向でアルゴリズムを組み替えてみます。

目標の達成が明らかに不可能なものは前もって除外してしまいましょう。

 

 

さて、どの程度シミュレーションケースが抑えられたでしょうか?
最悪のケースでのシミュレーション総量を試算してみましょう。

 

 

随分と少なくなりましたね!
最適化の効果は、単純なシミュレーションケースの抑制にとどまりません。

アルゴリズムの組換えにより、グラフ探索ではなく
『最大32ラインの排他独立な線型解決可能な演算』として
解決することができるようになったため、下記のようなメリットも得られます。

 

 

ゲームの特性を理解できると、良いこと尽くめですね!!
より良い設計と実装のためにも、ゲームはしっかり遊びこんでおきましょう。

 


■シミュレーションケースの刈り込みにあたっての留意点

シミュレーションケースの刈り込みは効果の大きい施策ですが、
刈り込みに使用するルールは
『環境により変化しうるものでない』ことを精査しておく必要があります。

何故ならユーザーに対して
『一度アップグレードしたものをデグレードすることはあってはならない』
からです。

一度高速化してしまえば、そこからの低速化は許されません。
ゲーム環境の変化により刈込に使用したルールが妥当でなくなり思考の質が落ちたとしても、
おいそれと変更することはできなくなります。

シミュレーションの刈り込みに限らず、長期的なアップデートを必要とするゲームでは、
『環境の影響を受けやすい要素を、高速化の軸に置くべきではない』ことを
念頭に置くようにしましょう。

 


■盤面の評価を利用したAIのコントロール

シミュレーションを通じて、行動の結果が予測できるようになりましたね。
行動の良し悪しを評価するために、この結果をスコアリングしてみましょう。

 

 

この際、盤面の結果の評価に介入することで、
AIの行動傾向をコントロールすることができます。実際に具体例を見てみましょう。

 

 

カードの複雑な能力を利用した一見高度な行動の調整も、随分と簡単になりましたね。
デッキ別にカードごとの評価補正をもたせておけば、
デッキの中でのカードの役割や扱い方・デザイン意図を反映することも容易です。

他にもリーダーのライフの評価を重くすることで防御的な性格にしたりと、
ちょっとした工夫で色々な行動傾向のAIを作ることができそうです。

また、このようにAIの判断の際、
「評価」という形で抽象化したスコアを仲介させておくと、追加拡張性も高まります。
異なるルールのカード追加が行われたとしても、
AIの思考の中核となるアルゴリズムは変更することなく、
外部データの調整か、スコアリングのための評価ルールのアタッチのみで
対応が可能になります。

 


■評価指標の切り出し方

ユーティリティベースのAIにおいて評価の指標はそのまま、
AIの行動傾向をコントロールするための軸になります。

『AIにどのようなプレイングを行わせたいのか』を洗い出したうえで、
各プレイングの動機となる評価の軸がなんなのかを探ってみましょう。

実際のプレイヤーがどのような視座で盤面を評価しているのか、
各局面で手札の中のカードをプレイするときに、
どのような思考と評価の元で行っているのか、
デッキにカードを組み込むとき、どのような役割を期待して評価しているのか、

これらは実際にゲームを遊びこみ、分析を重ねなければ見えてきません。
そして、この作業は決して自分だけでは完結しません。

万の人間がいれば、万の思考があり、万の評価の方法があります。
ゆえに、多くの方にゲームを遊んでもらい、リサーチを重ねましょう。
そうすれば根底に共通する考え方(汎用化可能なメソッド)や、
個性につながる思考の差異(コントロールの軸)が見えてくるはずです。

開発者目線・ユーザー目線の双方でプレイングとヒアリングを重ねることで、
より良いレベルデザインの方法論が見えてきます。

 


■まとめ

 

「Shadowverseに見るTCGのAIの開発事例(1)」、いかがだったでしょうか?
より良いゲームAI開発のためにはプレイングとヒアリングを重ねることが重要…
そのためにも、私はより多くの方のゲームプレイについて学びたい、
意見を伺いたい、感想を知りたいと考えています。

今回の記事がゲームAI開発についての、意見交換の活性化の一助になれば幸いです。

次回は、限定合理性を指標にしたデザインメソッドと、
遅延評価を利用した高速プランニングについて御紹介したいと思います。
それでは、また。楽しいゲーム開発ライフを!