Моддинг (DX): атомарные, комбинируемые, моды
GHub Platform · Гайд · 0 ответов · 17 просмотров

«Атомная» система модов позволяет рассматривать каждый мод как отдельный «атом», который можно комбинировать вместе в соответствии с определенными правилами. Возможно, вы заметили, что контент, для которого предназначен редактор, также легко смешивается. В оригинальной игре одновременно мог быть активен только один мод. Если вы хотите смешать моды вместе, вам придется составлять их вручную — утомительный и подверженный ошибкам процесс. Теперь вы можете смешивать несколько модов вместе. Во внутриигровом браузере модов можно выбрать отдельные моды слева, а затем расположить порядок их загрузки справа. Нажатие кнопки «Играть» перезапускает игру со всеми выбранными модами. Давайте немного поговорим о том, как это работает. Во-первых, давайте откроем каталог мода «legendsofawesome», который является тем же модом, который описан в руководстве по редактору уровней. «legendsofawesome» делает ровно две вещи: добавляет одну новую бонусную битву; добавляет один новый специальный предмет. Но, как мы видим на скриншоте, происходит гораздо больше. Файл settings.xml содержит основные метаданные игры, такие как заголовок и описание, которые отображаются в Steam, является ли мод общедоступным и т. д. Файл icon.png будет использоваться в качестве изображения предварительного просмотра мода как во внутриигровом браузере модов, так и в Steam. Остальное — это файлы данных, которые будут использоваться в игре. Существует три специальных каталога: /_append, /_merge и корневой каталог (все, что не находится в /_append или /_merge и не является icon.png или _settings.xml). Это самое простое. Все, что находится в корневом каталоге, будет рассматриваться как *замена* одноименного файла в базовой игре. Если несколько модов загружаются последовательно, такое поведение каскадируется. Пример: скажем, у вас есть файл foo.txt, который в базовой игре содержит текст «Hello, World!». Мы создаем мод «A», который предоставляет собственный файл foo.txt в корневом каталоге, но с содержимым «Привет, мир!», и мод «B», который делает то же самое, за исключением того, что здесь это «Алоха, мир!». Результатом загрузки двух модов в следующих конфигурациях является: foo.txt = "Hi, World!" B foo.txt = "Алоха, мир!" A+B foo.txt = "Алоха, мир!" B+A foo.txt = "Привет, мир!" Как видите, порядок загрузки имеет значение, и загрузчик модов Defender's Quest позволяет вам это контролировать. Очень легко просто открыть базовый файл, внести некоторые изменения и сохранить копию этого файла в папке мода. Единственным недостатком этого метода является то, что копирование всего файла для внесения одного изменения может быть излишним, поскольку оно требует частых обновлений, если игра позже выпустит обновление, которое изменяет другие части этого файла. Мод "legendsofawesome" использует корневую папку для добавления в игру некоторых новых файлов, в данном случае новой бонусной битвы: Карта выглядит так (увеличена в 6 раз): И XML имеет следующее содержимое: <?xml version="1.0"coding="utf-8" ?> <data> <title value="" id=""/> <music value="battle"/> <victory> <condition value="kill_all"/> </victory> <failure/> <tiles> <start x="0" y="7" id="a"/> <start x="14" y="7" id="b"/> <end x="7" y="7" id="a"/> <tile tile_sheet="single" Layer="0" value="grey_dirt" rgb="0x000000"/> <tile Layer="1" value="blue_sand" rgb="0x9BB3CD"/> <tile Layer="2" value="dark_cliff" rgb="0x435054"/> <tile Layer="3" value="water" rgb="0x132F54"/> </tiles> <waves first_wait="10" diff="easy"> <wave loc="a,b"rate="2" level="15" wait="1" type="attacker" count="30"/> <wave loc="a"rate="1" level="15" wait="1" type="speedy" count="20"/> <wave loc="a,b"rate="1" level="15" wait="1" type="normal_w" count="10"/> <wave loc="a"rate="1" level="1" wait="1" type="right_middle_finger" count="1"/> </waves> <waves first_wait="1" diff="normal"> <wave loc="a" скорость ="1" level="1" wait="1" type="normal" count="1"/> </waves> <waves first_wait="1" diff="hard"> <wave loc="a"rate="1" level="1" wait="1" type="normal" count="1"/> </waves> </data> Это предоставляет все данные, необходимые для битвы, но не делает ничего для фактической регистрации их везде, где игрок может получить к ним доступ. Файлы в папке /_append представляют собой *частичные* изменения, которые просто добавляются в *конец* базового файла с тем же именем. Подобно файлам в корневой папке, такое поведение каскадируется с несколькими модами (и порядок также имеет значение). В настоящее время папка /_append распознает только текстовые файлы и имеет специальные правила для обработки файлов .tsv (таблиц, в основном используемых для локализации и удобочитаемого текста) и файлов .xml (общие данные игры). Мод «legendsofawesome» использует этот метод для добавления отсылок к вышеупомянутой бонусной битве, чтобы она действительно отображалась в игре. Для этого необходимо внести изменения в реестр бонусных боев и таблицы локализации. Пример 1 (TSV): Мод включает текст локализации, чтобы игра могла отображать название и описание новой бонусной битвы. Данные американского английского («en-US») хранятся, например, в `/_append/locales/en-US/maps.tsv` и выглядят так: $LEGENDSOFAWESOME~AWESOMEINTRO_TITLE Удивительное начало начинается... $LEGENDSOFAWESOME~AWESOMEINTRO_TEXT На этот раз это личное. Эти две строки теперь будут просто добавлены в конец каждого файла maps.tsv базовой игры для каждой локали. Если вместе загружаются несколько модов, каждый из которых добавляет новые строки TSV в один и тот же файл, порядок загрузки не должен влиять на поведение игры. Исключение составляют случаи, когда несколько модов имеют строки с одинаковыми именами флагов записи (например, «$LEGENDSOFAWESOME~AWESOMEINTRO_TITLE»). В этом случае я считаю, что последняя запись перезапишет предыдущую, когда она загрузится в игру. Пример 2 (XML): Отображать правильный текст — это хорошо, но новое сражение должно быть откуда-то доступно. Этим управляет бонусный файл реестра, который мод редактирует с помощью файла /_append/xml/bonus.xml: <?xml version="1.0"coding="utf-8" ?> <data> <bonusdescription="$LEGENDSOFAWESOME~AWESOMEINTRO_TEXT" title="$LEGENDSOFAWESOME~AWESOMEINTRO_TITLE" stars_plus="20" stars="20" color_plus="gold" id="legendsofawesome~awesomeintro" color="blue"> <rewards> <reward value_plus="1500" value="armor_heavy_legendsofawesome~guardherald" feat="pass" type="item" type_plus="gold" target="true"/> <reward value_plus="2000" value="200" feat="perfect" type="xp" type_plus="xp" target="true"/> </rewards> </bonus> </data> При добавлении подобных XML-данных игра удаляет заголовок `<?xml>` вверху, а также тег конверта `<data>`, который используется в каждом XML-файле Defender's Quest, а затем вставляет остальную часть содержимого в самый низ базового файла с тем же именем файла, прямо перед закрывающим тегом `</data>`. Это простой способ добавлять новые записи в файлы с простой структурой данных, например в реестр бонусных боев. Однако не все изменения так легко выразить, и здесь вам пригодится папка _merge. Папка /_merge в основном предназначена для файлов .xml и, как следует из названия, представляет собой средство объединения новых данных в середину существующих базовых файлов. В данном случае мод отключает режим «оригинальной графики» игры. (Defender's Quest DX включает в себя новую HD-графику, а также старые спрайты оригинальной версии, но в целях снижения сложности мы хотели отключить этот вторичный набор данных по умолчанию для модов, созданных с помощью официального игрового редактора. Продвинутые моддеры, конечно, могут использовать любые настройки, которые они хотят). Для этого нам нужно изменить существующий тег в файле графики игры.xml, который управляет различными графическими настройками. Вот фрагмент базового файла: <?xml version="1.0"coding="utf-8" ?> <data> <mode id="cutscenes"values="original,hd"/> <mode id="sprites"values="original,hd"/> <fontdef id="spell_icon" font="verdana" size="10" style="bold" color="white" контур="0xFF0000" border_quality="1" align="center"/> <масштабирование> <object id="overworld" height="4
ИсточникGHub Platform · автор11.08.2026, 02:05:23
«Атомная» система модов позволяет рассматривать каждый мод как отдельный «атом», который можно комбинировать вместе в соответствии с определенными правилами. Возможно, вы заметили, что контент, для которого предназначен редактор, также легко смешивается. В оригинальной игре однов…
Войдите, чтобы писать в группе