見出し画像

にんじんジュースの作りかた(ウマ娘のレース結果をグラフ化して表示するやつ)

[おことわり]

 [DMM版ウマ娘を60fpsで動かすやつ]と同様、本記事も外部のモジュールを導入して実現するものです。これを実行したことでDMMアカウントをBANされたり、PCが予期せぬ動作をしたりしても筆者は一切責任を取れません。すべて自己責任で行ってください。

[はじめに]

 ウマ娘やってますか?筆者がこれを書いているのは、ちょうどジェミニ杯が始まって2日目のタイミングです。筆者はグレードリーグに参戦したら初日は20戦1勝というありさまで、カネも時間も手間もかけてない人間が勝てるわけがないことを痛感しました。そのため、2日目からはある程度のところでやめて参加賞をもらう消極的なプレーに徹しています。とりあえず1勝はしたのでBグループの決勝ラウンドは進めましたが、単に運がよかっただけですね。気長にやるしかない。

 そんなウマ娘もサービス開始から数か月経ち、ステータスの細かい意味や明示されてないパラメーターなどが、先人の努力によってかなり明らかになっているようです。育てたウマの能力で京都3200を十分走り切れるのかなどを判定できたり、レースをシミュレートしたりなどのサービスもWeb上にあるようです(ここでは紹介しません)。
 とはいえ、それらはあくまでシミュレートにすぎません。実際に行われたレース結果を保存して、後で振り返ることができれば役に立つかもしれませんが、ウマ娘にそんな仕組みはありません。しかし世の中広いもので、実際のレースデータを保存し、それをわかりやすく表示する仕組みがあります。作った方はすげえとしか言いようがない。

[EXNOA-CarrotJuicer と Hakuraku]

 EXNOA-CarrotJuicer は、ウマ娘のアプリケーションがサーバーと通信している内容をファイルとして保存するものです。60FPS化などで使ったUmamusume-Localify と同じようにDLLモジュールを追加して使うもので、レースだけでなくその他ほとんど全ての通信内容を、通信毎にファイルで保存します。通信内容は通常暗号化されていますが、復号化に使うライブラリの機能をフックしているようです。おっかないな。
 最新のバージョンでは、育成イベントで表示される選択肢の結果をコンソールに表示する機能も増えました(追加ファイルで実現しているらしい)。

 ところでこれはWindows用ですが、Android用にも Riru-CarrotJuicer という同じような仕組みのモジュールがあるようです。どちらも同じ作者のプロダクトですが、こちらは端末のroot化が(恐らく)必須なのと、筆者は使ったことがないのでここでは紹介しません。

 Hakuraku は、ウマ娘用のWebサービスです。ウマ同士の継承時の相性チェックもできますが、それよりも比重が高そうなのは EXNOA-CarrotJuicer で保存したレース内容の通信ログから、中身を分かりやすくプロットするサービスです。これを使うと、以下の内容が分かりやすく表示されます。

・レース結果(着順)
各ウマの速度/HPの推移、速度/HPの各フレームでの増減値
各ウマのスキル発動/被ブロック/かかり/ラストスパート開始時のタイミング等の表示

 特に速度/HPの推移は、ウマのパラメーターに対してHPがどのように減少/回復していくか、ラストスパート開始時はいつか、ゴール時の残HPがどうだったかなど、通常分からない/分かりづらいことが分かるようになるため、育成の目安になるかもしれません。

※余談ですが、 Hakuraku は恐らく伯楽のことで、中国の春秋時代に存在した人。馬の能力を見抜く名人だったようで、転じて才能を見抜く力が優れている人のこと。

[EXNOA-CarrotJuicer 導入手順]

1.
 GitHubにある、 EXNOA-CarrotJuicer のプロジェクトページに行き
Releases から最新バージョンの umamusume.7z をダウンロード、解凍する。これを書いている段階では、V1.2.2 が最新っぽい。
 合わせて、Microsoftのウェブサイトから Visual Studio 2019 の Microsoft Visual C++ 再頒布可能パッケージ をダウンロード、インストールしておく。プロジェクトページにも記載があるように、これがないと動作しない。

2.
 解凍すると、version.dll と cjedb.json というファイルができる。これらを、DMM版ウマ娘のインストールフォルダ(umamusume.exe がある所)に置く。通常なら、 %USERPROFILE%\Umamusume になると思う。
 要するにUmamusume-Localify と使い方は同じだが、共存はできない(自分でソースを見てあれこれできる人は別?)。なお cjedb.json は、先述した育成イベントの結果表示をつかさどるデータファイルなので、不要な場合はなくても動く。つまりコピーするのは version.dll だけでもよいはず

3.
 通常通りウマ娘を起動すると、通信内容が CarrotJuicer フォルダ(%USERPROFILE%\Umamusume 内に作成される)に保存されていく。

※通常はこれだけですが、人によってはダウンロードしたファイルではウマ娘が起動しないことがあるかもしれません。筆者の場合、今のバージョン(1.2.2)では問題なかったが過去のバージョンではウマ娘が動作せず、自分で環境を準備してモジュールをビルドするハメになりました。その場合の手順もプロジェクトページにざっくりと書いてありますが、Visual Studio等をインストールして起動云々……を日常的にやっている人はともかく、そうでないと苦労するかもしれません。筆者はサポートできない(やり方を忘れた)ので、必要な場合は自力で何とかしてください。

[通信内容を確認する]

1. 
 EXNOA-CarrotJuicer で保存されたファイルは、大きく ~Q.msgpack
~R.msgpack という二種類の名前のものに分かれる。このうち主に使うものは後者で、サーバーから受け取ったデータ内容が書かれている(ちなみに前者はこちらから送信している情報のようで、使ってるビデオカードなど環境情報が記載されていた)。実際はレースデータだけでなく、育成から何からプレイヤーがとった行動の結果があれこれ記録されている。

2.
 保存されたデータを確認するには、先に紹介した Hakuraku のページにある CarrotJuicer に行き、保存された ~R.msgpack を読み込ませる。一度に複数ファイルを指定することもできる。読み込ませるとそのファイル名が表示されるので、任意のファイル名を選ぶと右側に中身が表示される。選んだファイル内容にレース結果が含まれている場合、出馬表やウマ毎のデータがグラフで表示される仕組み。

画像5

 筆者も詳細は知らないが、race_scenario というフィールドに書かれたランダムな文字列が実際のレースデータで、各フレーム毎の経過、各キャラクターのデータがそこに含まれているっぽい。要するに、それを解析した上で結果をわかりやすく可視化しているようである。

[内容の見方]

 以下に実際の例を示しますが、これはライスシャワーの育成中に出てきた天皇賞・春のレースデータだったと思います(まあ思いっきり負けてたんですが……)。各項目毎に解説していきます。

画像1

[出馬表]
 そのレースに出た各キャラクターのパラメーター、人気などを表示する。評価点まで出してくれるのが恐ろしい。一番左にある+マークをクリックすると、所持スキルとその発動有無がわかるようになっている。

画像2

[Distance Diff Graph]
 レースの開始から終了までの、各ウマの位置関係の推移を示している。[Use Base Distance as X Axis]をオンにすると、グラフのX軸が時間からレースの距離に変わる。

画像3

[Chara]
 各キャラクターの、そのレースでの経過が可視化される。上のグラフは速度とHPの経過がメインだが、以下の項目をいじって表示/非表示もできる。

・Show Skills……スキルがいつ発動したか表示
・Show Targeted Skills……影響を受けたデバフスキルが、いつ誰によって発動されたか表示
・Show Blocks……いつ誰にブロックを受けたか表示
・Show Temptation Mode……"掛かり"があった時にその期間を表示

画像4

[その他]
・[Last Spurt]のラインで、ラストスパートの始まったタイミングがわかる。ラストスパートはゴールまでにHPが足りるタイミングで発動するようなので、つまりスタミナや根性が足りないと発動しないか、タイミングが遅れる。ラストスパートに入るとHPの減り方が全然違うのも分かる。

・下側のグラフは、その時のスピードとHPの増減値を示す。毎フレーム毎にどれくらいHPが減っていくか、ブロックされたタイミングでスピードがどれくらい落ちたか、回復スキルが発動した時点でHPがどれくらい回復したかなどが分かる。既にご存じの方も多いと思うが、(金スキルならともかく)ラストスパートに入ってから通常の回復スキルが発動しても、HPの減り幅が一瞬緩和される程度である。

・これらのグラフの下には、実際の通信内容が生で表示されるが今回は説明を省略する。気になる人は実際に確かめてほしい。

[チームレースの解析]

 Hakurakuにはチームレースの結果表示機能もあり、CarrotJuicerと同じ要領で TeamRaceAnalyzer にチームレースのデータを読ませると表示できます。内容は上と異なります。こんな感じ

画像6

 各ウマの順位、獲得ポイントだけでなく残りHP、全体のうちラストスパートが占める割合などが分かります。掛かりや出遅れもわかる。

[その他]

 RaceDataParser というページもあります。一見、CarrotJuicerのページから一部の機能(出馬表やレース結果のパース)だけを切り出したもののように思えますが、デイリーレースやレジェンドレースのように出馬表とレース結果が別々のファイルで出力される場合があるので、そういうレースを確認したいときに使います。それぞれのファイルをCarrotJuicerで表示し、 race_horse_data_array(出馬表データ)と race_scenario (レース結果データ)をコピー。その内容を RaceDataParser の該当フィールド部分に貼り付けて[Parse]ボタンをクリックすると内容が表示されるはずです。

[さいごに]

 これを活用できれば育成に役立つかもしれませんが、結局は環境(手持ちのサポートカードやウマ)、時間、手間が必要なのは同じなのでありました。ひたすらやるしかありませんね。
 なお、ここに書いた内容に誤りがありましたら Twitter:@ragemax までこっそり教えてください。

 繰り返しになりますが、これを活用した結果DMMアカウントをBANされたり、その他不利益があっても筆者は一切責任を取れませんし、当然これらのツールやWebサービスを作成された方にも何の責任もありません。全て自己責任でお願いします。

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