GutHubで、TheFloW氏がPS Vitaでゲームプレイ中に任意のところでその状態をセーブすることができるステートセーブプラグインdéjàvuをリリースしていました。時間があれば詳しく記事書きますと書いてから2日も経ってしまってますが、とりあえず記事書いたので…詳しいかどうかは怪しいですが…
déjàvuはTheFloW氏が開発していることを公表していた新しいVitaのプラグインです。プラグインを有効化しておけば、ゲームプレイ中にその状態を丸ごとセーブデータのように保存しておくことができ、その状態をいつでもロードして復元させることができます。
déjàvuは既視感と言う意味で、デジャブやデジャヴというカタカナ日本語として使われることもあります。来たことがない場所なのに景色に見覚えがあったり、初めてのはずなのにどこかで同じ体験をしたように感じるといった場合に使いますが、プラグインとしては過去の実際の記憶を現実にするというようなニュアンスで使われているようです。TheFloW氏は以前ステートセーブプラグインの名前を募集しており、その結果déjàvuに名前が決まりました。
SaveState plugin déjàvu v0.1 released!https://t.co/fc3WyVI0F3
— Andy Nguyen (@theflow0) March 5, 2020
ステートセーブは技術的には任意のタイミングでのRAMメモリの「スナップショット」を作成し、後に任意のタイミングでそれをRAMにリストアする仕組みを利用しています。これをゲームプレイ中に利用することで、ゲーム自体が用意しているセーブポイント以外の任意のタイミングでRAMメモリごと保存することでセーブデータを保存したこととほぼ同じ状態を作り出すことができます。
また、ステートセーブではあまり出てこない話ですが、TheFloW氏は「開発者向けの使用用途の可能性の一つとしてRAM上にあるデータに限るもののファームウェアのアップデート/ダウングレードを行うことができるためテスト用途として使えるかもしれない」ことに言及しています。
déjàvuの動作にはメモリーカードが必要ですが、現状動作が安定しているとは言えないため、状況によってはメモリーカードが破損する可能性があります。普段使いのメモリーカードをバックアップも取らずに使うことは避けた方が良いでしょう。
déjàvuのインストール方法
1) GitHubから最新版のdéjàvu(dejavu.skprx)をダウンロードし、メモリーカードのux0:tai/dejavu.skprx
へコピーする。
2) ux0:tai/config.txt
をテキストエディタで開き、*KERNEL
の行に以下のように追記する。
*KERNEL
ux0:tai/dejavu.skprx
3) Vitaを再起動する。
ステートセーブデータのセーブ/ロード方法
セーブデータの保存スロットは全部で6つ用意されています。スロット選択はSELECT/START/△/○/×/□ボタンに割り当てられています。ステートセーブとステートロードはそれぞれR/Lに割り当てられ、R/Lボタンのどちらか、SELECT/START/△/○/×/□ボタンのいずれか1つと、トリガーボタンの役割になっているPSボタンの3つを同時押しすることで機能するようになっています。
1) セーブ/ロードしたい任意のポイントで以下の3つのボタンを同時押しする。
ステートロード: Lトリガー
ii) 以下の6つのステートデータ保存スロットの中から使用する1つを選択
SELECT
START
△
○
×
□
iii) 上記2つのボタンを同時押ししながらPSボタンを押す
2) この時点でVitaはソフトリセットがかかり、画面がブラックアウトしてステートセーブデータをセーブまたはロードされる。ステートセーブはおよそ60秒、ステートロードはおよそ40秒かかる。ファイルシステムによってはもっとかかる場合がある。完了するとVitaがロック解除画面になる。しばらく放っておくとスタンバイモードになる場合があるため、スタンバイモードに入ってしまったときは電源ボタンを押して手動でシステムを再開する。セーブ/ロードの実行中はゲームカードのLEDが点滅する。
ゲームのステートセーブデータ(メモリのスナップショット)は400MBから500MBと大容量で、それがux0:savestate
で読み書きされます。ステートセーブと同時にセーブデータもバックアップされ、ステートロードの際にはロード前のセーブデータは以前バックアップしたセーブデータに置き換わります。
プラグイン自体はVitaのソフトリセット機能を利用してリソースを一時停止させ、メモリの状態をメモリーカードに書き込んでいます。ロードの場合は逆の手順が行われます。このプラグインの肝はステートデータをロードしたときで、一旦ファイルシステムをリフレッシュするというところのようです。実はこのときファイルが存在しなくなったり別のクラスタに保存されたり異なるサイズで保存されたりすることがあるため、それに応じて対応しなければなりません。更にはファイルシステムキャッシュも無効化する必要があります。このあたりのことが現状確実にできていないため破損やクラッシュが発生しているそうです。
上記のことが理由で現状の最新版のバージョンはv0.1となっており、安定性が十分ではありません。SDカード(ゲームカードスロットに差すmicroSDアダプターSD2VitaのSDカードのことだと思われる)やメモリーカードが破損してデータが消失してしまったりVitaがクラッシュしてしまう可能性もあるため、現状déjàvuを使用する場合は覚悟が必要かもしれません。
TheFloW氏としてはdéjàvuは実験的なプラグインとして公開しており、テストもVita Slimの3.65でしか行っていないとしていますから検証も十分とまでは言い切れません。今後ユーザーからのフィードバックを受けて完成度が高まっていくことになるでしょう。
dejavuを試しに使ってみました。
使用方法は所持ゲーム(今回はテイルズオブイノセンスRのゲームカードでなくSD2VITA内にデータがあるもの)のタイトル画面にてステートセーブ、後にnewgameにてOPデモが流れている時にステートロード実行という手順。
ロード後タイトル画面が表示された事によりロードが一応成功している事は確認できましたが、記事を見た上では現状ではこれ以上の実験的な使い方はあまりしたくないです。
環境としてはVITATVの3.65ensoにてメインにYAMT3.1にてUX:0に指定したSD2VITAのmicroSD400GBと元々使っていた純正メモリーカード64GBをUMA:0としている。
ステートセーブ後にUX:0/savestateを探したが見当たらず、ん?どこに保存されてるの?と思ったが、探したらUMA:0の方にsavestateフォルダが作成されていた。
純正メモリーカードが必須である=SD2VITAのmicroSDはUX:0に指定していても使用できないという事のようです。
ところで話は変わるが、YAMTをVITATVで使用時にシステムの設定の画面にてYAMTの設定をstoragedeviceの項目にて指定するが、普通のVITAならともかく、VITATVの方ではその位置に本来ワイヤレスコントローラーの項目があり、その項目を削除・上書きする形でstoragedeviceの項目が出来てしまうという事なのか、YAMT導入後にUSB接続していたコントローラーが認識しなくなりコントロール不能となる致命的欠陥を発見しました。
純正ではない他社製のUSBゲームパッドが認識しなかったので、仕方なくPS3の純正のデュアルショック3をUSB接続してペアリングしようとしたができず、セーフモードで起動したときには両者とも認識するという状態であり、何故普通に起動したときは認識しないのかについて、前述の事が原因では?と気が付くまでに何時間も泣きながら原因を探ってました。元々YAMTはVITATVでは使用しないで下さいと言う注意書きありましたっけ?
結局はシステムを初期化してUR:0内のYAMTプラグインとconfig.txtを削除しなければならなくなりました。VITATVでは本体ボタンでの操作やタッチ操作が不可能なのでどうしようもなかったです。あらかじめbluetooth接続で何かをペアリングしておけば何とかなったのだろうか?
その後はYAMTのカーネルプラグイン(YAMT.skprx)のみを適用し、設定画面などの微調整を可能にする役割を持つと思われるユーザープラグイン(YAMT.suprx)の方は敢えて削除するという形でなんとかVITATV上でも運用できています…今のところは不具合は無いけどいいのかな?