今回はかなりマニアックな話題。
PS3のセーブデータにPARAM.SFOというファイルが存在する。これにはアカウントIDやコンソールIDが記録されるのだが何故かアカウントIDが2箇所に記録されている。
何で2つも同じ値が記録されるのか、気になって夜も眠れないため検証してみた。
まず同じ値がどこに記録されてるのか見ていきたい
赤字で示した部分が同じ文字列になる。
しかし 「A. PSNに全く紐づけてない状態のPS3で作成したデータをUSBにコピーしたもの」 「B. PSNにログイン後、Aと同じセーブデータをUSBにコピー(エクスポート)したもの」「C. PSNでログインした状態でセーブしたデータをコピーしたもの」 を調べると興味深いことが判明した。
補足
少しややこしいので整理すると
セーブ→USBにコピー(A)→PSNにログイン→USBにコピー(B)→ゲームを進めてセーブ→USBにコピー(C)
A. PSNに全く紐付けてない状態のPS3で作成したデータ
C. PSNでログインした状態でセーブしたデータ
しかしBだけACCOUNT_IDの値とPARAMSに含まれるPSNアカウントIDの値が異なったのだ。
B. PSNにログイン後、Aと同じセーブデータをUSBにコピー(エクスポート)したもの
この ACCOUNT_ID の “00000000000000000000000000000000” はPSNアカウントに未ログインであることを示す値。それなのにPARAMSのアカウントIDの部分は自分のPSNアカウントのIDになっている。
このことから “ACCOUNT_ID” はセーブ時のPSNアカウントのID、 “PARAMS” に含まれるのは現時点でのPSNアカウントのID ということが判明。
問題はどのタイミングでPARAMS内のアカウントIDが書き換えられているか。
Aの最終更新日はセーブ時なのに対しBの最終更新日を見るとどうやらPSNにログインした日時になっている。
つまり “PSNにログインすると一旦PS3内の全セーブデータのPARAM.SFOのPARAMSに含まれるPSNアカウントIDが更新される” ということ。
結論
- ACCOUNT_ID" はセーブ時のPSNアカウントのID、 “PARAMS” に含まれるのは現時点でのPSNアカウントのID
- PSNにログインすると一旦PS3内の全セーブデータのPARAM.SFOのPARAMSに含まれるPSNアカウントIDが更新される
- そのため “ACCOUNT_ID” と “PARAMSに含まれるPSNのID” は必ず一致するという訳ではない
セーブデータの所有者確認には恐らく “PARAMS” に含まれるPSNアカウントのIDが使用されてると思われる。 (セーブ時にサインインしてなくても後からPSNにサインインすればデータを引き継げるようにするための仕様)