MIL/Руководство

Добро пожаловать на страницу руководства MIL — редактора/компоновщика/загрузчика модов для проектов TurboWarp, сделанного Procybit'ом.

## Интерфейс

Рассмотрим интерфейс MIL:

Главный интерфейс MIL можно разделить на три области: панель управления, проводник и контент-редактор.

### Панель управления

На скриншоте панель управления выделена зелёным. Слева направо она содержит логотип, кнопки управления файлом мода (УФМ), название мода, версию редактора и протокола MIL.

Главными инструментами на панели управления для Вас станут кнопки УФМ. Слева направо это кнопка создания нового файла, кнопка экспорта мода, кнопка импорта мода, кнопка запуска мода и кнопка помощи. Все они нужны для базовой работы с MIL.

Также на панели управления можно найти название мода. По умолчанию оно прописано как `Unnamed` (Без названия). Рядом с названием есть кнопка действия, которая позволяет переименовать мод.

Справа панели указана версия редактора и протокола MIL. Первым элементом идёт код версии (например v0.6), а после - идентификатор версии протокола в скобках, который используется для проверки совместимости.

### Проводник

На скриншоте проводник выделен красным. Он отображает все ресурсы, доступные для редактирования и использования в Вашем моде. В нём всегда виден файл конфигурации `/CONF`, в котором указана вся важная информация для загрузчика MIL, её нельзя изменить напрямую. По кнопке действия этот файл можно только скачать.

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

### Контент-редактор

Синяя область на скриншоте — это контент-редактор, в нём указываются все загружаемые/удаляемые элементы мода. Режим работы контент-редактора можно изменить соответствующей кнопкой вверху редактора. А чтобы создать новый элемент, нужно нажать на соседнюю кнопку. В режиме загрузки можно посмотреть элементы, которые добавятся в игру (они указываются в формате `<ресурс> (<цель>)`), для них можно переместить/переименовать (move) ресурс, к которому они привязаны, цель (scope), указывающую на то, как следует загружать элемент, или можно просто отменить их (revoke). В режиме удаления для элементов указывается только цель, и их также можно отменить.

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

## Пример интеграции

Чтобы MIL вообще имел смысл, нужно интегрировать его в какой-нибудь TurboWarp-проект. Для нашего примера возьмём игру Shoot Gun.

Открывем версию 0.8.1:

Теперь переносим спрайты Sprite1 и MIL из проекта MIL в нашу среду (например, с помощью рюкзака):

Теперь нужна настройка. Переходим в Sprite1 и меняем код следующем образом:

* Шапку `когда спрайт нажат` меняем на `когда клавиша [m v] нажата`.
* Блок `показаться` заменяем на `спрятаться`.
* Прописываем `~?GAME ID` как sg — это будет идентификатор нашего интегрированного загрузчика (пожалуйста, не используйте этот ID в своих оригинальных загрузчиках модов для Shoot Gun, измените его хоть немного, чисто sg можно использовать только Maximka310 как создателю игры).

Должно получиться что-то типа этого:

Перед запуском обязательно сохраните проект как загрузчик модов (чтобы не перепутать с оригинальной версией и можно было много раз запускать моды). Теперь можно запустить игру, и, если мы нажмём M на клавиатуре, запустится редактор MIL:

Конечно, желательно останавливать все параллельные процессы в таких проектах как Shoot Gun, когда запускается MIL. Но обычно ему ничего не мешает работать.

## Пример создания мода

### Подготовка

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

Сделаем мод, где наш обычный синий Mr. Stick будет заменяться на красного и говорить другую фразу приветствия. Во-первых, заменим спрайт самого М-ра Стика (перекрасим костюмы, модифицируем код), после чего экспортируем:

Нажав на "export", мы можем сохранить файл с расширением .sprite3.

Теперь перерисуем табличку, которая выскакивает при входе в магазин, эскпортируем как растровое изображение (.png):

НА ДАННЫЙ МОМЕНТ НЕТ ВОЗМОЖНОСТИ ЗАГРУЖАТЬ ВЕКТОРНЫЕ (.SVG) ИЗОБРАЖЕНИЯ ЧЕРЕЗ MIL ИЗ-ЗА ТЕХНИЧЕСКИХ ОГРАНИЧЕНИЙ.

### Добро пожаловать в редактор

Создавать наш демонстрационный мод будем в загрузчике, который мы сделали в предыдущем разделе. Запускаем его:

Первым делом переименуем наш мод. Для этого нажмём на кнопку действий около названия (стрелка 1):

Теперь создадим два элемента мода, нажав два раза по кнопке создания в режиме загрузки контента (стрелка 2, рядом плюсик):

Около каждого элемента есть кнопка действий. С помощью этой кнопки и опции "Move resource" в ней мы можем переименовать созданные элементы (пишем новое имя):

Сразу можем загрузить ресурсы для этих элементов. По кнопке действий около ресурса в проводнике (стрелка 2.1) выбираем "Upload new" и загружаем наши файлы (.png в sign, .sprite3 в redstick). Теперь нужно прописать цели для них, через кнопку действий элемента выбираем "Move scope" и прописываем

* "sp" для redstick (спрайт),
* "ct.Магазин//Табло покупки.hello2" для sign (костюм, путь пишем с учётом папок):

Так как мы хотим перезаписать эти элементы, нам нужно обязательно указать, что мы хотим удалить. Переключаем режим в удаление (стрелка 3, появится корзина), и создаём два элемента:

Теперь, нужно переместить их цели, что похоже на то, что мы уже делали. Нажимаем на кнопки действий, выбираем "Move scope" и прописываем

* "sp.Магазин//Mr. Stick" в один,
* "ct.Магазин//Табло покупки.hello2" в другой (порядок не важен):

Остаётся сохранить мод на кнопку экспорта (стрелка 4, не перепутайте) и запустить его (стрелка 5):

## Протокол MIL

Основой мода MIL является zip-архив, содержащий файлы ресурсов и файл конфигурации для мода. В таком архиве не должны использоваться папки, все файлы помещаются в корневую директорию архива.

Каждый файл ресурса — это либо двоичные данные, закодированные в data URL, либо просто URL-ссылка на файл в интернете.

Файл конфигурации (`/CONF`) — JSON-объект, содержащий информацию для загрузчика. Ниже представлена структура этого файла:

Дерево делится на две главные части: мета-информацию (`common`, выделена розовым), содержащую версию протокола, ID игры и название мода, и сам контент (`content`).

Контент, загружаемый в игру прописан в массиве `loadable`, удаляемый из игры — `removable`. Для загружаемого контента прописывается ресурс (`resource`) и цель (`scope`), для удаляемого — только цель.

Формат цели (scope)
 Расширение
 Спрайт
 Костюм