-
Notifications
You must be signed in to change notification settings - Fork 6
Snapshot ja JP
⚗ 実験的タブ(デフォルトでオフ)。
Snapshot タブは、(スコープ内の)すべてのオブジェクトのすべての数値 UPROPERTY を永続的なディスク上の snapshot にキャプチャします。その後、2 つの snapshot を diff して何が変わったかを見たり、1 つの snapshot 上で複数の値を group-match したりできます — 「どのオブジェクトがこれらの数字すべてを保持しているか?」という定番の探索を、ライブメモリではなくキャプチャ済みのコーパス上で行うものです。Snapshot は SPC Query と Class Pivot タブにも供給されます。
snapshot は完全な数値ダンプなので、大きなゲームでは巨大になりえます — 下のキャプチャコントロールはそれを抑えるためにあります。
Capture snapshot パネル(折りたたみ可能)には設定が 1 列並びます:
| コントロール | 動作 |
|---|---|
| Scope | どの数値フィールドの幅を含めるか。 |
| Type | Scope の上にかける型ファミリの絞り込み:All numeric、Integers only(Int8/16/32/64 ±、浮動小数点を除外)、または Floats only(Float/Double、整数を除外)。設計上ロッシー — もう一方の型ファミリを戻すには再キャプチャ。浮動小数点 ≈ HP/MP/座標;整数 ≈ カウント/フラグ/ID。 |
| Game objects only | 非ゲーム(エンジン/transient)オブジェクトをスキップ。 |
| Auto detect Engine/System noise |
デフォルトでオン。 純粋なエンジン/システムクラス(UI ウィジェット、テクスチャ、サウンド、パーティクル/Niagara、anim インスタンス、/Script エンジンパッケージ)をソースでスキップするので、キャプチャが速く DB が小さくなります。ゲームプレイのガードレールが Actor / Pawn / Character / ActorComponent / Controller / PlayerState のいずれかのクラスを強制的に保持します — なのでプレイヤー Pawn の X/Y/Z と HP/MP(コンポーネントや GAS AttributeSet 内)は決して落とされません。ソースレベルのスキップは取り消し不可(オフにして再キャプチャすればクラスが戻ります)。キャプチャ後の Noise picker とは別物です。 |
| Native-C (raw) |
オプトイン、デフォルトでオフ。 リフレクションされた UPROPERTY フィールドに加えて、各オブジェクトのアンマネージドホール(非 UPROPERTY の生バイト)を合成 <raw@0xNN> フィールドとしてキャプチャし、Guess-What ヒューリスティックで解釈して数値型に正規化します。SPC Query / Class Pivot が リフレクションでは見えないネイティブ値(HP/MP)を追跡できるようにします。遅く、大きくなります;raw フィールドはオフセットで snapshot 間を join します。 |
| Per-game quota | キャプチャがクォータを超えると、このゲームの最も古い snapshot が自動的に破棄されます(キャプチャ完了後に)。 |
| Max size |
オプトインのキャプチャ内上限。 ライブ DB がこれを超えると、キャプチャは早期に停止して部分 snapshot を保持します(スキャン済みの先頭 N オブジェクト)。クォータとは異なり — クォータはキャプチャ後に古い snapshot 全体を退避するだけ — これは単一の過大なキャプチャを制限します。大きなゲームでは Estimate size と併用してください。Off で無効化。 |
| Label | 任意の名前(デフォルトはタイムスタンプ)。 |
2 つのボタンで仕上げます:
-
Estimate size — プリフライトチェック:現在のオプションでオブジェクトの小さなサンプルを走査し、ディスクコストをモデル化して全オブジェクト数へ外挿します。DB を書き込みません。数 GB のキャプチャに踏み切る前に
~X GBの go/no-go を示します。 - Capture Snapshot — キャプチャを実行。キャプチャ(または見積もり)実行中は Cancel が現れます。
Saved snapshots リストはこのゲームの各キャプチャを列 Label · Captured (UTC) · Objects · Fields · Est. Size · Scope · UE で表示します。Used: バーがクォータの消費量を示します。操作:
- Refresh — リストを再読み込み。
- Delete Selected / Delete All — snapshot を削除(Delete All は DB を truncate + VACUUM してディスクを回収;取り消し不可)。
-
Open DB folder — このゲームの
snapshots.<pe_hash>.dbをファイルブラウザで表示。
Mode トグルが下半分を Diff と Group (Multiple Values) の間で切り替えます。
Old と New の snapshot を選んで Run Diff すると、値が変わったすべてのフィールドを一覧します。この diff は常に deep です — ネストされた配列/struct-array 要素の変化(例:SupportActionGauge[3]、Array[N] として表示)を含みます;ここに Deep トグルは不要です。
Diff はセッション内のオブジェクト同一性(同じゲーム起動)でフィールドを join するので、Old と New は同じプレイセッションのものであるべきです。
Class / Field / Object / Change(方向)フィルタ、Filter all ボックス(任意の列に一致)、および Old / New 数値レンジ(Apply range / Reset)で結果を絞ります。結果の列:Δ · Class · Object · Field · Old · New。各行は Live(Live Walker で開く)、🌍(Locate in GWorld)、⚙(Locate in GameEngine)、Addr(コピー)を提供します。Locate はセッション内の diff でのみ機能します。
1 つの snapshot 全体で、異なる数値オフセットに 2〜4 個の値すべてを保持するオブジェクトを見つけます — Value Search の Group Scan の snapshot 版です。
- 検索する Snapshot を選び、Find(Clear でリセット)。
- + value / − value — 値の行を追加・削除(2〜4)。各行に幅 scope、述語(predicate)、値(Between 述語の上限 to も)があります。
- Compare with (Mode B) — 比較対象の古い snapshot を選びます。これは相対述語 Changed / Unchanged / Increased / Decreased を有効にします — 例:Current HP が減少し Max HP が変化しなかったオブジェクトを見つける。絶対的な単一 snapshot 一致には空のままに。(✕ でクリア。)
-
Deep (nested containers) — ネストされたコンテナ/struct-array 要素内の値も一致させます(例:
SaveSlotList[1]…Tunes[2])。所有オブジェクトのブロックに折り込まれます。オフ = 直接フィールドのみ(速く、ノイズが少ない)。 - Rounding — 小数の float/double ターゲットが一致前にどう縮約されるか。
結果は**マスター詳細(master-detail)**です:一致した各オブジェクトごとに 1 行(Class · Object · Matched values);行を展開すると slot ごとの詳細が見られます。オブジェクト行は Live(Live Walker で開く)を提供し、Addr · 🌍 · ⚙ は展開された slot ごとの詳細行にあります。
Group はしばしば Unchanged を必要とします。 定番の「current HP が下がり max HP は変わらない」パターンは、一方の slot が Decreased かつもう一方が Unchanged のときだけ正しいオブジェクトを分離できます — なので Compare with snapshot を選んで相対述語を使ってください。
Diff 結果の下には Noise picker(SPC Query タブと同じ形)があり、Diff モードでのみ表示されます(Group モードが有効な間は非表示):これはキャプチャ後に完成した snapshot をフィルタします(ソースでスキップする Auto detect Engine/System noise とは対照的)。Apply は選択したクラスを denylist に押し込みます。
- SPC Query — 複数の snapshot にまたがって値を照会(Diff の複数 snapshot 後継)。
- Class Pivot — クラスのフィールドを snapshot 間でピボットして、そのステータスレイアウトを見つける。
- Value Search — Group モードのライブメモリ版。
- Detect Stats — snapshot の「値が下がった」シグナルを使ってステータス候補をスコアリング。
- Live Walker — Live / 🌍 / ⚙ の着地先。