注記
MOD ローダーがゲームに統合されたため、このプロジェクトは必要なくなりました。新しい/異なる機能のコードを含む「公式」バージョンについては、次の fowkr https://github.com/jakobharder/anno1800-mod-loader を参照してください。
Anno 1800 用の唯一の MOD ローダーは、解凍された RDA ファイルのロード、XML 自動マージ、DLL ベースの MOD をサポートしています。
ファイルサイズの制限はありません。もう再梱包する必要はありません。更新後に壊れる可能性は低くなります (一般的に、MOD は更新のたびに動作し続けるはずです、YMMV)。
これにより、XPath を使用してゲームの XML ファイルが変更されます。これにより、メガバイトの XML ファイルを処理する代わりに、絶対に必要な MOD にのみ変更を加えることが容易になり、可能になります。
ローダーのインストールがいかに簡単かを示す短いクソビデオ。
MODは別途インストールする必要があります。
リリース ページに移動し、最新リリースからloader.zipをダウンロードします。
Anno1800.exe がある場所にコンテンツを解凍します。
Uplay のデフォルトのパスは
C:Program Files (x86)UbisoftUbisoft Game LaunchergamesAnno 1800BinWin64
です。
python35.dll を上書きするように求められますが、そのまま受け入れます。
おそらく VS 2019 Redist https://aka.ms/vs/16/release/VC_redist.x64.exe も必要です。
基本的にはそれだけです。
Mod は常にアルファベット順にロードされます。 Mod は次のいずれかからロードされます。
C:Program Files (x86)UbisoftUbisoft Game LaunchergamesAnno 1800mods
デフォルトの Uplay パスを想定しています。これは、Anno 1800 のインストール時に選択した場所によって異なります。mods
フォルダーが含まれている場合は、Documents フォルダー。 Win + R を使用し、 shell:PersonalAnno 1800
と入力してこれにアクセスできます。ドキュメント内の
mods
ゲームのインストール ディレクトリよりも優先されます。つまり、ドキュメントの場所にmods
フォルダーがある場合、MOD はゲーム ディレクトリからロードされなくなります。
より経験豊富なユーザーの場合は、
mklink
で作成されたシンボリックリンクをたどります (その結果、MOD のさまざまなリポジトリを管理する方が簡単になります)。
MOD ローダーを使用した MOD 作成については、以下に簡単に説明します。ズーム拡張モジュールの例については、 examples
ディレクトリを参照してください。
以前のアノ ゲームでは、抽出されたファイルをロードするのではなく、ディスクからロードするようにゲームに指示する方法がありました。
RDAコンテナから。これにより作業は簡単になりましたが、大きな XML ファイルの変更を処理するにはまだ良い方法ではありません。
この Anno 1800 MOD ローダーは、XML に簡単にパッチを適用して、ほぼ望みどおりのことを実現するためのいくつかの単純な「コマンド」をサポートしています。
ステップ 1) Anno 1800/mods 内に MOD 用のディレクトリを設定します。次の手順では、ディレクトリに「myMod」という名前を付けていることを前提としています。
ステップ 2) myMod 内で、ベース ゲームが使用する正確なファイル構造を再作成します。パッチを適用したassets.xmlファイルは、次のパスの下にある必要があります: Anno 1800/mods/myMod/data/config/export/main/asset/assets.xml
ステップ 3) XML ドキュメントは次の構造を持つことが想定されます。
< ModOps >
< ModOp >
<!-- Whatever Change you want to do -->
</ ModOp >
</ ModOps >
必要なだけ
<ModOp>
指定でき、単一の MOD 内に異なるオリジナルのパッチ ファイルを複数持つことができます。
ステップ 1) Path 引数を使用して、XPath で編集する XML ノードを検索して選択します。
例:
< ModOp Path = " /Templates/Group[Name = 'Objects']/Template[Name = 'Residence7']/Properties " >
アセット ファイルの場合は、GUID 引数を使用することもできます。これにより、指定された GUID を持つアセットのすべての子ノードが xPath の新しいルートとして選択され、コードがすっきりし、パフォーマンスの点でもはるかに高速になります。
例:
Standard way: < ModOp Path = " //Asset[Values/Standard/GUID = '1137']/Values/Standard/Name " >
Better, with GUID arg: < ModOp GUID = ' 1337 ' Path = " /Values/Standard/Name " >
ステップ 2) ModOp のタイプを指定して、選択したノードを変更します。
現在サポートされているタイプ:
- Merge Replaces all given child nodes or Arguments
- Remove Removes the selected Node
- Add Adds inside the selected Node
- Replace Replaces the selected Node
- AddNextSibling Adds a sibling directly after the selected node
- AddPrevSibling Adds a sibling directly in front of the selected node
これは単なる簡単な初期実装 (約 3 時間) であり、それを改善する方法やまったく別のことを行う方法についての議論に非常にオープンです。
ステップ 3) ModOp 内に追加、マージ、または置換として使用する XML コードを追加します。例:
< ModOp Type = " replace " GUID = ' 1337 ' Path = " /Values/Standard/Name " >
< Name >ThisIsATestNameForGUID1337</ Name >
</ ModOp >
この ModOp は、GUID 1337 のアセットの /Values/Standard/Name の下にあるノードを「
<Name>ThisIsATestNameForGUID1337</Name>
」に置き換えます。
Include
命令を使用すると、XML パッチを複数のファイルに分割できます。
< ModOps >
<!-- ModOps applied before the include -->
< Include File = " even-more-modops.include.xml " />
<!-- ModOps applied after the include -->
</ ModOps >
File
インクルードを行う XML ファイルに対する相対的なファイル パスを取得します。
ゲーム内に対応するものが存在しない XML ファイルは通常、間違いであり、ログにエラーが記録されます。それを防ぐには、拡張子*.include.xml
を使用してください。
それ以外の場合、含まれる XML パッチは通常の XML パッチと同じ方法で処理されます。インクルードのネストがサポートされています。
これをゲームのパスを含む mod フォルダーに置きmods/new-zoom-level/data/config/game/camera.xml
になるようにします。
デフォルトの uPlay インストールの mods フォルダーは
C:Program Files (x86)UbisoftUbisoft Game LaunchergamesAnno 1800mods
にある必要があります。
< ModOp Type = " add " Path = " /Normal/Presets " >
< Preset ID = " 15 " Height = " 140 " Pitch = " 0.875 " MinPitch = " -0.375 " MaxPitch = " 1.40 " Fov = " 0.56 " />
</ ModOp >
< ModOp Type = " merge " Path = " /Normal/Settings " >
< Settings MaxZoomPreset = " 15 " ></ Settings >
</ ModOp >
examples
ディレクトリにはさらに多くのサンプルがあります。
デバッグは不可能です。ゲームは Denuvo と VMProtect を使用しています。私はデバッグを可能にする独自のツールを持っていますが、それらを公に共有するつもりはありません。
Anno 1800/logs/mod-loader.log
で、ノードの欠落、間違ったパス、または認識されないノード テストによって発生したエラーに関する printf 別名デバッグ ログを読むことができます。
作成した「パッチ」が元のゲーム ファイルにどのような影響を与えるかをテストするには、ゲームがロードする内容をシミュレートするxml-test
使用することもできます。
xml-test game_camera.xml patch.xml
これにより、game_camera.xml に patch.xml がパッチされ、結果が patched.xml ファイルとして現在のディレクトリに書き込まれます。
元の空白はほぼ同じであるはずなので、差分ツールを使用して何が変更されたかを正確に確認できます。
他のファイルタイプは明らかに「マージ」できないため、そのファイルを含む最後の MOD のバージョンをロードするだけです。 (MOD はアルファベット順にロードされます)。リソースについては、Anno 1800/data フォルダーを使用することを強くお勧めします。
Bazel と Visual Studio 2022 が必要です。それだけで十分です。
azure-pipelines.yml
をチェックアウトして、そこでどのように行われるかを確認できます。
成功への簡単なステップ:
set BAZEL_VC=C:Program Files (x86)Microsoft Visual Studio2022BuildToolsVC
bazel build //libs/python35:python35.dll
使用して .dll をビルドしますXML 操作の新機能に取り組みたい場合は、テストに xmltest を使用できます。実際のファイルローダーと同じコードを使用しているためです。