Clarus Victoria

Next Run · Моды

Руководство по модификациям Next Run

Подробное описание работы модификаций, структуры файлов и компонентов игры Next Run. Сохраните эту ссылку для быстрых ответов на вопросы при создании и публикации собственных модов.

1. Общее

Данный документ описывает систему модов в игре Next Run: как их устанавливать, создавать собственные моды и делиться ими с другими игроками.

  • Прочтите раздел 2 хотя бы один раз, чтобы понять, как создаются моды и как они работают.
  • Используйте разделы 3 и 4 в качестве справочников.
  • Используйте примеры из игры, чтобы увидеть, как это работает на практике, в Steam Workshop: https://steamcommunity.com/app/1295870/workshop/.
  • Файлы игры для версии 1.1.0 можно найти здесь: https://clarusvictoria.com/files/next_run_files_examples_1.1.0.zip.

2. Система модов

После запуска игры и нажатия кнопок "Играть" и "Создать игру" выполняется сканирование папки Mods внутри каталога игры. Каждая подпапка этой директории при наличии файла modinfo.json считается модом.

2.1. Steam Workshop, установка и публикация модов

Если вы запускаете игру из клиента Steam, в меню "Играть" вам будет доступна панель "Моды", содержащая следующие кнопки:

  • Мастерская Steam
  • Папка модов
  • Опубликовать
  • Руководство

2.1.1. Мастерская Steam

Открывает Steam Workshop внутри клиента Steam. Чтобы скачать мод, необходимо подписаться на него. После этого загрузка начнется автоматически. Если мод имеет большой размер, загрузка может занять некоторое время. Статус загрузки отображается в клиенте Steam.

2.1.2. Папка модов

Открывает папку с модами вашей игры.

2.1.3. Опубликовать

Игра автоматически сканирует папку Mods и публикует все моды, автором которых вы являетесь, в Steam Workshop.

  • Если мод новый, для него автоматически генерируется steam_id.
  • Если мод уже существует, он будет обновлен.
  • Кнопка публикации на время выгрузки меняет свой внешний вид.
  • Мод будет опубликован только при наличии изменений.
  • Изменение файла modinfo.json не считается изменением контента.
  • Опубликованные моды становятся доступными другим игрокам по всему миру. При этом Steam Workshop не является единственным способом распространения модов — их также можно передавать напрямую, просто размещая папку мода в директории Mods.

2.2. JSON-файлы

Все данные и тексты в игре используют формат JSON. Основное отличие от обычного текстового формата заключается в том, что данные должны быть заключены в фигурные скобки {}.

Описание синтаксиса JSON:

Рекомендуется ориентироваться на примеры файлов из игры.

2.3. Структура файлов

Каждый мод имеет файловую структуру, аналогичную структуре игры. Эти файлы либо добавляют новый контент, либо изменяют существующий. JSON-файлы добавляют или изменяют отдельные элементы игры. Файлы других форматов (png, ogg) заменяются целиком.

Пример: если вы создадите файл data/game.json и измените в нем сущность "Warrior" (игровой класс), будет изменен только этот класс, а остальные сущности в game.json останутся без изменений. Если вы добавите файл portrait_warrior_front.png, он полностью заменит соответствующее изображение в игре, так как совпадает по имени.

Внутри мода существуют обязательные и необязательные файлы и папки. Стандартная структура выглядит следующим образом:

  • Название папки мода (может быть любым, не является названием мода)
  • modinfo.json
  • preview.png
  • data/
  • icons/
  • sounds/
  • texts/
  • tiles/

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

2.3.1. modinfo.json

Файл с метаданными мода. Часть этих данных используется Steam Workshop при публикации.

  • title — название мода, отображается в Steam.
  • version — версия мода.
  • description — описание мода.
  • tags — теги для навигации в Steam Workshop.
  • order — порядок загрузки модов. Если несколько модов изменяют одни и те же данные, мод с большим order перезапишет мод с меньшим значением.
  • steam_id — указывать вручную не требуется, формируется автоматически при публикации.
  • created_time — время создания.
  • changed_time — время изменения.
  • Допускается добавление других полей, однако они будут использоваться только внутри файла. Автор мода определяется автоматически через Steam Workshop.

2.3.2. preview.png

Изображение (иконка) мода для Steam Workshop. Рекомендуемое разрешение — 256x256 или 512x512. Соотношение сторон квадратное. Допускается прозрачный PNG или JPG.

2.3.3. data

Папка с JSON-файлами данных. Содержит файлы, которые изменяют существующие сущности игры или добавляют новые. Вы можете создавать только те файлы и поля, которые необходимо изменить или добавить. Подробное описание изменяемых данных приведено в разделе 3.

2.3.4. icons

Папка с иконками игры. Содержит большинство изображений, кроме GUI и тайлов. Используется несколько стандартных размеров и слоев для различных игровых ситуаций. В игре применяются PNG-файлы с прозрачным фоном.

2.3.5. sounds

Папка со звуками и музыкой. Можно добавлять новые файлы или заменять существующие. Используемый формат — OGG.

2.3.6. texts

Папка с локализованными текстами игры. Каждый файл соответствует одному языку и использует стандарт IETF BCP-47 / ISO. На текущий момент поддерживаются 13 языков: ruRU.json, trTR.json, jaJP.json, koKR.json, zhTW.json, zhCN.json, plPL.json, ptBR.json, itIT.json, esES.json, frFR.json, deDE.json, enUS.json.

2.3.7. tiles

Папка с изображениями тайлов. Используются PNG-файлы с прозрачным фоном. Стандартный размер тайла — 256x384. Тайлы состоят из нескольких слоев, таких как земля, объекты, лес, горы, дороги.

2.4. Синхронизация модов

После получения мода он автоматически синхронизируется с последней версией, опубликованной в Мастерской Steam, при каждом запуске игры.

Если вы являетесь автором мода, синхронизация не выполняется и файлы мода не перезаписываются. Это сделано для того, чтобы при работе над модом ваши изменения не терялись после перезапуска игры.

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

  • Изменить название папки мода на любое другое, отличное от его id.
  • В файле modinfo.json удалить поля: "author", "created_time", "steam_id", "changed_time".

2.5. Объединение данных

JSON-файлы данных модов и игры не заменяются, а объединяются.

Порядок объединения:

  • Берутся оригинальные сущности из JSON-файлов игры как базовые.
  • Поверх них накладываются данные из модов. Моды накладываются в соответствии с приоритетами, заданными полем order в файле modinfo.json.

При объединении все поля всех компонентов обрабатываются отдельно. Например, если у сущности указано "hideIfZero":true, и требуется, чтобы значение стало false, недостаточно удалить это поле - необходимо явно указать "hideIfZero":false.

Списки в файле list.json объединяются по тому же принципу. Не требуется дублировать каждый список со всеми полями, если нужно добавить только один элемент. Однако списки, которые содержат только простые данные, полностью заменяются, например RndGoodEvents и RndEvents.

3. Компоненты

Игра Next Run построена на архитектуре ECS. Вся игра состоит из сущностей. Сущность представляет собой контейнер компонентов. Сущность содержит только поле id. Все остальные данные описываются компонентами. Все данные задаются в JSON-файлах.

Пример элемента в JSON-файле:

"Speed": {
    "Button": {"panel": "statsPanel","iconType": "btnBig","numText1Type": "total","icon": "arrow2"},
    "Tooltip": {"text": "Speed"},
    "Total": {"now": 25}
}

В данном примере описана сущность "Speed", содержащая три компонента: Button — определяет внешний вид и поведение кнопки в игре; Tooltip — описание всплывающей подсказки; Total — числовое значение сущности, в данном случае скорость равна 25.

Ниже приведено более подробное описание компонентов и их полей. Часть свойств компонентов определяется автоматически и недоступна для редактирования в JSON-файлах. Например, сложность зачистки подземелий зависит от уровня и других параметров, вычисляемых игрой.

3.1. Button

Описывает внешний вид и поведение кнопки в игре.

  • panel = string, панель кнопки по умолчанию. Все кнопки в игре находятся внутри каких-либо панелей и меню. Используйте примеры для выбора того, в какой панели вы хотите разместить вашу кнопку.
  • icon = string, название иконки кнопки. Название иконки берется из папки icons, PNG-файл.
  • iconType = string, тип кнопки, влияет на размер и элементы на кнопке. Варианты: "btn" — простая кнопка, "btnBig" — кнопка со значением снизу.
  • color = string, цвет подложки иконки, например green, yellow. Список цветов, которые понимает игра: green, superGreen, lightGreen, darkGreen, red, superRed, darkRed, gray, lightGray, darkGray, lightBlue, blue, darkBlue, darkDarkBlue, grayYellow, yellow, pink, cyan, darkCyan, almostBlack, black, orange, darkOrange, lightViolet, purple, chartreuse, num, gameBack, blank, halfTrans, white, base.
  • numText1 = double, значение иконки.
  • numTextAdd = string, дополнение к значению иконки, например символ "%".
  • numText1Type = string, тип значения иконки, например level, total, duration.
  • numCustom = string, уникальное значение иконки, например "∞".
  • numIcon = string, иконка рядом со значением, например star для уровней, coin для товаров.
  • hotkey = string, горячая кнопка на клавиатуре.
  • hide = bool, скрыта ли кнопка.
  • hideIfZero = bool, скрывает кнопку, если компонент Total.now равен 0.
  • disabled = bool, отключена или включена кнопка, например некоторые меню на старте игры отключены.
  • interactable = bool, интерактивна ли кнопка, по умолчанию да. Пример неинтерактивных кнопок — слоты инвентаря.
  • cantBeDeselect = bool, запрет на снятие выделения с данной кнопки.
  • cantBeSelect = bool, запрет на выделение кнопки при нажатии на нее.
  • draggable = bool, можно ли перемещать кнопку методами drag'n drop.
  • x = double, положение кнопки в интерфейсе по координате X, используется для кнопок без панелей, например слоты в инвентаре.
  • y = double, аналогично X, но по координате Y.
  • upMiniPred = string, название действия, которое проверяется для данной сущности. Если действие доступно, появляется мини-иконка подсказки типа Улучшения.
  • craftMiniPred = string, аналогичная подсказка для действия Крафта.
  • raiseMiniPred = string, аналогичная подсказка для действия Поднятия.

3.2. Tooltip

Описывает содержание подсказки кнопки.

  • text = string, название сущности доступное в игре.
  • dontShowDuration = bool, запрет на показ значения длительности сущности.
  • hideSources = bool, запрет на показ сущностей-источников влияющих на значение этой сущности.
  • hideAsSubjTT = bool, запрет на показ этого объекта как источника для связанных сущностей.
  • desc = string, текст описание, идет в начале подсказки.
  • desc2 = string, текст описание, идет в конце подсказки.
  • redDesc = string, текст описания, выделено красным, идет в конце.
  • totalTextAs = string, текст вместо "Всего".
  • ttPos = string, положение подсказки относительно кнопки, варианты "top", "left".

3.3. GameClass

Описывает механику игрового класса.

  • text = string, название класса в игре.
  • portrait_back = string, картинка-фон при выборе класса 391х598.
  • portrait_front = string, картинка класса при выборе класса 411х620, прозрачная.
  • figurine = string, картинка аватара персонажа на карте 149х243.
  • doll = string, чб картинка класса в инвентаре 460х784.
  • bonusSkill1 = string, название навыка 1 который получается бонус.
  • bonusSkillVal1 = double, размер бонуса навыка 1.
  • bonusSkill2 = string, название навыка 2 который получается бонус.
  • bonusSkillVal2 = double, размер бонуса 2.
  • debuffSkill1 = string, название навыка 1 который получает штраф.
  • debuffSkillVal1 = double, размер штрафа 1.
  • debuffSkill2 = string, название навыка 2 который получает штраф.
  • debuffSkillVal2 = double, размер штрафа 2.
  • gold = double, размер золота у класса на старте.
  • remains = double, число останков на старте.
  • equip = List<string>, список предметов для одевания на старте.
  • units = string, название существа который будет на старте.
  • itemName = string, название предмета в инвентаре на старте.
  • itemNum = double, число предмета в инвентаре на старте.
  • learnList = string, список заклинаний или чертежей для изучения, список находится в файле list.json.
  • learnNum = double, число заклинаний или чертежей которые будут изучены из списка.
  • lessTime = double, насколько меньше времени между атаками ада.
  • manaBonus = double, бонус к мане, максимум и всего.
  • upgradeDexterityBonusMod = double, бонус к улучшаемым вещам от навыка Ловкость.
  • skillPointsPerLevel = double, число очков навыка которые дают при повышении уровня.
  • upgradeManaCostMod = double, бонус эффективность улучшения заклинаний.
  • freeRegion = bool, бесплатный регион.
  • necroBonus = bool, геймплей и бонусы Некроманта.
  • druidBonus = bool, геймплей и бонусы Друида.
  • stances = bool, наличие стоек/форм/приказов.
  • defStance = string, стойка по умолчанию.
  • notDemo = bool, класс недоступен в демо.
  • notTutorial = bool, доступен ли класс в режиме Обучения.

3.4. GameMode

Описывает механику игрового режима.

  • text = string, название режима в игре.
  • back = string, картинка-фон при выборе режима 391х598.
  • moreTime = double, насколько больше времени между атаками ада.
  • lessTime = double, насколько меньше времени между атаками ада.
  • woundChance = double, шанс получения раны.
  • notDemo = bool, режим недоступен в демо.
  • scenario = string, название отдельной карты для данного режима.
  • noHellAttacks = bool, нет атак ада в этом режиме (как в песочнице).
  • savesOnExitOnly = bool, в этом режиме сохранение только на выходе из игры.

3.5. Biome

Определяет механику биомов.

  • frequency = double, частота появления биома при генерации карты, чем больше цифра, тем чаще. При 0 не генерируется. Биом Lava генерируется всегда как финальный регион.
  • hexBase = string, базовый тайл для данного биома, генерируется как подложка под поселениями.
  • music = string, название файла с музыкальным треком биома.
  • hexPatterns = List<string>, список шаблонов объектов в биоме. Работает по принципу колоды карт: шаблоны мешаются случайным образом, затем вытаскиваются случайно, при достижении 0 в колоде пересоздается. Шаблон имеет формат: название_объект#название_объекта, символ # является разделителем между объектами.
  • mobLevel1 .. mobLevel8 = string, название существ которые генерируются в биоме в зависимости от уровня региона.

3.6. TileAsset

Определяет внешний вид объекта на игровой карте.

  • tileMap = string, название слоя LandTilemap — поверхность земли, ObjectTilemap — обычный объект, RoadTilemap — дорога и т.п., разница только в порядке наложения слоев друг на друга.
  • rawSprite = string, картинка 256х384 для добавления картинки на карту.
  • icon = string, иконка для добавления поверх всех TileMap.
  • buttonIcon = bool, нужно ли брать иконку из Button.
  • delLevel = double, уровень удаления, насколько сложно удалить объект с помощью действия.

3.7. Shop

Описывает механику магазина.

  • slots = int, число слотов у магазина.
  • type = string, название ассортимента магазина который есть в list.json.

3.8. Item

Описывает механику предмета.

  • slot = string, название слота для экипировки.
  • stackable = bool, может ли быть предмета более 1 в одной куче.
  • upgradable = bool, можно ли улучшать предмет, длительность улучшения зависит от уровня.
  • upProgress = double, длительность улучшения.
  • order = double, порядок предмета в магазине, чем меньше, тем выше.

3.9. Mob

Описывает механику существа.

  • hell = bool, существо адское. Штраф при подкупе. Участвует в адских атаках. Бонус останков.
  • undead = bool, существо нежить. Нельзя подкупать. Особая механика улучшения.
  • type = string, тип существа — "Warriors", "Defenders", "Mages", "Gatherers", "Crafters". Определяет цвет подложки, шанс попадания по игроку, тип урона, тип лута.
  • upMob = string, в кого существо улучшается.
  • upCostName = string, предмет нужный для улучшения.
  • upCostNum = double, число ресурса нужное для улучшения, по умолчанию 1.

3.10. Dungeon

Описывает механику подземелья.

  • magic = bool, подземелье магическое. Влияет на тип урона, лута и аддоны.
  • boss = bool, финальное подземелье.

3.11. Ruins

Описывает механику руин — мест для поиска предметов.

3.12. Addon

Механика расширений. Расширения — это объекты, расположенные в клетке с подземельем или руинами, которые изменяют их параметры и дают отдельные награды.

  • skill = string, название навыка, который будет получен игроком в случае зачистки подземелья или осмотра руин. Возможно указать: "Random", "Strength" и т.п.
  • unit = string, название бонусного существа после завершения действия. Можно указать "Random".
  • item = string, название бонусного предмета после завершения действия. Можно указать "Random".
  • phyChanceMulti = double, модификатор шанса физического урона при Зачистке. Например на 50(%).
  • magChanceMulti = double, модификатор шанса магического урона при Зачистке. Например на 50(%).
  • progressMulti = double, насколько дольше выполнять действие типа Зачистка или Осмотр. Например на 100(%).
  • dmgMulti = double, модификатор размера урона при Зачистке. Например на 50(%).

3.13. Build

Определяет что данный объект является постройкой.

3.14. Center

Определение, что этот объект — поселение.

  • captureProgress = double, усилие, которое нужно выполнить для захвата поселения.
  • upProgress = double, усилие, которое нужно выполнить для улучшения поселения.
  • upCostName1 = string, название предмета 1, нужного для улучшения.
  • upCostNum1 = double, число предмета 1, нужное для улучшения.
  • upCostName2 = string, аналог для предмета 2.
  • upCostNum2 = double, аналог для предмета 2.
  • upCostName3 = string, аналог для предмета 3.
  • upCostNum3 = double, аналог для предмета 3.
  • upProp = string, в какое поселение улучшается.

3.15. Gatherable

Определение, что данный объект можно добывать и получать ресурсы.

  • gather = string, название ресурса, которое будет добыто.
  • deposit = bool, является ли данный ресурс месторождением, если да, значит тут можно строить шахту.

3.16. AlliedForest

Определение механики и значений "союзного леса" при игре за друида.

  • allyBonus = double, размер бонуса "Союзный лес".

3.17. Graveyard

Определение механики, что данный объект — кладбище, что важно при игре за некроманта. Здесь значение генерируется случайно, сколько именно останков можно добыть.

  • now = double, текущее значение останков.
  • rndMin = double, минимальное значение числа останков.
  • rndMax = double, максимальное значение числа останков.
  • rndCeil = bool, округление по верхнему случайному значению.

3.18. Pred

Компонент-действие. Хотя большая часть функционала компонента скрыта в коде, часть доступна.

  • action = string, название действия, которое сработает при выполнении действия.
  • local = bool, нужно ли находиться в той же клетке, что и объект, для взаимодействия.
  • attackPred = bool, данное действие атакующее, будет применено автоматически, если будет применено боевое заклинание.
  • gatherPred = bool, данное действие добывательное, будет применено автоматически, если будет применено заклинание по добыче ресурсов.
  • craftPred = bool, данное действие ремесленническое, будет применено автоматически, если будет применено заклинание при ремесле.
  • skill = string, навык, который используется для выполнения действия, например для атакующих действий используется навык Атака.
  • longPred = bool, данное действие не мгновенное и требует времени.
  • repeat = bool, действие будет повторяться до остановки.
  • noOwner = bool, данное действие не требует выделения каких-либо объектов.
  • skipLongTooltip = bool, упрощенная версия подсказки для действия.
  • onlyClass = string, данное действие типа стойки, формы или приказа доступно только для определенного класса.

3.19. Total

Компонент, определяющий числовое значение сущности, как правило это количество чего-либо.

  • now = double, текущее значение.
  • inc = double, прирост за ход.
  • max = double, максимальное значение.
  • min = double, минимальное значение.
  • rndMin = double, минимальное значение случайного числа.
  • rndMax = double, максимальное значение случайного числа, заменяет now.
  • rndCeil = bool, округление вверх при генерации случайного значения.
  • overMax = bool, позволяет превышать лимит.
  • delIfZero = bool, удалять, если значение равно 0.
  • numPercent = bool, является ли значение процентом.

3.20. Level

Компонент, определяющий уровень сущности.

  • now = double, текущее значение.
  • max = double, максимальное значение.
  • min = double, минимальное значение.
  • localLevelPlus = int, бонус к местному уровню, работает только для объектов на карте, их уровень становится равен уровню региона плюс значение localLevelPlus.

3.21. Duration

Компонент, определяющий длительность сущности.

  • now = double, текущее значение.
  • max = double, максимальное значение.
  • min = double, минимальное значение.
  • delIfZero = bool, удалять, если значение равно 0.

3.22. Mods

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

  • radius = int, радиус, на который влияет модификация, работает только на карте.
  • objType = string, тип сущностей, на которые накладывается модификация, например "Stat", "Skill", "Prop", "Item", "ModableVal", "PropMod".
  • objName = string, название сущности, например "Speed".
  • objComp = string, компонент, на который накладывается модификация, например "Total", "Level".
  • objKey = string, поле компонента, на которое накладывается модификация, например "now", "inc", "max".
  • modType = string, способ влияния на поле: "add", "mult", "addPerLevel", "multPerLevel".
  • now = double, значение модификатора, на которое происходит изменение.
  • subjTooltipText = string, в динамическую подсказку будет добавлено указание субъекта.
  • skipPerTooltip = bool, в подсказке заменять PerLevel на Plus.
  • skipSubjTooltip = bool, пропускать подсказку для этого субъекта.

3.23. ModableVals

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

  • now = double, значение переменной.

3.24. Slot

Компонент, который определяет сущность как слот в инвентаре.

  • name = string, название слота. Чтобы положить предмет в этот слот, должно совпадать значение поля slot у компонента Item.

3.25. Container

Определяет данную сущность как контейнер с ячейками.

  • cells = int, число ячеек в контейнере.
  • cellsPanel = string, название панели.

3.26. Tom

Определение, что данная сущность — это том заклинаний, который можно изучить и получить или улучшить заклинание.

  • cast = string, название заклинания.

3.27. Cast

Определение, что сущность является заклинанием.

  • mana = double, цена заклинания в мане.
  • predSkill = string, при активации этого заклинания, какой тип действий нужно запустить, например для Attack-типа автоматически запускаются атакующие действия.
  • notSkills = string, подсказка, какое действие нужно для использования данного заклинания.
  • attack = double, насколько ускоряет действие типа Атака применение этого заклинания, условно это магический урон.
  • gather = double, насколько ускоряется действие типа Добыча ресурсов.
  • craft = double, насколько ускоряется действие типа Крафт.
  • heal = double, насколько лечится герой игрока.
  • newEvent = string, название события, которое вызывает заклинание, как правило это события типа бафов.
  • teleport = bool, телепортация в выбранную локацию.
  • explore = double, разведывает эту клетку и соседние.

3.28. Blueprint

Механика сущности-чертежа.

  • item = string, название предмета, который будет создан.
  • build = string, название постройки, которая будет построена.
  • costName1 = string, название предмета 1, нужного для создания.
  • costNum1 = double, число предмета 1, нужное для создания.
  • costName2 = string, аналог для предмета 2.
  • costNum2 = double, аналог для предмета 2.
  • costName3 = string, аналог для предмета 3.
  • costNum3 = double, аналог для предмета 3.

3.29. Cost

Компонент-цена, определяет, что сущность можно покупать и продавать.

  • raw = double, базовая цена, без модификаторов. Цена покупки и продажи считается от нее.

3.30. Event

Компонент для событий.

  • uniq = bool, событие уникальное, появление повторного события удалит старое с тем же именем.
  • rndEvent = bool, событие является случайным.
  • nextEvent1 = string, название первого события, которое начнется по завершению текущего.
  • nextEvent2 = string, название второго события, которое начнется по завершению текущего.
  • castType = string, тип усилительного эффекта заклинания, перезаписывает аналогичный тип.

3.31. Proc

Компонент работы проков (шансов), например вероятность возникновения болезни.

  • addEvent = string, событие, которое сработает в случае, если шанс сработает.

3.32. ProcMod

Компонент, который дает возможность сущности влиять на шанс проков.

  • proc = string, имя прока, на который влияет данный компонент.
  • chance = double, сила влияния, часть функционала находится внутри кода.
  • dependsLevel = bool, зависимость от уровня сущности.

3.33. Usable

Компоненты одноразового использования, дающие эффект, например зелья. Компонент активируется при использовании действия Использовать.

  • stat = string, название стата, на который влияет эффект.
  • skill = string, название навыка, на который влияет эффект.
  • nowBonus = double, бонус, влияющий на поле Total.now компонента.
  • maxBonus = double, бонус, влияющий на поле Total.max компонента.
  • cure = bool, исцеляет ли предмет от эффекта Болезни.

3.34. Drankable

Компонент, который позволяет испить объект на карте, например Озеро, Оазисы и аналоги.

3.35. Sphinx

Компонент-квест на карте, Сфинкс. Параметры определяются автоматически на базе уровней региона.

3.36. Living_tree

Компонент-квест на карте, Живое дерево. Параметры определяются автоматически на базе уровней региона.

3.37. Vision

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

  • explore = int, радиус разведки. 1 — обычная разведка, 2 — увеличенная на одну клетку.

3.38. Remains

Описание сущности как компонента останков. Позволяет такие сущности превращать в нежить.

3.39. Audio_comp

Компонент, который позволяет проигрывать звуки для конкретной сущности в зависимости от ее типа.

  • click = string, звук при нажатии на сущность, используется для действий и заклинаний.
  • added = string, звук проигрывается при создании сущности, используется для событий.
  • ambient1 = string, звук окружения, дорожка 1.
  • ambient2 = string, звук окружения, дорожка 2.
  • ambient3 = string, звук окружения, дорожка 3.
  • process = List<string>, список названий звуков, которые проигрываются, пока действие выполняется.
  • waits = List<double>, список пауз между проигрыванием звуков.
  • finish = string, звук окончания выполнения действия.
  • rndProcess = bool, небольшие случайные эффекты для звуков во время проигрывания.

3.40. Childs

Компонент, который рекурсивно создает новые сущности.

  • list = List<Entity>, список детей, которые автоматически создаются и привязываются для конкретной сущности.

3.41. Preds

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

  • list = List<string>.

3.42. Equip

Компонент-метка, означающая, что этот предмет можно одеть на героя.

3.43. Res

Компонент-индикатор, что данная сущность — ресурс. Нужно для подсказок, анимации и сводки по игре.

3.44. TurnAct

Компонент означает, что сущность нужно проверять каждый тик игрового времени, например для компонентов Total и Duration.

4. Списки

В файле list.json есть набор секций данных, которые не являются сущностями или компонентами. Они определяют различные списки для генерации контента в игре.

4.1. RndGoodEvents

Список хороших случайных событий, которые генерируются сразу на старте игры.

4.2. RndEvents

Список хороших и плохих случайных событий, которые будут генерироваться по ходу игры.

4.3. Generator_dungeon_addons_physical

Список расширений (addons), которые будут генерироваться для подземелий с физическим уроном.

4.4. Generator_dungeon_addons_magical

Список расширений (addons), которые будут генерироваться для подземелий с магическим уроном.

4.5. Generator_ruins_addons

Список расширений (addons), которые будут генерироваться для руин.

4.6. Generator_settlement_levels

Список соответствий между уровнями регионов и названиями сущностей-поселений, например "lvl1":"Village" означает, что в регионе 1-го уровня будет генерироваться поселение типа Village.

4.7. Generator_rar_metals

Список соответствий между уровнями регионов и названиями месторождений, например "lvl2":"Deposit_tin" означает, что в регионе 2-го уровня будет генерироваться месторождение олова.

4.8. Generator_mages

Список соответствий между уровнями регионов и названиями магов, которые будут генерироваться и охранять башни магов, например "lvl3":"Priestesses" означает, что в регионе 3-го уровня будут генерироваться жрицы.

4.9. LevelMobs_

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

4.10. Crafter_start, Lord_start, Mage_start,

Различные списки вещей, которые получают разные игровые классы на старте в компоненте GameClass, в поле learnList. Число вещей генерируется в поле learnNum.

  • obj = string, название вещи.
  • min = double, минимальное случайное число.
  • max = double, максимальное слчайное число.
  • chance = double, шанс генерации именно этой вещи.
  • Можно создавать другие списки и привязывать их для разных классов, если нужно выучить другие чертежи или заклинания.

4.11. Gold_

Этот список определяет количество генерируемого золота в зависимости от уровня региона. Золото появляется с вероятностью 50% во всех видах награды на карте. Смотри пункт 4.10 для синтаксиса.

4.12. Loot_-

Группа списков, которая определяет генерацию награды в зависимости от уровня региона. Применяется для существ, подземелий и руин. Для существ определяет вероятность выпадения конкретных вещей с шансом 50%, для остальных 50% используются списки из пункта 4.13. Смотри пункт 4.10 для синтаксиса.

4.13. Warriors_, Defenders_, Mages_, Gatherers_, Crafters_,

Группа списков, которая определяет генерацию награды в зависимости от уровня региона и класса существ. Применяется только для существ. Эти списки являются расширением списков типа Loot_- и срабатывают в 50% случаев для генерации класс-зависимых наград, например когда требуется, чтобы у магов чаще выпадали тома заклинаний и посохи. Смотри пункт 4.10 для синтаксиса.

4.14. Shop_, Books_

Списки для разных уровней регионов, например Books5 или Shop6. Используются для генерации ассортимента магазинов. Смотри пункт 4.10 для синтаксиса. Эти списки определяются в компоненте Shop, поле type, для башен генерируются из кода игры.

Next Run — руководство по модам