Гайд по моддингу

Введение

Итак, вы решили написать мод для Love, Money, Rock'n'Roll. 

По большей части вам понадобится любой текстовый редактор (желательно с поддержкой YAML-синтаксиса) — например, Notepad++, однако хватит и обычного блокнота.

Папка модификаций

Все локальные модификации для игры подгружаются из папки Love, Money, Rock'n'Roll_Data\mods.

Моды из Steam Workshop хранятся внутри папки steamapps\workshop\content\615530, которая расположена на том диске, на котором установлена игра.

Сам мод может храниться в двух видах:

.scenario-архивы предназначены преимущественно для распространения модификаций вне Steam Workshop.

Steam Workshop поддерживает только моды в подпапках, любые другие моды (в .scenario-архивах или .mod-бандлах из старой системы модов) не будут распознаваться игрой.

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

Метаданные

Метаданные

Файлы метаданных

Игра получает информацию о моде из следующих файлов:

  1. meta.yaml
  2. resources.yaml

meta.yaml отвечает за информацию о моде во внутриигровом мод-селекторе;
resources.yaml — за всё остальное — это основной файл, который вам придётся редактировать чаще всего.

Оба файла должны быть расположены в корневой директории мода, содержимое файлов должно иметь корректный YAML-синтаксис и верно указанные параметры (об этом будет далее).

YAML достаточно простой и интуитивный, но если у вас возникли сложности, можете воспользоваться специальным ресурсом для валидации YAML-синтаксиса.

В YAML нельзя использовать табуляцию — используйте пробелы.

Метаданные

Языковые ноды

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

Значением такого параметра может быть просто текст:

title: Название мода

В таком случае Название мода будет отображаться на русском для всех языков.

Чтобы локализировать параметр для разных языков, нужно указать код языка и текст:

title:
    ru: Название мода
    en: Mod title
    common: Текст, который будет выводиться для любого другого языка*, перевод для которого не указан

Поддерживаемые языковые коды:

* В игре на данный момент всего два языка — русский и английский.

Метаданные

Ресурсные ноды

Большая часть параметров в resources.yaml определяет какие-либо внешние ресурсы, используемые в игре: фоны, звуки, спрайты персонажей и их имена, цвета, глобальные переменные и прочее. Такие параметры для удобства будут называться ресурсными нодами.

Каждому такому параметру должен быть назначен уникальный ID — имя, на которое вы будете ссылаться при написании сценария для использования данного ресурса.

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

Пример определения фона с ID bus_stop внутри resources.yaml:

# resources.yaml
---
  bg:
    bus_stop: bg/bus_stop.jpg

Строчка bus_stop: bg/bus_stop.jpg — ресурсный нод, содержащий путь к ассету.

Пример определения цвета с ID dark_pink:

# resources.yaml
---
  colors:
    dark_pink: #b00b69

ID регистронезависимы

Метаданные

Ассеты

Пути ассетов

Различные ноды часто принимают в качестве аргумента путь к какому-либо ассету (файлу).

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

Например, у нас есть обложка мода — cover.jpg, которая лежит в папке images. Корректный путь к ней будет выглядеть так:
images/cover.jpg

Если же обложка лежит в корневой директории, достаточно просто указать имя файла:
cover.jpg

Если ваш мод находится внутри .scenario-архива, учитывайте регистр при указании путей. Также регистр важен на UNIX-системах (Linux, macOS, Android и т.п.).

Если ваш файл называется Cover.jpg, а в пути вы указали cover.jpg — будет выдана ошибка.

Виды ассетов

Всего существует 3 основных вида ассетов, их можно загружать из директории мода и из Unity-каталогов:

Также существует ещё 2 вида, которые можно загружать только из Unity-каталогов:

У каждого параметра, принимающего ассет(ы) в качестве аргумента, будут указаны виды ассетов, которые он принимает.

Метаданные

Списки

Большая часть основных параметров — это списки, т.е., ноды, которые содержат в себе наборы других однотипных нодов.

Например:

# resources.yaml
---
  bg:
    bus_stop: bg/bus_stop.jpg
    ext_road_day: bg/ext_road_day.jpg

  sound:
    blow_with_the_fires: sound/blow_with_the_fires.ogg
    no_tresspassing: sound/no_tresspassing.ogg

Параметры bg и sound в данном примере — списки.

meta.yaml

Файл с основной информацией о модификации. По наличию этого файла в подпапке / .scenario-архиве игра распознает мод.

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

Содержимое файла имеет следующий вид:

---
    title: Название мода        
    description: Описание мода
    version: 1.0.0
    cover: cover.jpg

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

Параметры

title

Тип: языковой нод

Название мода. Поддерживает тэги разметки Rich Text.

description

Тип: языковой нод

Описание мода. Поддерживает тэги разметки Rich Text.

version

Тип: текстовый нод

Версия мода. Выводится в правом нижнем углу обложки.

cover

Тип: путь к файлу изображения

Обложка мода.

Файл обложки должен весить не более 2048 килобайт. 

Предпочтительное разрешение: 445x200.

resources.yaml

resources.yaml

Описание

Файл, содержащий информацию о всех ресурсах мода. Именно в нём прописываются все невстроенные в игру ресурсы, которые вы хотите использовать в игре. 

Поддерживает следующие параметры:

Большая часть из этих параметров — списки, внутри которых прописываются те или иные ресурсы.

resources.yaml

backdrop_bg

Тип: список ресурсных нодов

Типы принимаемых ассетов: 


Определяет фоны для команды backdrop.

Пример использования:

# resources.yaml
---
  backdrop_bg:
    eli_1: backdrops/eli_1.jpg
    himitsu_2: backdrops/himitsu_2.jpg
    kagome_3: ~@bundle[prefab]://backdrop_kagome_3.prefab #подгрузка префаба из каталога "bundle"

resources.yaml

backdrop_text

Тип: список языковых нодов

Определяет локализируемый текст для команды backdrop.

Пример использования:

# resources.yaml
---
  backdrop_text:
    day1: День 1
    day2: 
      ru: День 2
      en: Day 2
    day3: День 3

resources.yaml

bg

Тип: список ресурсных нодов

Типы принимаемых ассетов: 

Определяет фоны для команды scene.

Ноды данного параметра могут принимать путь к одному или нескольким ассетам:

# resources.yaml
---
  bg:
    ext_road_day: bg/ext_road_day.jpg

В таком случае указанный ассет — bg/ext_road_day.jpg — будет использоваться вне зависимости от настроек анимации фонов в игре.

Чтобы задать разные ассеты для разных настроек анимации, следует указывать пути внутри параметров static и anim:

# resources.yaml
---
  bg:
    ext_road_day:
      static: bg/ext_road_day.jpg
      anim: ~@bundle[prefab]://bg/ext_road_day.prefab #префаб анимированного фона из каталога "bundle"
    int_bus_day:
      static: bg/int_bus.jpg
      anim: bg/int_bus_2.jpg #статичное изображение, однако оно будет использоваться, если в настройках игры включена анимация фонов

Если один из параметров не указан (static или anim), то в обоих режимах будет использоваться ассет указанного параметра.

resources.yaml

cg

Тип: список ресурсных нодов

Типы принимаемых ассетов: 

Определяет цг для команды scene.

Синтаксис полностью идентичен bg, отличается только название нода: 

# resources.yaml
---
  cg:
    d1_rena_sunset: cg/d1_rena_sunset.jpg
    d3_dv_guitar:
      static: cg/d3_dv_guitar.jpg
      anim: ~@bundle[prefab]://cg/d3_dv_guitar.prefab


resources.yaml

catalogs

Тип: список ресурсных нодов

Определяет Unity-каталоги для загрузки ассетов.

В нодах указывается путь к .json файлу собранного каталога:

# resources.yaml
---
  catalogs:
    bundle: catalogs/bundle/catalog.json #определение каталога "bundle"

Каталог должен лежать внутри папки мода и не может находится внутри другого каталога

Также можно указать каталоги для разных платформ:

# resources.yaml
---
  catalogs:
    bundle: #определение каталога "bundle" под разные платформы
      windows: catalogs/bundle/win/catalog.json
      linux: catalogs/bundle/linux/catalog.json
      macos: catalogs/bundle/mac/catalog.json
      android: catalogs/bundle/android/catalog.json
      ios: catalogs/bundle/ios/catalog.json

Список доступных плафторм:

Если платформа не указана (как в первом примере), то будет выставлено значение по умолчанию — windows.

После определения каталога, вы можете использовать ассеты из него при помощи следующего синтаксиса:
~@имяКаталога://адресАссета

Тип ассета указывается в квадратных скобках после имени каталога:
~@имяКаталога[типАссета]://адресАссета

Если тип не указан, будет использован тип по умолчанию в зависимости от параметра.

Примеры использования путей с каталогом "bundle":
~@bundle://bg/bus_stop # ассет с адресом bg/bus_stop из каталога
~@bundle[prefab]://bg/bus_stop # префаб с адресом bg/bus_stop из каталога

resources.yaml

characters

Тип: список

Определяет статичные спрайты персонажей для команды show.

Внутри нода прописываются ноды с параметрами статичных (неанимированных) спрайтов персонажей:

# resources.yaml
---
  characters:
    dv:
      # ... параметры
    un:
      # ... параметры
    sl:
      # ... параметры
    us:
      # ... параметры

Каждый спрайтовый нод может содержать следующие параметры:

poses

Тип: список

Определяет позы спрайта.
Под позами понимаются различные вариации спрайта: