Примечание
Загрузчик модов теперь интегрирован в игру, поэтому этот проект больше не требуется. «Официальную» версию с кодом для новых/других функций см. по следующему адресу https://github.com/jakobharder/anno1800-mod-loader.
Единственный загрузчик модов для Anno 1800, поддерживает загрузку распакованных файлов RDA, автоматическое объединение XML и моды на основе DLL.
Нет ограничений на размер файла. Больше никакой переупаковки. Меньше вероятность поломок после обновлений (обычно мод должен продолжать работать после каждого обновления, YMMV).
Это изменяет XML-файлы игры с помощью XPath, что упрощает и делает возможным внесение в мод только тех изменений, которые вам абсолютно необходимы, вместо обработки мегабайтов XML-файлов.
Короткое дерьмовое видео, показывающее, как легко установить загрузчик.
Моды нужно устанавливать отдельно.
Перейдите на страницу выпусков и загрузите loader.zip из последней версии.
Разархивируйте содержимое в папку, где находится Anno1800.exe.
Путь по умолчанию в Uplay —
C:Program Files (x86)UbisoftUbisoft Game LaunchergamesAnno 1800BinWin64
Вам будет предложено перезаписать python35.dll, просто примите это.
Вероятно, вам также понадобится Redist VS 2019 https://aka.ms/vs/16/release/VC_redist.x64.exe.
И это в основном все.
Моды всегда будут загружаться в алфавитном порядке. Моды загружаются либо из:
C:Program Files (x86)UbisoftUbisoft Game LaunchergamesAnno 1800mods
используя путь Uplay по умолчанию. Это зависит от места, которое вы выбрали при установке Anno 1800.mods
. Вы можете получить к этому доступ, используя Win + R и введя shell:PersonalAnno 1800
mods
в документах имеют приоритет над каталогом установки игры, то есть, если у вас есть папкаmods
в папке с документами, моды больше не будут загружаться из каталога игры.
Для более опытных пользователей будут использоваться символические ссылки, созданные с помощью
mklink
(что упрощает управление различными репозиториями модов).
Краткое введение в создание модов с помощью загрузчика модов приведено ниже. Пример мода расширения масштаба см. в каталоге examples
.
В предыдущих играх Anno был способ указать игре загружать извлеченные файлы с диска вместо их загрузки.
из контейнера RDA. Хотя это и облегчило задачу, это по-прежнему не лучший способ обработки больших XML-файлов.
Этот загрузчик модов Anno 1800 поддерживает несколько простых «команд», позволяющих легко исправить XML и добиться практически всего, чего вы хотите.
Шаг 1) Создайте каталог для вашего мода внутри Anno 1800/mods. В следующих шагах предполагается, что вы назвали свой каталог «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>
, сколько захотите, и иметь несколько файлов патчей для разных оригинальных файлов в одном моде.
Шаг 1) Найдите и выберите узел XML, который вы хотите редактировать с помощью XPath, используя аргумент Path.
Пример:
< 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) Добавьте XML-код, который вы хотите добавить, объединить или заменить внутри ModOp. пример:
< ModOp Type = " replace " GUID = ' 1337 ' Path = " /Values/Standard/Name " >
< Name >ThisIsATestNameForGUID1337</ Name >
</ ModOp >
Этот ModOp заменит узел в /Values/Standard/Name актива с GUID 1337 на: "
<Name>ThisIsATestNameForGUID1337</Name>
"
Вы можете разделить свои исправления XML на несколько файлов, используя инструкции Include
.
< 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. Поддерживается вложенность включений.
Поместите это в папку мода с путем к игре, чтобы это было в mods/new-zoom-level/data/config/game/camera.xml
Папка модов в стандартной установке uPlay должна находиться по адресу
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, у меня есть свои инструменты, позволяющие ее отлаживать, но я не буду делиться ими публично.
Вы можете прочитать printf, также известный как журнал отладки, о любых ошибках, вызванных отсутствующими узлами, неправильными путями или нераспознанными тестами узлов в
Anno 1800/logs/mod-loader.log
Чтобы проверить, что написанный вами «патч» делает с исходным файлом игры, вы также можете использовать xml-test
, который имитирует то, что будет загружаться в игре.
xml-test game_camera.xml patch.xml
Это исправляет game_camera.xml с помощью patch.xml и записывает результат в виде файла patched.xml в текущем каталоге.
Исходные пробелы должны быть практически такими же, поэтому вы можете использовать какой-нибудь инструмент сравнения, чтобы точно увидеть, что изменилось.
Другие типы файлов, очевидно, не могут быть «объединены», поэтому мы просто загружаем версию последнего мода, в котором есть этот файл. (Моды загружаются по алфавиту). Для ресурсов настоятельно рекомендуется использовать папку 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 для тестирования. Поскольку здесь используется тот же код, что и в загрузчике файлов.