Unity 製ゲームの場合に使用できる、Autosplitter 用の asl で使用したいメモリアドレスの特定方法

お知らせ

この記事の改訂版を公開しました。

(改訂版)Unity 製ゲームの場合に使用できる、Autosplitter 用の asl で使用したいメモリアドレスの特定方法



Cheat Engine を使って asl ファイルで利用するための静的アドレスを特定する場合、一つの値に的を絞って値を検索して特定する方法があります
 が、その場合は欲しい値が存在している保証がなく、また、欲しい値の数だけ検索を繰り返す必要があります

Unity 製ゲームの場合は mono の分析機能を利用することで、欲しい値を格納しているフィールドの有無を知ることができ、さらにはクラス単位でフィールドの値を格納している静的アドレスを特定することができます

この記事はメモリアドレスを特定する方法のみの記事です
asl の全体的な説明や基本的な作り方などをまとめた記事もありますので、よろしければこちらもご覧ください

また、構造解析機能を使ってメモリアドレスを調べる部分の実演をした動画を公開しておりますので、よろしければこちらも参考としてご覧ください

手順
  1. 1. 欲しいフィールドを含むクラスの探索
  2. 2. クラス内のフィールドの動的アドレスの特定
  3. 3. フィールドのポインタ検索
  4. 4. クラスの静的アドレスの特定
  5. 5. 欲しいフィールドの静的アドレスを決定

Typoman - revisedAny で 36:48 を達成





RTA 配信を一覧表示できるサイトで知らないゲーム画面を見たことがきっかけで出会ったゲームで、普通に面白そうなゲームだと思ったことと steam セール中だったことで即購入
 その時は自分で RTA を走るつもりはなかったのですが、なんとなく SRC で紹介されている短縮技に挑戦してみて、成功条件の検証などをし始めて、そこまでやったならと自分でも走り始めたという経緯があります

Flash ゲーの RTA イベントに出場するために別ゲーの練習をしている間に、このゲームの新技が見つかったりパズルの最適化が進んだりで、実は記録を出したこの時は新しい方法に手をなじませるための練習のつもりのプレイでした
 別ゲーの直後であり、新旧の方法が頭の中で混線していて、ところどころ操作が拙い感じになっていますが、それでも記録は記録

autosplitter 用の asl ファイルで初めて公開できるレベルのものができたゲームでもあります

この1年の振り返り

箇条書きで簡単に
  • RTA のイベントに初出場
  • 他の RTA イベントにも出場
  • Linelight - All Yellow Stars で SRC 記録より 20 分早くクリア
  • Typoman - revisedAny% で SRC 記録より 2 分早くクリア
  • Typoman 用 asl ファイルを公開
  • Deep Sea Hunter - 100% で SRC 記録より 3 分早くクリア
  • RiJO 2020 の効果でブログアクセス数が初の 4 桁!

  • padlight 用のスキンを作成
  • その後、padpyght 用に移植(そういやまだ公開してない)

  • 天使の微笑みの攻略チャートを公開
  • 初めて c# でプログラミング
  • VS Code を導入

  • ブログ記事で表示するソースコードを行数付きに変更
  • ブログ記事本文中の外部リンクにアイコンが付くように変更
こうして並べてみると、今年は RTA に関連することが多かったなと改めて実感しました
 タイムだけで見れば WR いくつか持っていますが、公に認められたタイムではないので自称 WR です

1 年前の振り返り記事で「今の風を感じて」の 100% で 2 時間切りたいと書いてますが、結局挑戦すらしないまま 1 年経ってしまいました
 他の RTA を色々やっていたし、そちらではそれなりに記録を出しているので大目に見てください

RKS FS では、ついにコピクラ縛りで RTA という頭おかしいことをやりました
 満足のいく内容ではないため、またいつか挑戦して動画をアップ出来たらいいな


某 1 時間条例がきっかけで c# の勉強をして、未公開ではあるものの一応はゲームを完成させました
 その時に身に着けた知識が、まさか Autosplitter の asl を作ることに生かせるとは思ってもいませんでした
 それどころか、もし Autosplitter に興味を持ち始めた時に c# の知識を持っていなかったら、自分で asl ファイルを作ることはなかったんじゃないかとすら思っています

初めて作った asl が Linelight のチャレンジモード world.1 用のものですが、完成度が低いし、そこでしか使えないというものです
 昨日、ようやく Full-game 用の asl 作成に必要なメモリアドレスが分かってきたところなので、年が明けたら本格的に着手したいと思っています


箇条書きで簡単にと言ったのに、普通に文章を長々と書いてしまった……

とにかく、簡単にまとめると、今やっていること一つ一つを着実に形にして行けたら良いと思います

Deep Sea Hunter - 100% 用のチャート

Deep Sea Hunter の 100% で私が使っているチャートを公開
 Flash のサポート終了までに勝ち逃げしたい方、お待ちしています

集金状況によってグレードアップする順序が前後することもあるため、チャートというよりは指針といった方が適切な気がします

日本語の紹介サイトでは画面サイズ 585x390 で表示されますが、本来のサイズは 720x480
 私は 720x480 の方が敵を回避しやすいので、本来のサイズでプレイしています
基本的な方針
  • 1回目の潜水で2,000稼いで燃料2、ローター2(クラゲの群4組くらい必要)
    少なくとも2回目の潜水の稼ぎで燃料3、ローター2
  • 燃料 > ローター で両方10まで、端数は金探
  • ボス3に到達したくらいまでにマグネット3
  • 金探10
  • ランチャー5 → ミサイル10 → ソナー8 でボス1
  • ランチャー10、端数は耐久で残りのボス

グレードアップの参考
私の自己べ 34:51 の場合
潜水回数01020304050607080910111213141516171819
ミサイル11111111222222710101010
ランチャー1111111111111155101010
ソナー111111111111111881010
ローター1223344567889101010101010
耐久11111111111111112910
燃料1233445667889101010101010
マグネット11122222233333333410
金探111223445567771010101010
(途中でミサイル2にしてるのは操作ミス、後に同じ方針で 34:00 を記録)

SRC 37:14 の場合
潜水回数01020304050607080910111213141516171819
ミサイル11111111111111110101010
ランチャー1111111111111115101010
ソナー111111111111111181010
ローター1133333566789101010101010
耐久111111111111116781010
燃料12234566678910101010101010
マグネット111112223333331010101010
金探111222223344491010101010
(旧自己べ 35:06 はほぼこれと同じ)


注意するボスの水深
Boss2 1,650
Boss4 2,970


最後の潜水で稼ぐ金額の計算
現在Lv56789
ソナー47,50041,00033,50025,00015,000
耐久47,50041,00033,50025,00015,000
マグネット36,00031,00025,00018,00010,000
2,000 ft = 1,0000 $


注意する実績
ドクロアイコン 敵300
イルカアイコン 敵全種
プレイ中に表示される実績取得のホップアップは、最低でもこの2つが表示されたことを把握しておきます
 他はプレイしている間に自然と取得できるので、あまり意識を向けていません

padlight を参考に作成されたキー入力表示ソフト、padpyght

アナログスティック・アナログトリガー(※)にも対応したキー入力表示ソフト、padpyght を導入しました

「padpyght」 GitHub

先日、padlight 用にスキンを作ったのですが、ゲームパッドを買い替えたら Xinput の時に認識されなくなってしまいました
 ゲームによっては Xinput でなければ動かない場合もあったので、padlight から他のソフトに移行を考えていた時に、この padpyght に偶然出会いました

padlight にインスパイアして作られたソフトとのことで、アナログスティック・アナログトリガー(※)、Xinput に対応しており、標準でファミコン、スーファミ、Wii U、GC、PS コントローラのスキンが含まれています
 また、padlight のスキンの知識があれば、こちらでもスキンの自作や padlight 用スキンの移植をすることができると思います

参考
「インプットディスプレイ」げーむめも

※注意
配布されている実行ファイルはスティック傾け操作と Xinput 方式のコントローラには対応していますが、スティック押し込みとアナログトリガーの段階表示には対応していません
 アナログスティックの押し込み・アナログトリガーの段階表示に対応するには、最新版のソースコードを実行する必要があります

ソースコードから実行する場合は配布ページの "Running from source" の部分に書かれており、Python 2.7 と pygame 1.9 が必要です
 Python 2 は 2020 年 1 月 1 日にサポート終了しているため、新規に Python 2.7 の実行環境を整える場合は注意が必要です