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.1.4. Керівництво

Посилання на це керівництво.

2.2. JSON-файли

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

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

  • https://en.wikipedia.org/wiki/JSON
  • https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Scripting/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-файлі:

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, для веж генеруються з коду гри.