2023年3月26日日曜日

チラシの裏シリーズ:Windowsのシンボリックリンク

 だらだらしていたら、もう2023年ですよ。 前回の更新が2022年5月なんであっという間に1年経っちゃいますね。

ということで今回はチラシの裏シリーズ、「Steamで昔のゲームをやったらセーブがうまくいかない」の巻です。

最近Dead Red Redemption IIばかりやっていたのでそろそろ違うゲームでもたまにはしてみるかなとSteamの整理を始めたら、昔買ったままになっていたのが目に止まり、少しやってみるかとインストールするもセーブができない。

いや、困った。やろうと思ったのは、「Puzzler World 2」というパズル物で、パズル物を毎回最初からプレイするなんてありえないでしょ?ってもんです。

で、本題ですが、シンボリックリンクって簡単に言えば別々のフォルダをアクセスしているのに一つの同じファイルを扱えるようにすることができる機能です。フォルダ参照、ファイル参照、どちらもできるようですが今回はフォルダ参照を使います。

例えば、「フォルダ1」に「ファイル1」というファイルがあったとすると、「フォルダ2」にも「ファイル1」があるように見せることができます。これは「フォルダ1」の「ファイル1」を編集しても「フォルダ2」の「ファイル1」を編集しても、全く同じ「ファイル1」が編集されることになります。

な… 何を言っているのかわからねーと思うが、おれも最初は何を言っているのかわからなかった… 頭がどうにかなりそうだった… シンボリックリンク…

で本題2ですが、「Puzzler World 2」はセーブファイルを作ると

C:\Users\(ユーザー名)\OneDrive\ドネュメント\DIgital Games Factory\Puzzler World 2 Steam

って文字化けした場所にファイルを作るくせに、読み込むときには正しい、

C:\Users\(ユーザー名)\OneDrive\ドキュメント\DIgital Games Factory\Puzzler World 2 Steam

のファイルを読もうとするんですよね。

Why Japanese people!、最初から間違えるなら最後まで間違えろよ!

ってもんです。まあ、日本人のせいじゃな・・・、いや日本語が悪いのか?

この「ドネュメント」問題は海外ゲームあるあるですが、今回の本題はこれじゃないのでサラッと流します。ちなみに、(ユーザー名)はそれぞれの環境によって違うので読み替えてください。

で、本題3ですが(笑)、やりたいことは、

C:\Users\(ユーザー名)\OneDrive\ドネュメント\DIgital Games Factory\Puzzler World 2 Steam

にある、「savegamedata」というファイルを、

C:\Users\(ユーザー名)\OneDrive\ドキュメント\DIgital Games Factory\Puzzler World 2 Steam

にもあるように見せたいので、PowerShellを開いて、

New-Item -Value 'C:\Users\nitok\OneDrive\ドネュメント\DIgital Games Factory\Puzzler World 2 Steam' -Path 'C:\Users\nitok\OneDrive\ドキュメント\DIgital Games Factory' -Name 'Puzzler World 2 Steam' -ItemType SymbolicLink

とするだけです。いろいろ言いたいことはあると思うのですがチラシの裏なんてこんなもんです。

ちなみにこの技は、ハードディスクを使っているとアクセスが遅くなる部分だけ、SSDなどにしれっと参照するようにして、速度を速くするのにも使えます。

例えば、とあるゲームでは広大なマップを移動するときに、カクッ、カクッ、っとなるのですが、これはマップを移動するときに発生するハードディスクにあるセーブデータへのアクセスが原因のため、このフォルダをSSDに持っていくことで防ぐことができます。まあ、チラシの裏なんで核心には全く触れていないですが・・・。

以上、チラシの裏でした。


・・・

忘れないように復習しておこう。PowerShellの管理者権限を使ってやる場合。(Windows11ではターミナルって名前になってた。)

ファイル参照の例:Cドライブのnonnonフォルダにある、SL_test.txtファイルに対して、DドライブのnonnonフォルダにシンボリックリンクファイルSL_test2.txtを作る例。「D:\nonnon\SL_test2.txt」ファイルをアクセスすると、「C:\nonnon\SL_test.txt」ファイルをアクセスしているのと同等になります。

New-Item -Value 'C:\nonnon\SL_test.txt' -Path 'D:\nonnon' -Name 'SL_test2.txt' -ItemType SymbolicLink

フォルダ参照の例:Cドライブのnonnonフォルダに対して、Dドライブのnonnonフォルダの中にあるシンボリックリンクフォルダC_nonnonを作る例。「D:\nonnon\C_nonnon」フォルダをアクセスすると、「C:\nonnon」フォルダをアクセスしているのと同等になります。

New-Item -Value 'C:\nonnon\' -Path 'D:\nonnon' -Name 'C_nonnon' -ItemType SymbolicLink

シンボリックリンクの削除はどちらもエクスプローラーから可能。シンボリックリンクを削除しても参照先の本物は消えません。