Модифицируем Anno 1800, краткий гайд

Да, у этой игры тоже есть коммьюнити которое занимается моддингом, а структура у игры невероятно простая для редактирования даже без знания языков программирования. Правда в предыдущих частях серии с этим было немного проще.

Список необходимого для старта

Первое и самое главное - mod loader (ссылка на github проекта). Он позволяет загружать свои моды из директории mods в корне игры. Пример устройства мода можно взять на nexusmods.

Второе - rdaexplorer (github). Данный софт позволяет распаковать игровые архивы.

Assets Viewer (github) - помогает просматривать id предметов, зданий и различных групп без открытия xml напрямую.

Третье можно скачать, но не обязательно - это лаунчер для модов что-то вроде mod organizer 2 который используется игроками в Анно (github) для запуска игры.

Для ленивых есть визуальный редактор (часть интерфейса на немецком, можете автору помочь с переводом) - ссылка на nexusmods. Интерфейс тяжеловат, но имеет очень много функций для тех, кто не желает разбираться с xml структурой данных игры.

Для открытия и поиска по огромным xml файлам я использую firstobject, а VS Code для редактирования своих минимодов и локализации других.

Коротко о структуре файлов

Вся основная информациия о всех игровых предметах, зданиях и прочих объектах хранится в огромном assets.xml по пути data\config\export\main\asset\assets.xml.

С каждым новым контентным дополнением обычно в игру добавлялся новый rda архив в котором данный файл и изменяется. На данный момент чтобы получить полный список всего что есть в игре нужно смотреть этот файл из архива data23.rda. В директориях формата dlc01 обычно хранятся анимации, модели, текстуры и прочие ресурсы. Однако если старые механики получают обновления, то и старые архивы обновляются тоже.

Для редактирования моделей при желании умельцы сделали конвертер из проприетарного rdm в glTF (ссылка на github)

data\config\gui содержит файлы локализаций для 11 официальных языков.

Создание простого мода

Начнем с начала. После создания новой директории в Anno 1800\mods там желательно создать файл modinfo.json c содержимым

{ "Version": "0.0", "ModID": "название_мода_без_спецсимволов_на_английском", "IncompatibleIds": [ "Например если ваш мод будет несовместим с каким-либо еще модом сюда можно вписывать их id", ], "ModDependencies": [ "зависимости от каких либо модов, используются опять таки modid" ], "Category": { "Chinese": null, "English": "Gameplay", "French": null, "German": null, "Italian": null, "Japanese": null, "Korean": null, "Polish": null, "Russian": "Название категории мода, сделано для удобства игроков в отдельном лаунчере игры", "Spanish": null, "Taiwanese": null }, "ModName": { "Chinese": null, "English": "ModName", "French": null, "German": null, "Italian": null, "Japanese": null, "Korean": null, "Polish": null, "Russian": "Короткое имя мода с любыми символами в рамках приличий", "Spanish": null, "Taiwanese": null }, "Description": { "Chinese": null, "English": null, "French": null, "German": null, "Italian": null, "Japanese": null, "Korean": null, "Polish": null, "Russian": "Описание мода, отображается в лаунчере модов", "Spanish": null, "Taiwanese": null }, "KnownIssues": null, "DLCDependencies": [ { "DLC": "Список обязательных дополнений для мода (вдруг у кого-то из игроков то или иное дополнение не куплено)", "DLC": "ThePassage", "Dependant": "required" } ], "CreatorName": "имя автора, желательно", "CreatorContact": "контакты при желании, не обязательно", "Image" : "путь к картинке, не обязательно" }

Затем нужно создать директории data\config\export\main\asset и файл assets.xml с содержимым.

<ModOps> </ModOps>

Внутри тега ModOps и будет происходить непосредственно работа с игровыми обьектами.

Теперь ознакомимся с тем, как работает сам mod loader и формат xml.

Так как все что есть в игре представлено в виде огромного xml дерева с определенными тегами, редактирование чего-то в игре будет заключаться поиском нужного обьекта в assets.xml основной игры и описанием желаемых изменений в этом дереве тегов.

Например: добавим какому-нибудь старому предмету (возьмем Погружатор mk3 от Нейта) возможность работать с новыми химическими заводами, наш assets.xml будет выглядеть так:

<ModOps> <ModOp GUID="112367" Type="add" Path="/Values/ItemEffect/EffectTargets"> <Item> <GUID>194011</GUID> </Item> </ModOp> </ModOps>

Теперь детально опишу что тут происходит.

Каждое изменение которое вносит наш мод в игру декларируется тегом <ModOp />. GUID - это id объекта который мы хотим изменить.

Если нужно добавить какое-нибудь здание или новую цепочку производства это будет новый guid (они ни в коем случае не должны повторяться, только уникальные id, иначе никак, обычно сообщество использует id начиная с 1400000000 или 1500000000).

Type описывает действие, которое необходимо произвести с xml деревом по определенному пути Path начиная с корневого элемента обьекта. Path работает полностью в соответствии с XPath, поэтому опыт работы с ним очень поможет.

Все возможные действия описаны в документации к мод лоадеру, но используют обычно всего 2:

  • Add - добавляет все из ModOp по указанному пути. Данный механизм очень удобен для модификации существующих предметов так как не ломает совместимость с другими модами.
  • Replace - полностью заменяет все содержимое элемента на указанное в ModOp, если используются другие моды то стоит отнестись к данной функции с осторожностью.

Так как предмет представлен таким xml содержимым:

<Asset> <Template>GuildhouseItem</Template> <Values> <Standard> <GUID>112367</GUID> <Name>NATE's Big Fork</Name> <IconFilename>data/ui/2kimages/main/3dicons/machine_items/icon_forklift_truck_3.png</IconFilename> <ID>ITEM_DLC1_15</ID> <InfoDescription>112490</InfoDescription> </Standard> <Text> <LocaText> <English> <Text>ForkTuN8 Mk.3 - Very ForktuN8 Indeed</Text> <Status>Exported</Status> <ExportCount>1</ExportCount> </English> </LocaText> <LineID>32338</LineID> </Text> <Item> <MaxStackSize>1</MaxStackSize> <Rarity>Legendary</Rarity> <TradePrice>741000</TradePrice> </Item> <FactoryUpgrade> <ProductivityUpgrade> <Value>35</Value> <Percental>1</Percental> </ProductivityUpgrade> </FactoryUpgrade> <ItemEffect> <EffectTargets> <Item> <GUID>193856</GUID> </Item> </EffectTargets> </ItemEffect> <ItemAction /> <ExpeditionAttribute> <BaseMorale>0</BaseMorale> <ExpeditionAttributes> <Item> <Attribute>Melee</Attribute> <Amount>30</Amount> </Item> </ExpeditionAttributes> <ItemDifficulties>Hard</ItemDifficulties> <FluffText>112490</FluffText> </ExpeditionAttribute> <CultureUpgrade /> <BuildingUpgrade /> <ModuleOwnerUpgrade /> <IncidentInfluencerUpgrade /> <IncidentInfectableUpgrade /> <ResidenceUpgrade /> <PopulationUpgrade /> <IndustrializableUpgrade /> <Locked> <DefaultLockedState>0</DefaultLockedState> <DLCDependency>410040</DLCDependency> </Locked> <Buff /> <CraftableItem> <CraftingCosts> <Item> <Product>112520</Product> <Amount>20</Amount> </Item> <Item> <Product>1010196</Product> <Amount>20</Amount> </Item> <Item> <Product>1010211</Product> <Amount>10</Amount> </Item> <Item> <Product>1010224</Product> <Amount>3</Amount> </Item> </CraftingCosts> </CraftableItem> <HeaterUpgrade /> <PowerplantUpgrade /> <IrrigationUpgrade /> <EcoSystemProviderUpgrade /> </Values> </Asset>

То в результате описанных выше действий мы добавляем в Values\ItemEffect\EffectTargets новый элемент, который сам по себе является id группы обьектов, описывающих все здания, являющиеся химическими заводами.

Пример посложнее

Возьмем за него один из модов, добавляющий в продажу торговцу в Арктике газ и скрап в небольшом количестве

<ModOps> <ModOp Type="add" GUID='237' Path="/Values/Trader/Progression/*[self::LateMidGame or self::LateGame or self::EndGame]/GoodsProduction"> <Item> <Good>112706</Good> <ProductionPerMinute>0.5</ProductionPerMinute> </Item> <Item> <Good>115980</Good> <ProductionPerMinute>0.5</ProductionPerMinute> </Item> </ModOp> <ModOp Type="add" GUID='237' Path="/Values/Trader/Progression/*[self::LateMidGame or self::LateGame or self::EndGame]/OfferingGoods/Item/GoodSets"> <Item> <Good>112706</Good> </Item> <Item> <Good>115980</Good> </Item> </ModOp> </ModOps>

В первой части изменений ModOps выбирается id арктического торговца, затем в ноде Trader/Progression ищутся все названия xml-элементов из скобок, у них выбирается нода GoodsProduction и добавляется автоматическое пополнение газа и скрапа по 0.5 тонны в минуту.

Во второй части этому же торговцу уже непосредственно в список доступных товаров для продажи добавляется газ и скрап иначе он будет его просто производить, но в окне продажи его не будет. (Например Нейт из дополнения с Мысом Треллони сам может производить скрап любого качества и продавать игроку если в портах будет стоять на него запрос, правда с ограничением на одну сделку).

На число элементов ModOp в одном моде ограничений каких-либо нет, однако вместо солянки разных вещей все таки лучше разделять моды по категориям.

Upd. Локализация

Самое главное наверное еще, переводы. Все переводы игры содержатся в таком же гигантском xml файле по пути config\gui\text_langname.xml

Формат крайне простой, это коллекция нод GUID + Text где содержится перевод на нужный язык. При переводе модов я обычно руководствуюсь поиском по этому GUID среди ассетов чтобы понимать контекст. Пусть большинство из авторов модов и немцы, но английский вторым переводом они чаще всего добавляют, а там не всегда понятно что имелось ввиду.

И насчет переводов стоит заметить один нюанс, что если название или описание копирует какой-либо предмет, хорошим тоном будет не копировать его описание, а вставить вместо текста Asset(GUID), где вместо guid использовать id обьекта.

Совместимость с сохранениями

Отдельно стоит отметить то, как модификация игры работает с сохранениями. Благодаря структуре игры модификации не ломают сохранения если это связано с редактирование ассетов, даже новых цепочек производства или уникальных зданий, привязанных к условиям числа жителей\какого-нибудь открытия, привязанного к региону. Именно поэтому при выходе обновлений от самих разработчиков выход DLC позволяет включить его в старом сохранении и продолжать играть.

В заключение

Если вам интересно, например, как можно добавить какое-либо новое здание или производственную цепочку, то очень советую посмотреть nexusmods где это уже реализовано. В этом моде (ссылка на нексус) автор сделал небоскребы для рабочих, угольные электростанции и много чего еще интересного. Отлично подойдет для более подробного ознакомления с изменением игры, описывать там пришлось бы очень много всего. Да и для игры этот набор модов могу порекомендовать, очень качественный.

2525
6 комментариев

За контент по Анно всегда плюс.

2

Когда игру доделают, попробую дополнительно поиграть с модами — сравнить впечатления.
Спасибо за статью!

1

Комментарий недоступен