FF11のログから日記

記載されている会社名・製品名・システム名などは、各社の登録商標、もしくは商標です。

エリア移動後に地形が真っ黒になる問題への対処

はじめに

プレイ環境をWindows10からWindows11に移行したところ、エリア移動後に地形が真っ黒になりキャラクターやオブジェクトしか表示されなくなる問題が発生するようになりました。
数時間で起きる場合もあれば、十数時間で起きる場合もあり、再現時間については規則性はありませんが、再現自体は「いつか起きるという」確実性があります。

困るので対処方法を模索しました。

この手順でのpol.exeに対するフラグ変更は自己責任でおねがいします。

原因推定

FinalFantasy 11 Configの設定を色々いじって検証した結果、次のような仮説にはなりました。

テクスチャ周りでメモリを沢山利用するような設定にすると発生しやすくなる。

情報収集

海外の掲示板に同様の事象についての情報がありました。
それらの情報からもメモリ不足が理由ですが、その不足というのはFF11は32bitアプリケーションで2Gまでしかメモリを使えない状態でコンパイルされているということが、理由としてあげられていました。
対応するために、専用のパッチプログラムもどうも落ちていましたが、素性のわからないプログラムを動かすのは良くないので、どういう対処を行っているかを調べたところ次のキーワードが見つかりました。

editbin /largeaddressaware

オブジェクトが 2 ギガバイトを超えるアドレスをサポートするかどうかを指定します。

learn.microsoft.com

このフラグを有効にすると、32bitアプリケーションでも2Gではなく4G(厳密にはユーザプロセスとしては3G)まで利用できるようになります。

EditBinに関する情報

Visual Studio LARGEADDRESSAWAREオプション - hishidaの開発blog

/LARGEADDRESSAWARE (大きいアドレスの処理) | Microsoft Learn

32 bit アプリケーションで発生するメモリ不足に関連するエラーについて | Japan Developer Support Core Team Blog

4-Gigabyte Tuning - Wikipedia

具体的なフラグの付与手順

VisualStudio 2022のインストール

以下のURLからVisualStuido 2022をインストールします。
インストール時に次のパッケージは選択しました。(多分不要なものも多い)

  • C++によるゲーム開発
  • Windowsアプリケーション開発
  • C++によるデスクトップ開発
  • .NETデスクトップ開発

EditBinコマンドの実行確認

以下の実施はスタートメニューから「x86 Native Tools Command Prompt for VS 2022」を右クリックメニューの「管理者として起動」で実施

変更前の状態確認

cd "C:\Program Files (x86)\PlayOnline\SquareEnix\PlayOnlineViewer"
dumpbin /headers pol.exe
C:\Program Files (x86)\PlayOnline\SquareEnix\PlayOnlineViewer>dumpbin /headers pol.exe
Microsoft (R) COFF/PE Dumper Version 14.40.33808.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file pol.exe

PE signature found

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
             14C machine (x86)
               4 number of sections
        4E3BC514 time date stamp Fri Aug  5 19:25:24 2011
               0 file pointer to symbol table
               0 number of symbols
              E0 size of optional header
             103 characteristics
                   Relocations stripped
                   Executable
                   32 bit word machine

OPTIONAL HEADER VALUES
(以下省略)

この時点では次の記載がない。

Application can handle large (>2GB) addresses 

EditBinコマンドによるフラグの変更

cd "C:\Program Files (x86)\PlayOnline\SquareEnix\PlayOnlineViewer"
editbin.exe /LARGEADDRESSAWARE pol.exe

※pol.exeのバックアップ用のコピーは別途実施しています。

変更後の状態確認

C:\Program Files (x86)\PlayOnline\SquareEnix\PlayOnlineViewer>dumpbin /headers pol.exe
Microsoft (R) COFF/PE Dumper Version 14.40.33808.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file pol.exe

PE signature found

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
             14C machine (x86)
               4 number of sections
        4E3BC514 time date stamp Fri Aug  5 19:25:24 2011
               0 file pointer to symbol table
               0 number of symbols
              E0 size of optional header
             123 characteristics
                   Relocations stripped
                   Executable
                   Application can handle large (>2GB) addresses  ★★★ こちらが追加されている
                   32 bit word machine

OPTIONAL HEADER VALUES
(以下省略)

次回実行用のバッチの用意

当然ながらpol.exeがFF11のバージョンアップで更新された場合にはフラグは元に戻るので、再実施する必要があるためBAT化しました。

cd "C:\Program Files (x86)\PlayOnline\SquareEnix\PlayOnlineViewer" 
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807\bin\Hostx86\x86\editbin.exe" /LARGEADDRESSAWARE pol.exe
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807\bin\Hostx86\x86\dumpbin.exe" pol.exe

まとめ

こちらの対応後数日経過しましたが、発生しなくなりました。
しかし、もう少し様子は見たいと思っています。というのも、これで治るのも理由に説明がつかないためです。
メモリを見る限り2Gオーバーも使ってはいません。(瞬間的に使うようなタイミングがある?)

ゲームの近況

ソーティでもたまにしつつの、のんびり生活です。 プライム武器は遥か彼方の目標です。