論理と、幻想と。

ゲームやガジェットが好きなITスペシャリストが作ったものや考えたことについてダラダラ書きます

FFXIVの設定ファイルの複製および同期

はじめに

FFXIVのゲーム設定のうち、HUDレイアウトやアイテムの並び順、ギアセットなどはクライアントPC側に保存されています。これらをコピーすることで、複数のキャラクターで同じHUDやホットバーレイアウト、マクロを使用することができます。

PC版でのみ使用可能な方法で、また私はSteam版クライアントを使用していないので同じように使えるかどうかはわかりません。

で、「よくわからないのにやってみてよくわからないことになった」と言われても困るので、適宜Google先生に質問しながら自己責任でやってください。


キャラクターとディレクトリの紐付け

各設定ファイルはユーザディレクトリ以下、Documents\My Games\FINAL FANTASY XIV - A Realm Reborn にキャラクターごとに保存されています。

キャラクターごとにディレクトリが分かれているわけですが、FFXIV_CHR004000000XXXXXXXX のような名前となっており、パッと見てどのディレクトリがどのキャラクターかを識別するのは人類にはまだ早すぎる感じがします。ファイルの最終更新日やlogディレクトリ内のデータを参考に識別すると良いかと思います。

logファイルには特殊文字も含まれていて普通のテキストエディタなんかだとやはり人類に早すぎる感がしますが、UTF-8を指定して開けばそれなりに読めます。もっとも、タイムスタンプだけ見れば問題ないです。そのキャラクターで最後にログインした時間と最新のlogファイルの作成時間が一致しているはずです。

ディレクトリ内に #main_charactor みたいな空ファイル作っておくと、以降の識別が簡単になります。


ファイル構造

FINAL FANTASY XIV - A Realm Reborn
├ downloads(パッチDL用一時フォルダ)
│ FFXIV_CHR004000000XXXXXXXX(キャラクター1のデータ)
│  ├ log(ログファイル)
│  ├ ACQ.DAT
│  ├ ADDON.DAT
│  ├ COMMON.DAT
│  ├ CONTROL0.DAT
│  ├ CONTROL1.DAT
│  ├ GEARSET.DAT
│  ├ GS.DAT
│  ├ HOTBAR.DAT
│  ├ ITEMFDR.DAT
│  ├ ITEMODR.DAT
│  ├ KEYBIND.DAT
│  ├ LOGFLTR.DAT
│  ├ MACRO.DAT
│  ├ LOGFLTR.DAT
│  └ UISAVE.DAT
├ FFXIV_CHR004000000XXXXXXYY(キャラクター2のデータ。詳細は割愛)
├ screenshot(デフォルトのスクリーンショット保存用フォルダ)
├ FFXIV.cfg(ゲーム全般設定)
├ FFXIV_BOOT.cfg(恐らくランチャー設定)
├ FFXIV_CHARA_01.dat(保存したキャラクターの外見データ:スロット1)
├ FFXIV_CHARA_02.dat(保存したキャラクターの外見データ:スロット2)
├ ...
├ FFXIV_CHARA_XX.dat(保存したキャラクターの外見データ:スロットXX)
└ MACROSYS.dat(すべてのキャラクターに共通のマクロ)

ファイルの分類

私は2台の異なるPCで、複数のキャラクターAとBを動かしています。どちらのキャラクターで、どちらのPCからログインしても同じフィーリングで操作できる状態にしておきたいわけです。

設定ファイルは中身に応じて以下のように分類できます。

  • キャラクターAに固有の情報
  • キャラクターBに固有の情報
  • 1台目のPCに固有の情報
  • 2台目のPCに固有の情報
  • どちらにも当てはまらないもの(キャラクター・PC問わず共通の情報として扱う)

私は各ファイルを以下のように分類し運用しています。

ファイル名 中身 キャラクター固有 環境固有
ACQ.DAT よくわかっていない -
ADDON.DAT UI・HUD・ウィンドウ位置などの設定 -
COMMON.DAT キャラクターコンフィグ情報 -
CONTROL0.DAT キーボード・マウスモードの操作設定 -
CONTROL1.DAT ゲームパッドモードの操作設定 -
GEARSET.DAT ギアセット情報 -
GS.DAT よくわかってない -
HOTBAR.DAT ホットバー内のアクション等の配置 -
ITEMFDR.DAT かばん内のアイテム配置か何かだと思う -
ITEMODR.DAT せいとん実行時のソートオーダー -
KEYBIND.DAT キーバインド設定 -
LOGFLTR.DAT ログフィルタ設定 -
MACRO.DAT マクロ(キャラクター専用タブ) - -
UISAVE.DAT 保存したUIレイアウトのデータ -
../MACEROSYS マクロ(全てのキャラクターで共通) - -

キャラクターごとにアイテムの保持状況やホットバーの中身などが異なります。特にギアセットのデータがキャラクターごとにローカルに保存されている点に注意が必要です。

また、私は1台目のPCと2台目のPCでは、画面解像度や接続しているデバイスが違います。なのでUIやキーバインドは環境それぞれに設定をしています。

マクロは2キャラクターで共通にしています。


複製する

単純に、キャラクターAからキャラクターBへホットバー情報などを移したいだけであれば、

  • キャラクターAのディレクトリで該当するファイルをコピー
  • キャラクターBのディレクトリに貼り付け

でおしまいです。必要なファイルだけコピーすれば良いです。


自動同期する

私の場合もそうでしたが、多くの人の場合、やりたいのはこういうことだと思います。

  • 1台目のPCでホットバーやギアセットを操作したら、2台目のPCにも自動的に反映させる
  • キャラクターAでHUDレイアウトを操作したら、キャラクターBにも自動的に反映させる

都度コピーするのは面倒なので、これらを同時に実現します。

シンプルにクラウドストレージでファイルを同期し、シンボリックリンクで運用しちゃいましょう。丸ごとバックアップしてから実施してください。

補足

シンボリックリンクとは

ファイルのショートカットはイメージしやすいかと思います。これと近いけれど少し性質が異なります。

そもそも、ファイルの実体(中身)とファイル名はそれぞれ独立したものです。 file-a.txt というファイル名を与えたファイルに対して、その中身がストレージ上のどこに保存されているか、というのはOS(ファイルシステム)が紐付けています。

シンボリックリンクは、例えば file-a.txt の実体に対して、もう一つ file-b.txt という参照元を作ります。file-b.txtfile-a.txt へのショートカットではなく、ちゃんと file-b.txt として開くことができるファイルです。しかし中身は file-a.txt と同じです。参照先にあるファイルの実体は同じなので、file-b.txt を更新すると file-a.txt も更新されています。

今回やろうとしているFFXIVの設定で言うと、ゲームクライアントが読み込むファイルをシンボリックリンクにします。ゲームクライアントはMy Gamesの中にあるファイルを参照しますが、実際に読み込まれるファイルの実体は別の場所に置いてある設定ファイルになります。


同期に用いるクラウドストレージ選定

PC間の同期にはDropboxやOneDriveようなクラウドストレージサービスを使います。何でもいいですが、シンボリックリンクのリンク元として扱える必要があります。

Googleドライブはシンボリックリンクに対応できないのでNGでした。リンク元・リンク先のどちらもGoogleドライブ内である場合にしか使えないとかなんとか。私はDropboxでやってます。


オリジナルの参照元ディレクトリの作成

まずは前述のファイル分類にしたがって、クラウドストレージの管理領域内に以下のような階層構造のディレクトリを作ります。

ffxiv_config
├ first_character(キャラクターA固有の設定)
├ second_character(キャラクターB固有の設定)
├ env_desktop(デスクトップPCで使う環境設定)
├ env_note(ノートPCで使う環境設定)
└ env_shared(共通設定)

私の場合はデスクトップPCとノートPCとで使い分けているので上記のようなネーミングにしましたが、識別できれば何でもいいでしょう。キャラクター名でも何でも好きな名前を付ければいいと思います。

キャラクター設定ファイルの移動

各キャラクター固有のデータを、それぞれのキャラクター用のディレクトリに移動します。

ffxiv_config
├ first_character(キャラクターA固有の設定)
│  ├ GEARSET.DAT
│  ├ GS.DAT
│  ├ HOTBAR.DAT
│  ├ ITEMFDR.DAT
│  ├ ITEMODR.DAT
│  └ LOGFLTR.DAT
├ second_character(キャラクターB固有の設定)
│  ├ GEARSET.DAT
│  ├ GS.DAT
│  ├ HOTBAR.DAT
│  ├ ITEMFDR.DAT
│  ├ ITEMODR.DAT
│  └ LOGFLTR.DAT
├ env_desktop
├ env_note
└ env_shared(共通設定)

環境ごとの設定ファイルの移動

それぞれの環境で調整した設定ファイルを移動します。当然ながら、デスクトップPC用の設定ファイルはデスクトップPCから、ノートPC用の設定ファイルはノートPCから、それぞれ持ってきます。

ffxiv_config
├ first_character
├ second_character
├ env_desktop(デスクトップで使う環境設定)
│  ├ ACQ.DAT
│  ├ ADDON.DAT
│  ├ COMMON.DAT
│  ├ CONTROL0.DAT
│  ├ CONTROL1.DAT
│  ├ KEYBIND.DAT
│  └ UISAVE.DAT
├ env_note(ノートPCで使う環境設定)
│  ├ ACQ.DAT
│  ├ ADDON.DAT
│  ├ COMMON.DAT
│  ├ CONTROL0.DAT
│  ├ CONTROL1.DAT
│  ├ KEYBIND.DAT
│  └ UISAVE.DAT
└ env_shared

共通ファイルの移動

残りのファイルは全ての環境で共通するファイルだと思うので、そいつらを移動します。私の場合はキャラクターごとにマクロを使い分けることがないので、どちらのキャラクターでログインしても同じマクロを使えるようにしています。

ffxiv_config
├ first_character
├ second_character
├ env_desktop
├ env_note
└ env_shared(共通設定)
   ├ MACRO.DAT
   └ MACROSYS.DAT

シンボリックリンクの作成

FFXIVのクライアントがクラウドストレージ上にあるファイルを設定ファイルとして読み込めるよう、mklinkコマンドでシンボリックリンクを作成します。mklinkコマンドの実行には管理者権限が必要です。また、リンク先にファイルがあるとリンク作成できないため、オリジナルの設定ファイル群はバックアップも兼ねてどこかに移動しておいてください。

私はプレイ環境を作り直しても簡単に同じことが出来るようにしたかったので、しょーもないスクリプト書いてBATファイルとしてffxiv_config直下に置いています。サンプルだけ載せておきます。適宜それっぽく書き換えて、BATファイルを管理者として実行すればOKです。

@echo off
cd /d %~dp0
chcp 65001

rem 現在の環境(対応するディレクトリ)
set current=env_desktop

rem キャラクター固有設定のフォルダ名とキャラクターのID
set char_1=first_character
set char_1_id=FFXIV_CHR004000000XXXXXXX
set char_2=second_character
set char_2_id=FFXIV_CHR004000000YYYYYYY

rem FFXIV設定のベースディレクトリ
set xivbase="C:\Users\YOURNAME\Documents\My Games\FINAL FANTASY XIV - A Realm Reborn"

rem キャラクター個別の設定フォルダがなかったら作っておく
if not exist %xivbase%\%char_1_id% mkdir %xivbase%\%char_1_id%
if not exist %xivbase%\%char_2_id% mkdir %xivbase%\%char_2_id%

rem システムマクロ設定のリンク作成
mklink %xivbase%\MACROSYS.DAT env_shared\MACROSYS.DAT

rem 環境個別の設定ファイルのリンク作成
cd %current%
for %%f in (*.DAT) do (
    mklink %xivbase%\%char_1_id%\%%f %%f
    mklink %xivbase%\%char_2_id%\%%f %%f  
)
cd /d %~dp0

rem キャラクターA用の設定ファイルのリンク作成
cd %char_1%
mklink %xivbase%\%char_1_id%\MACRO.DAT env_shared\MACRO.DAT
for %%f in (*.DAT) do (
    mklink %xivbase%\%char_1_id%\%%f %%f
)
cd /d %~dp0

rem キャラクターB用の設定ファイルのリンク作成
cd %char_2%
mklink %xivbase%\%char_2_id%\MACRO.DAT env_shared\MACRO.DAT
for %%f in (*.DAT) do (
    mklink %xivbase%\%char_2_id%\%%f %%f
)
cd /d %~dp0

pause

そんじゃーね。