ゲームバランスを「勘」でなくシミュレータで設計した話
『フルスタック!』はカードでバグと戦うデッキ構築ローグライトです。この手のゲームの生命線はバランスで、強すぎれば作業になり、渋すぎれば理不尽になります。このノートでは、勘でカードの数値を触るのをやめて、シミュレータで勝率を設計した過程を、失敗した数値も含めてそのまま書きます。
目標を先に数字で決める
最初にやったのは、カードを作ることではなく目標勝率を決めることでした。何も考えずカードを出しまくる「無策プレイ」で勝率5〜10%。敵の予告を読んで守りと攻めを選ぶ「上手いプレイ」で50〜60%。戦闘は平均3〜6ターン。この帯に入るまで数値をいじり続ける、と先に決めてしまいます。
そのためにNode.jsでゲームのルールを丸ごと移植したシミュレータを書きました。カード効果も敵の行動も本編と同じロジックで、無策・上手いの2種類のAIに数千ランずつ自動プレイさせ、勝率・脱落ステージ・平均ターン・デッキ枚数を出します。1回の計測は数秒です。
最初の数値はだいたい間違っている
初版の計測結果は無策11.9%/上手い68%。甘すぎでした。そこで敵を強化したら今度は1.4%/28.5%。締めすぎです。ここで学んだのは、敵を強くして直すのではなく、プレイヤー側の対抗手段を増やして直す方が体験が良くなるということでした。負債カードへの対抗(リファクタの強化)とメンタル上限の引き上げで、7.2%/52.9%まで戻します。
その後も機能を足すたびに帯から飛び出しました。印象的だった事故を2つ挙げます。
| やったこと | 結果 | 直し方 |
|---|---|---|
| 負債カード「あとで直す」を無制限に使えるようにした | 無策勝率3%まで崩壊 | 1ターン1回に制限 |
| ステージクリア報酬でレリックとスキルを両方もらえるようにした | 25%/75%までインフレ | 混合プールから3択で1つに統一 |
どちらも、実装した直後は「面白くなった」と感じていました。数字を見なければ確実に見逃しています。
初期デッキをアンケートで変える、を安全にやる
後から「3問の適性アンケートに答えると初期デッキが抽選で決まる」仕組みを足しました。素朴に強いカードを混ぜたら無策16.5%/上手い70.2%まで跳ねたので、①抽選プールに初期カード級を混ぜて薄める、②初期デッキに「前任者の技術的負債」を2枚入れる、の2段で調整。負債の継承は配属あるあるのネタでもあり、バランス装置でもあります。最終的に、どの分野に寄せて回答しても上手いプレイの勝率が49〜61%に収まることを、回答パターン別に4,000ランずつ回して確認しました。
勝率以外も測る
ラン終了時に出るキャリア称号(「徹夜の常習犯」など17種)も、最初の実装ではプレイヤーの99.6%が同じ称号になっていました。判定閾値を勘で書いたせいです。2万ランで称号の分布を実測し、初期デッキを集計から除外し、閾値を分布に合わせて引き直して、最頻の称号でも14%程度になるよう直しました。「診断系の機能は分布を見ないと必ず偏る」は今回いちばんの教訓です。
「無策AI」と「上手いAI」をどう書くか
シミュレータの信頼性は、自動プレイのAIの出来で決まります。無策プレイのAIは「使えるカードを手当たり次第に使い、ターゲットは適当」。上手いプレイのAIはヒューリスティックの塊で、敵の予告ダメージと自分の残りメンタルを比べて守りを優先するか決め、倒しきれる敵から順に狙い、報酬では自分のデッキ戦略に合うカードを選びます。とはいえ人間の上級者の読みには及ばないので、「上手いAIの勝率50〜60%」は「人間の上級者なら6割強」くらいの意味で運用しています。AIの腕前が固定なので、数値変更の前後比較という目的には十分です。
もう一つ重要なのが乱数の管理です。シードを固定できるようにしてあり、同じシードなら同じ結果が再現されます。調整のたびに「別シードでも同傾向か」を必ず見るのは、4,000ラン程度だと勝率±1%くらいは平気でブレるからです。1回の計測で一喜一憂しない、は統計の基本ですが、ゲーム開発の現場では意外と忘れます。
新機能は「入れる前」に測る
この体制のいちばんの効能は、機能の企画段階で数字が見えることです。たとえば「各戦闘に見積もりターンを設定し、超過したら残業ダメージ」という機能を思いついたとき、実装前にシミュレータへ先に入れました。結果、上手いプレイの勝率が50.9%→48.2%に沈むと分かったので、ボス戦の見積もりを5ターンから6ターンに緩め、定時退社の回復量を+2から+3に上げてから、本体に実装しています。ゲーム本体のUIを作り込んだ後に「この機能、バランス壊してるかも」と気づくのと、企画メモの段階で数字が出るのとでは、手戻りの量がまるで違います。
いまの数字
公開時点の実測は、無策6.4%/上手い53.1%(別シードで6.3%/52.3%)。目標帯のほぼ中央です。以後もカードや敵を1つ触るたびに、実装より先にシミュレータを回す運用にしています。ゲームの手触りは最後は人間が決めるものですが、その判断を数字の土台の上でやるかどうかで、迷いの量がまったく違いました。