数値を一つ変更すること自体は難しくない。負担になるのは、その周辺の工程である。コードを開き、数値を探し、編集し、再ビルドしてからゲーム内で確認する。一晩に二十個の値を試すなら、この反復だけで集中力を消耗する。そこで、コードに触れずに調整できるコンソールを作った。
データとコードの分離:balance.json
各数値はコード内に既定値を持つ一方、ゲーム起動時に balance.json を読み込む。このファイルに保存するのは上書き値だけである。調整コンソールはJSONの可視化エディターで、Web上の操作をファイルへ書き込み、ゲームを起動すれば反映される。ロジックを変更せず、数値だけを直接調整できる。
敵の強さ、スキルの段数、手触りのパラメータ、能力値曲線、ダメージ式という五つの操作群を一画面に集約した。二十個の数値を試すときも、コードを変更せず二十回の調整だけで済む。
データ駆動調整がもたらす副次的効果
数値の分離には別の効果もある。何を調整可能にすべきかを明示せざるを得なくなることだ。ボスの耐久度、体勢崩しの受付時間、付与効果の傾きが、すべて名前を持つ操作項目になれば、システムの境界も明確になる。コードに散在するマジックナンバーは、設計自体がまだ十分に定義されていない兆候であることが多い。
アサーション:数値変更による論理破壊を防ぐ
数値を自由に変更できることは、別の危険も生む。一つの値が、離れた場所にあるバランス関係を静かに壊す可能性がある。AIとの協働では特に注意が必要になる。
この危険をアサーションで制御している。ある変更では、レベル尺度全体を五倍に拡大しながら、敵の強さは変えない必要があった。そこで「同等の進行地点では、敵の強さが変更前と完全に一致する」というアサーションを追加した。関連する定数のどれか一つだけが変更されれば失敗する。数値の変更は許可するが、数値同士の論理関係は固定する。このアサーションは後に、変換から漏れていた係数を実際に検出した。
まとめ:ツールは判断のために使う
調整コンソールとアサーションは、同じ目的を持つ。時間を「どのように数値を変更するか」ではなく、その数値が適切かどうかの判断に使うことである。
一人開発で希少なのはコードではなく、判断力と忍耐である。ツールで置き換えられる機械的作業はツールへ渡し、人にしかできない工程へ注意を残す。つまり、実際にゲームへ入り、その数値が成立しているかを自分の操作で確認する。