初めに
AndroidスマホでGBC・GBAエミュレータのJohn GBACを使って、今更ポケモン第3世代を再開しました。
PCではmGBAを使っていたため、そのセーブデータを共有したところ、mGBAで作成したセーブデータをJohn GBACで読み込めないことが判明しました。
原因はmGBAのセーブデータの末尾16バイトにRTC情報が内包されており、John GBACが想定していないセーブデータ形式だったためです。
(John GBACはRTC情報は別ファイルとして保存しています)
mGBAの設定でRTC情報をセーブデータに内包させないようにしたかったのですが、2024年12月時点でそのような設定は見受けられませんでした。
そのため、PowerShellでmGBAのセーブデータからRTC情報を削除するスクリプトを作成したため、下記にて紹介します。
mGBAのセーブデータからRTC情報を削除するスクリプト
前提
PowerShellのバージョンは「7.4.6」です。
スクリプト
param (
[string]$filePath
)
# ファイルが存在するか確認
if (Test-Path $filePath) {
# ファイルのサイズを取得
$fileInfo = Get-Item $filePath
$fileSize = $fileInfo.Length
# ファイルサイズが131,088バイトであるか確認
if ($fileSize -eq 131088) {
# 末尾16バイトを削減したサイズを計算
$newSize = $fileSize - 16
# ファイルを開いて新しいサイズでトリム
$stream = [System.IO.File]::Open($filePath, [System.IO.FileMode]::Open)
$stream.SetLength($newSize)
$stream.Close()
Write-Host "ファイルの末尾16バイトを削除しました。"
}
else {
Write-Host "ファイルサイズが131,088バイトでないため削除できません。"
}
}
else {
Write-Host "指定したファイルが存在しません。"
}
動作仕様
上記スクリプトを「tranSaveData.ps1」のように保存し、以下のようにpowershellで実行します。
tranSaveData.ps1-filePath 対象ファイルのフルパス
このスクリプトは指定したファイルの末尾16バイトを削除します。
指定したファイルが存在しない、または実行対象外(131,088バイトでない)のファイルの場合は実行せずにエラーを吐いて終了します。
最後に
John GBACのセーブデータにRTC情報がなくても、mGBAでは普通に読み込みできます。
あくまでもmGBA→John GBACへのセーブデータ共有向けです。
コメント