アフィリエイト・アドセンス広告を利用しています。詳細は こちら



Steam 版 ARMORED CORE VI FIRES OF RUBICON のセーブデータを自動的にバックアップする方法

Steam 版 ARMORED CORE VI FIRES OF RUBICON のセーブデータを自動的にバックアップする方法を紹介します。

この記事の内容は以前公開したソウルシリーズ(DARK SOULS REMASTEREDDARK SOULS II SCHOLAR OF THE FIRST SINDARK SOULS III)のセーブデータ自動バックアップ方法とほぼ同じ内容となっています。

フロムソフトウェアのゲームだけでなくあらゆるゲームに言えることですが、セーブデータの自動セーブ機能があるゲームではセーブを忘れたりすることはないので便利ですが、その反面ゲームシステム上、自動セーブ機能をオフにできない手動セーブ機能がないセーブデータを 1つのファイルだけで管理している場合、バグやセーブ中のゲーム強制終了などでファイルに何か問題が起きたら、最悪続きからのプレイ続行が不可能、最初からやり直しになる可能性があります。

特にオンラインプレイでのチーターにプレイデータを改ざんされるような事態になると、何らかの手段で改ざん前のセーブデータのバックアップを取っていなければ、今までのプレイしたデータが水の泡になることがあります。

このゲームも含め最近は Steam クラウドによる保存が可能となっているようなので、セーブデータを管理しているローカル PC でストレージがクラッシュした時の保険としてクラウド機能は重要な役割をしていると思いますが、セーブデータの中身まで保証されているわけではないので、過信できないところはあります。

今回の記事では過去の公開した PC 版ソウルシリーズ同様に、このような問題が発生しても手動でセーブデータを巻き戻せるように、DARK SOULS: REMASTERED のセーブデータを自動的にバックアップするツール「DS1-backup-tool」を一部改造したセーブデータの自動バックアップスクリプトを公開します。

この記事ではセーブデータをローカル PC にバックアップする方法に限定して紹介しています。セーブデータをバックアップから巻き戻した場合の動作については保証できません。オンライン状態で意図的にまたは過度にセーブデータの入れ替えを繰り返すと、運営から何らかの警告や違反判定を受ける可能性があります。その流れで利用中の Steam アカウントやマルチプレイなどでの制限・ペナルティ、その他何らかの処置がとられる可能性がある点に留意してください。

Steam 版 ARMORED CORE VI FIRES OF RUBICON のセーブデータを自動的にバックアップする方法


Steam 版 ARMORED CORE VI FIRES OF RUBICON セーブデータ保存場所

まずは Steam 版 ARMORED CORE VI FIRES OF RUBICON のセーブデータがどこにあるのかを確認します。

Steam 版 ARMORED CORE VI FIRES OF RUBICON のセーブデータを自動的にバックアップする方法、Steam 版 ARMORED CORE VI FIRES OF RUBICON セーブデータ保存場所、%APPDATA%\ArmoredCore6\user-id(C:\Users\USERNAME\AppData\Roaming\ArmoredCore6\user-id)フォルダにある AC60000.sl2 ファイル

Steam 版 ARMORED CORE VI FIRES OF RUBICON のセーブデータ保存場所とファイル名は %APPDATA%\ArmoredCore6\(user-id) フォルダにある AC60000.sl2 ファイル となっています。

フルパス名だと C:\Users\(USERNAME)\AppData\Roaming\ArmoredCore6\(user-id) フォルダになります。

ARMORED CORE VI FIRES OF RUBICON では Windows の環境変数 APPDATA 以下にセーブデータが保存される仕組みとなっています。ほかのフロムソフトウェアの作品(Dark Souls II: Scholar of the First SinDark Souls IIISekiro: Shadows Die TwiceElden Ring)と同じ形でのセーブデータ保存先となっています。(Dark Souls Remastered のみマイドキュメントにセーブデータを保存)

上のパス名にあるカッコ()内の箇所(USERNAME とか user-id)はこちらで便宜上付けた名称で、使用してる PC 環境・Steam アカウントによって異なります。そのため、各 PC 環境でそのパス名までアクセスして確認してみないとわかりません。

パス名にある(USERNAME)はログオンしているユーザー名、(user-id)は数字だけでのフォルダ名となっており、7656 から始まる 17桁の数字名 で Steam アカウント別に固有の番号となっています。

この 17桁の数字は利用している Steam アカウントの steamID64 に相当しており、STEAMID I/O などのサービスから検索することでも確認できます。

AC60000.sl2 ファイルSteam 版 ARMORED CORE VI FIRES OF RUBICON のセーブデータファイルとなっていますので、何らかの方法でこのファイルをゲーム中に定期的にコピーすることができれば、自動的にバックアップしていることになります。

注意点として 1 セーブファイルにつき 30MB もファイルサイズがあるため、自動的に複数バックアップを取っておきたい場合はストレージの空き容量と相談して計画的にバックアップすることになります。

セーブファイルをコピーするだけなのでいろいろやり方が考えられますが、今回は DS1-backup-tool を一部改造して自動的にバックアップするスクリプトを 2種類(フォルダ単位のバックアップファイル単位のバックアップ)公開します。

どちらの方法が ARMORED CORE VI FIRES OF RUBICON のセーブデータ自動バックアップ方法としてベストなのかは判断できないので、この記事ではどちらの方法でも目的のファイル・フォルダを自動的にバックアップできるようにしている形にしています。

DS1-backup-tool : フォルダ単位でセーブデータ自動バックアップ

以下、DS1-backup-tool を一部改造した Steam 版 ARMORED CORE VI FIRES OF RUBICON 専用セーブデータ自動バックアップスクリプトです。

このスクリプトは実行するとゲームが自動的に起動するようになっており、セーブデータがあるファイルが格納されているフォルダごと、指定したタイマー・世代管理(履歴数)に従って定期的にバックアップするスクリプトとなっています。また、ゲーム終了後自動的にスクリプトが停止(ただし、すぐには停止しません。詳細は こちら)するようになっています。注意点として AC60000.sl2.bak ファイルもバックアップされることになるので、1回のバックアップで 60MB ほどの容量を占有することになります。

使い方やスクリプトの基本的な内容については こちらの記事 を参照してください。

DS1-backup-tool から変更した点やユーザー側に必ず設定が必要な項目があるので、その内容についてはスクリプトの下部で説明します。


'''''''''''''''''''''''''''''''''''''''
'' END CONFIG SECTION - STOP EDITING ''
'''''''''''''''''''''''''''''''''''''''

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oWSH = CreateObject("WScript.Shell")
Set oWMI = GetObject("winmgmts:\\.\root\CIMV2")

APPDATA = oWSH.ExpandEnvironmentStrings("%APPDATA%")

'''''''''''''''''''''''''''''''''''''''
'' START CONFIG SECTION - EDIT THIS! ''
'''''''''''''''''''''''''''''''''''''''
	SavegamePath = APPDATA
	BackupPath = "(バックアップ先フォルダをフルパス名で指定)"
	SavegameFolder = "ArmoredCore6"

	MaxBackupFiles = 10				'Number of maximun backup savegame files. 25 is ok
	TimeBetweenBackups = 600000		'1000 = 1sec | 180000 = 180secs = 3 minutes

' Check if the config is OK, there must be a valid savegame on the given path...
If oFSO.FolderExists(SavegamePath & "\" & SavegameFolder) = False Then
	MsgBox "There is a problem in your config, the file:" & vbCrLf & vbCrLf & SavegamePath & "\" & SavegameFolder & vbCrLf & vbCrLf & "is missing!", vbError + vbOkOnly, "DS1 Savegame Backup Tool"
	WScript.Quit
End If

' Check if DARKSOULS is running, if not: execute it!
If isDarksoulsPlaying = False Then
	oWSH.Run "steam://rungameid/1888160"
	WScript.Sleep 60000			' Wait 30 seconds until we start the backup routine
End If

counter = 1

Do
	If isDarksoulsPlaying = False Then
		WScript.Quit			' Stop the backup-tool if DARKSOULS is closed
	End If
	oFSO.CopyFolder SavegamePath & "\" & SavegameFolder, BackupPath & "\" & counter & "-" & SavegameFolder

	counter = counter + 1
	If counter > MaxBackupFiles Then counter = 1	
	WScript.Sleep TimeBetweenBackups	' Wait until we backup the savegame again
Loop

' Retarded routine to check if DARKSOULS is executed
Function isDarksoulsPlaying()
	Set cProcess = oWMI.ExecQuery("Select * from Win32_Process")
	isDarksoulsPlaying = False
	For Each oProcess in cProcess
		If UCase(oProcess.Name) = "ARMOREDCORE6.EXE" Then isDarksoulsPlaying = True
	Next
End Function

' Credits /u/AikonCWD
' https://github.com/aikoncwd/DS1-backup-tool
' Version = 2.0

GitHub から DS1-backup-tool の DS1-backup-tool.zip をダウンロード して展開・解凍後、DS1-backup-tool.vbs ファイルをテキストエディタで開き、上記のスクリプトをコピーして書き換えて保存してください。拡張子が vbs のままであればファイル名を任意に変更しても問題ありません。以下の必要な設定を済んだ後、vbs ファイルを実行することで自動的にセーブデータのバックアップを開始します。バックアップ中の専用ウィンドウはありませんのでモニタリングはできません。(タスクマネージャーの詳細タブから wscript.exe が表示されていればバックアップ監視中の目安になります)

時間通りにバックアップを開始しないことがあったので、スクリプト起動後に指定したバックアップ先フォルダに最新のセーブファイルがバックアップされるかどうか確認してください。PC 環境によっては 30行目でゲームを起動して 31行目の WScript.Sleep で指定秒数待ってからバックアップ処理を開始するまでに、何らかの理由でアーマードコア 6 の起動に時間がかかり、指定秒数後プロセス名 armoredcore6.exe を確認できなかったことでバックアップを開始せずそのままスクリプトを終了してしまう可能性があります。そのため 31行目の WScript.Sleep を 90000(90秒)と長めに設定して、ゲームを起動してから 90秒後にバックアップ開始するように変更しています。

スクリプトを動作するのに必要な設定項目は以下の 1か所のみです。

16行目にある BackupPath のダブルクォーテーション内にダミーのテキスト文字を入力してあるので、ここにバックアップ先フォルダまでのパス名をフルパス名で入力します。(入力例:BackupPath = "D:\backup\AC6FoR\savedata"

16行目さえ間違わずに設定すればセーブデータ自動バックアップスクリプトが正常に機能するようにしています。ここを正しく設定しないとスクリプトが動作しません。

ここからは任意で変更可能な設定項目です。

19行目の MaxBackupFiles はバックアップデータの最大保持数です。ここでは 10 に設定していますが任意の数字に変更可能です。バックアップ時に最大保持数までバックアップデータ(ここではフォルダ名の先頭)に連番が振られるようになっています。

この後説明する 20行目のバックアップ間隔の時間(タイマー)を経過するごとにバックアップを開始します。最大保持数に到達すると最初のバックアップデータを上書きする形で以後ループしながらのバックアップ処理を継続します。

ちなみにバックアップスクリプトをいったん終了後、もう一度スクリプトを起動するといままでのバックアップ状況に関係なく、必ず最初からバックアップするようになっています。既存のバックアップデータがあれば順番(連番の 1番から)に上書き処理していくので、最後にバックアップしたデータが連番の 1番目に残っていた場合、次回スクリプトを起動したときに最初の上書き対象となっている点に注意してください。

20行目の TimeBetweenBackups はバックアップ間隔の時間(タイマー)です。こちらも任意のタイマーに変更可能ですが時間単位に注意してください。1000 で 1秒となっており、ここでは 600000(600秒=10分)に設定しています。

バックアップスクリプトの終了は 36~45行目にある Do~Loop 内 37行目の If 文の isDarksoulsPlaying 関数でプロセス armoredcore6.exe の有無の確認をして、プロセスがなければ 38 行目の WScript.Quit で終了することになっています。その際に 20行目の TimeBetweenBackups でバックアップ間隔の時間(タイマー)を長く設定していた場合、44行目の WScript.Sleep TimeBetweenBackups で止まり 37行目の If 文まで処理が進まないことになるため、ゲーム終了と同時にスクリプトが終了するわけではない点に注意してください。38行目の WScript.Quit を実行するまでタスクマネージャーに wscript.exe が残り続けるため、この状態ですぐにバックアップスクリプトを再度実行すると wscript.exe が複数起動した状態になります。こちらwscript.exe を強制終了させるバッチスクリプトを公開しました。

セーブデータが自動的にバックアップされているかどうか確認する方法として、この TimeBetweenBackups のタイマーを数十秒単位まで小さくすることで、バックアップ先フォルダにセーブデータが最大保持数までコピーされるかどうかテストできます。

上記設定を行えば自動バックアップ機能としては十分かと思います。

以下、今回改造した DS1-backup-tool についての変更箇所についての説明です。

DS1-backup-tool をそのまま使用した場合、パス名の設定についてフルパス名で設定する必要があり、環境変数を使ったパス名の設定には対応していません。

そこで、以下の参考サイトの情報より 10行目で ExpandEnvironmentStrings メソッドで環境変数を取得して、それを 15行目の SavegamePath に設定することで、セーブデータがあるフォルダ名までわざわざフルパス名で設定しなくても済むようにしています。

それ以外のスクリプトの内容については 以前公開した記事 より確認してください。ここでは説明しませんが フォルダ単位でバックアップ するために DS1-backup-tool からスクリプト内容を変更しています。

DS1-backup-tool : ファイル単位でセーブデータ自動バックアップ

以下、DS1-backup-tool のフォルダ単位でセーブデータ自動バックアップスクリプト を改造して、ファイル単位Steam 版 ARMORED CORE VI FIRES OF RUBICON 専用セーブデータを自動的にバックアップするスクリプトです。

これは フォルダ単位でセーブデータをバックアップしていたスクリプト から、AC60000.sl2 ファイルのみをバックアップするようにスクリプト内容を変更しています。バックアップの際に AC60000.sl2 ファイル名の先頭に連番が振られますが、それ以外は変更ありません。

フォルダ単位でセーブデータ自動バックアップスクリプト から変更した点やユーザー側に必ず設定が必要な項目があるので、その内容についてはスクリプトの下部で説明します。


'''''''''''''''''''''''''''''''''''''''
'' END CONFIG SECTION - STOP EDITING ''
'''''''''''''''''''''''''''''''''''''''

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oWSH = CreateObject("WScript.Shell")
Set oWMI = GetObject("winmgmts:\\.\root\CIMV2")

APPDATA = oWSH.ExpandEnvironmentStrings("%APPDATA%")

'''''''''''''''''''''''''''''''''''''''
'' START CONFIG SECTION - EDIT THIS! ''
'''''''''''''''''''''''''''''''''''''''
	SavegamePath = APPDATA
	BackupPath = "(バックアップ先フォルダをフルパス名で指定)"
	SavegameFolder = "ArmoredCore6"
	UserID = "(7656 から始まる 17桁の数字名(steamID64)を指定)"
	SavegameFile = "AC60000.sl2"

	MaxBackupFiles = 10				'Number of maximun backup savegame files. 25 is ok
	TimeBetweenBackups = 600000		'1000 = 1sec | 180000 = 180secs = 3 minutes

' Check if the config is OK, there must be a valid savegame on the given path...
If oFSO.FileExists(SavegamePath & "\" & SavegameFolder & "\" & UserID & "\" & SavegameFile) = False Then
	MsgBox "There is a problem in your config, the file:" & vbCrLf & vbCrLf & SavegamePath & "\" & SavegameFolder & "\" & UserID & "\" & SavegameFile & vbCrLf & vbCrLf & "is missing!", vbError + vbOkOnly, "DS1 Savegame Backup Tool"
	WScript.Quit
End If

' Check if DARKSOULS is running, if not: execute it!
If isDarksoulsPlaying = False Then
	oWSH.Run "steam://rungameid/1888160"
	WScript.Sleep 60000			' Wait 30 seconds until we start the backup routine
End If

counter = 1

Do
	If isDarksoulsPlaying = False Then
		WScript.Quit			' Stop the backup-tool if DARKSOULS is closed
	End If
	oFSO.CopyFile SavegamePath & "\" & SavegameFolder & "\" & UserID & "\" & SavegameFile, BackupPath & "\" & counter & "-" & SavegameFile

	counter = counter + 1
	If counter > MaxBackupFiles Then counter = 1	
	WScript.Sleep TimeBetweenBackups	' Wait until we backup the savegame again
Loop

' Retarded routine to check if DARKSOULS is executed
Function isDarksoulsPlaying()
	Set cProcess = oWMI.ExecQuery("Select * from Win32_Process")
	isDarksoulsPlaying = False
	For Each oProcess in cProcess
		If UCase(oProcess.Name) = "ARMOREDCORE6.EXE" Then isDarksoulsPlaying = True
	Next
End Function

' Credits /u/AikonCWD
' https://github.com/aikoncwd/DS1-backup-tool
' Version = 2.0

GitHub から DS1-backup-tool の DS1-backup-tool.zip をダウンロード して展開・解凍後、DS1-backup-tool.vbs ファイルをテキストエディタで開き、上記のスクリプトをコピーして書き換えて保存してください。拡張子が vbs のままであればファイル名を任意に変更しても問題ありません。以下の必要な設定を済んだ後、vbs ファイルを実行することで自動的にセーブデータのバックアップを開始します。バックアップ中の専用ウィンドウはありませんのでモニタリングはできません。(タスクマネージャーの詳細タブから wscript.exe が表示されていればバックアップ監視中の目安になります)

時間通りにバックアップを開始しないことがあったので、スクリプト起動後に指定したバックアップ先フォルダに最新のセーブファイルがバックアップされるかどうか確認してください。PC 環境によっては 32行目でゲームを起動して 33行目の WScript.Sleep で指定秒数待ってからバックアップ処理を開始するまでに、何らかの理由でアーマードコア 6 の起動に時間がかかり、指定秒数後プロセス名 armoredcore6.exe を確認できなかったことでバックアップを開始せずそのままスクリプトを終了してしまう可能性があります。そのため 33行目の WScript.Sleep を 90000(90秒)と長めに設定して、ゲームを起動してから 90秒後にバックアップ開始するように変更しています。

スクリプトを動作するのに必要な設定は以下 2か所です。

16行目にある BackupPath のダブルクォーテーション内にダミーのテキスト文字を入力してあるので、ここにバックアップ先フォルダまでのパス名をフルパス名で入力します。(入力例:BackupPath = "D:\backup\AC6FoR\savedata"

18行目にある UserID のダブルクォーテーション内にもダミーのテキスト文字を入力してあるので、ここには %APPDATA%\ArmoredCore6 フォルダにある 7656 から始まる 17桁の数字名(steamID64) を入力します。

16行目と 18行目さえ間違わずに設定すればセーブデータ自動バックアップスクリプトは正常に機能するようにしています。ここを正しく設定しないとスクリプトが動作しません。

以下は DS1-backup-tool のフォルダ単位でセーブデータ自動バックアップスクリプト から変更している点を軽く説明します。

19行目には自動バックアップ対象のセーブデータのファイル名である AC60000.sl2 を指定して設定しています。

フォルダ・ファイル名を格納する変数が増えたことにより 42行目では、これらの変数をアンパサンド(&)演算子を使ってパス名を間違わないように変数を連結しています。

ファイル単位でバックアップを行うため DS1-backup-tool 準拠のスクリプトとなっています。

プロセス wscript.exe 強制終了バッチスクリプト

この記事で紹介した Steam 版 ARMORED CORE VI FIRES OF RUBICONフォルダ単位バックアップスクリプト または ファイル単位バックアップスクリプト を含めたファイル拡張子 vbs ファイルの VBScript(Visual Basic Scripting Edition) を実行すると、スクリプト実行中はプロセス wscript.exe が起動して常駐する仕様ですが、ゲームを終了したときのタイミングによってはこのプロセスがしばらく残り続けるようになっています。

これはスクリプト内にある WScript.Sleep で指定したタイマー値(TimeBetweenBackups)が大きいほど、スクリプトを終了する WScript.Quit のところに進むまで残りタイマー分時間がかかるため、それまではプロセス wscript.exe が残るようになっているためです。時間が経過すれば必ず WScript.Quit を実行するので、最終的にはプロセス wscript.exe はいずれ終了することになっています。

注意点としてプロセス wscript.exe 終了を待たずにすぐにバックアップスクリプトを実行すると、wscript.exe が二重に起動した状態になってしまうため、本来 1回で済むバックアップ処理を無駄に複数回実行してしまう可能性があります。

一つのスクリプト内でゲーム終了と同時のタイミングで、プロセス wscript.exe も終了させる方法を実装することができなかったので、あまりスマートではありませんがプロセス wscript.exe の有無を判定して終了するバッチスクリプトを公開します。

タスクマネージャーの詳細タブから手動でプロセス wscript.exe を終了することでも同じ結果になりますが、以下のバッチスクリプトを使えばプロセス wscript.exe のチェックと終了をまとめてできるようにしています。

@echo off

tasklist | find "wscript.exe" > NUL
if %ERRORLEVEL% == 0 (
  echo wscript.exe found
  goto FORCED
) else (
  goto END
)

:FORCED
taskkill /F /IM wscript.exe /T > NUL
echo completed taskkill wscript.exe
goto JUMP

:END
echo wscript.exe not found

:JUMP
pause

上記のプロセスのチェックとプロセス終了バッチスクリプトは こちらのサイト を参考に作成しました。あまり複雑なことはせず極力シンプルにしています。

ゲーム終了後 に上記バッチスクリプトを 手動 で実行してください。

バッチスクリプトを実行すると、3行目でプロセス wscript.exe があるかどうか確認を行い、プロセス wscript.exe が見つかった場合、5行目でメッセージ「wscript.exe found」を表示、6行目の goto 文とラベルで 11行目まで飛び、12行目の taskkill でプロセスの強制終了処理とメッセージ「completed taskkill wscript.exe」を表示してバッチスクリプトを終了します。

プロセス wscript.exe が見つからなかった場合は 8行目の goto 文とラベルで 16行目まで飛び、17行目のメッセージ「wscript.exe not found」を表示して、何も処理せずバッチスクリプトを終了します。