【超速GP】アセットデータ解析
『ミニ四駆 超速グランプリ』(以下、超速GP)のアセットデータの解析について解説する。
注意事項
この解説は、誤った情報を払拭し、正しい情報を得る目的で提供されるが、ゲームの利用規約に抵触する内容が含まれる。不正な手段で得られた情報を利用してゲームを有利に進めることは、他のプレイヤーとの公平さを欠くチート行為に当たるため、正しい倫理観に基づく行動を期待する。
今回解析対象としたデータはアクセス制御や暗号化が行われていないため、不正アクセス禁止法や不正競争防止法には抵触しないと思われるが、解析データを公開する場合は著作権法に留意する必要がある。
アセットバンドルの抽出
超速GPは今流行のゲームエンジン「Unity」を利用して作られている。Unityでは画像、音、3Dデータなどのコンポーネントを「アセット」と呼び、複数のアセットをまとめたファイルを「アセットバンドル」と呼ぶ。
アプリ本体はアプリストアを通じて配信されているが、容量の大きいアセットバンドルは別途バンダイナムコが管理するAWSサーバからCDNを通じて都度配信される。アセットバンドルは毎週水曜日のメンテナンス(という名のデプロイと週次バックアップであろう)時に更新されることが多く、これが運営側の言う「ゲームアップデート」に当たる。
ゲームアップデートのメンテナンス中、アプリ起動画面の「サポート」メニューにある「一括ダウンロード」で配信されるアセットバンドルを解析することで、一足先に未公開情報が明らかになることがある。
これまでのリーク情報は、この更新データ解析か、エディットカップの制限パーツリストか、コロコロアニキか、公式Twitterかのいずれかが出所となっている。
アセットバンドルは、Android端末の内部ストレージ(/storage/emulated/0/)の"Android/data/com.bandainamcoent.mini4wdgp/files/AssetBundle"に保存されているので、PCと端末をUSBケーブルでMTP接続して取り出すことが出来る。iOS端末では脱獄でもしない限り内部ストレージからアセットバンドルを取り出すことは出来ないが、パケット解析でアセットバンドルのURLが分かっていれば、Windows PCでこれをダウンロードすることができる。サーバ上にあるものはZIP圧縮されているので予め解凍・展開しておく必要がある。アセットバンドルのURLは例えば次のようなものがある。
https://prd-app.cf.p.mini4wdgp.channel.or.jp/resources/production/Android/Compressed/dcd976bacef64dd4f884f3241baa069a
アセットの表示・抽出
アセットバンドルを読み込んでアセットを表示・抽出できる解析ツールがいくつか存在するが、ここではWindows用の「AssetStudio」を使用する。
AssetStudioの最新版ビルド配布元から今回は"AssetStudio.x64.v0.14.38"をダウンロードし、ZIPを解凍・展開後、フォルダ内の"AssetStudioGUI.exe"を実行する。
AssetStudioが起動したら "File" メニューの "Load file" か "Load folder" でアセットバンドルを指定する。
"Load folder" でフォルダ指定すれば複数のアセットバンドルを一括で読み込めるが、アセットバンドルの量によっては相当時間が掛かるため、今回は "Load file" で単一のアセットバンドルのみを解析対象とする。
解析対象とするアセットバンドルは、なるべく更新日時が新しく、サイズが大きいものを選ぶ。なお、サイズが数十KBしかないものはXMLで記述されたアセットバンドルのリストであり、大した情報的価値はない。ゲームアップデートの翌日などに行われる軽微なデータ更新はこのリスト更新である。
読み込みが終わると"Scene Hierarchy"にツリーが表示されるが、これでは分かりにくいので"Asset List"タブを開き、"Name"でソートすると、程良く関連アセットが並んで表示される。アセット行を左クリックでプレビュー表示、右クリックでエクスポートが可能。
今回読み込んだアセットバンドルは比較的最近実装されたパーツの3Dデータやテクスチャに関するものらしく、未実装のネオトライダガーZMCのデータを確認できた。
その他、"MonoBehaviour"というオブジェクトの振舞いを定義したアセットでモーターの回転数を変数に代入しているコードも確認できた。
・FA-130ノーマル:9900rpm
・ハイパーミニ:13000rpm
・レブチューン:14300rpm
・トルクチューン:12000rpm
・ハイパーダッシュ:17200rpm
それぞれ現実のパーツにおける適正負荷回転数の最小値が設定されているようだが、アセットの性質上、これがコースレコードの計算に使われている訳ではなく、駆動系の回転描写かモーター音に使われているのだろう。いくらモーターを改造で強化しても、この回転数は固定のため、レース中の描写は変わらないと思われる。
また、別のアセットバンドルでは今後実施予定と思われるガチャやイベントのバナーが確認できた。ただし、ここに含まれていないからといって直近の予定にないとは限らない。アセットバンドルの更新は1週間に1度とは限らず、運営側はいつでもアセットバンドルを更新できるからだ。
最後に
前述の通り、この方法で解析できるのは画像、音、3Dデータ、それらの配置位置や動作といった、2D/3Dオブジェクトの表示・再生に関するものに限られる。パーツに設定されているステータスや、マシン診断の計算式といった内部値は知ることができない。
では、どうやってレースをシミュレーションしているのか? その謎は通信解析によって明らかになってきたので、またの機会に紹介したい。