.dmi. RSI считается «иконкой» и может содержать «состояния» (states), которые являются подразделами этой главной иконки. Эти состояния могут определять пользовательские флаги, анимации и направленные иконки «из коробки».
RSI — это папка с именем, оканчивающимся на .rsi, которая содержит meta.json и один или несколько PNG-файлов в соответствии с именами состояний.
Метаданные изображения (что определяет состояния, анимации и т.д.) хранятся в файле meta.json в формате JSON. Фактические спрайты хранятся в спрайт-листах в виде PNG-файлов в папке. Каждому уникальному состоянию соответствует спрайт-лист с тем же именем.
JSON
Корень JSON-файла содержит следующие значения:Состояния
Состояние — это контейнер для метаданных определённого спрайт-листа. Они хранят данные, связанные с их спрайт-листом, такие как задержки анимации и направления. Состояние имеет сопровождающий спрайт-лист. Состояния имеют одно поле, которое можно использовать для их различения:
Состояния не могут иметь одинаковое идентифицирующее значение. Два состояния с одинаковым именем не могут существовать.
Помимо идентификатора, состояние имеет три других поля, связанных с фактическими спрайтами, отображаемыми в игре:
Состояния всегда упорядочены по алфавиту по соответствующему имени файла.
Направления
В настоящее время поддерживаются три типа направлений:1 (без направлений), 4 (Север Юг Запад Восток) и 8 (Север Юг Запад Восток плюс диагонали).
Эти направления упорядочены (для компоновки в поле delays и порядка в спрайт-листе) в следующем порядке:
- Юг
- Север
- Восток
- Запад
- Юго-Восток
- Юго-Запад
- Северо-Восток
- Северо-Запад
Спрайт-лист
PNG-файл, сопровождающий состояние, всегда называется именем состояния. Например, состояние с именем “hello” будет файломhello.png на диске.
Файл содержит отдельные состояния, разрешённые с помощью направлений и задержек состояния. Размер файла всегда кратен size RSI. Спрайты упорядочиваются сверху слева направо вниз, всегда сначала по горизонтали. Количество спрайтов в строке или столбце всегда делается максимально равным, при этом строки предпочтительно длиннее столбцов, если количество состояний не делится идеально.
Спрайты записываются сгруппированными по направлениям, затем записывается каждая иконка в направлении по порядку. Таким образом, для 4 направлений сначала записываются ВСЕ южные состояния, затем северные и т.д.
Пример JSON
Обратите внимание, что на практике JSON-писатель, вероятно, записывает максимально компактный JSON для уменьшения размера файла.Параметры загрузки
Ключload позволяет задавать различные параметры загрузки, которые изменяют то, как движок загружает спрайт. Ключи следующие:
Цели дизайна
- Редактирование RSI должно быть возможно без специальных инструментов. Это означает отсутствие бинарных метаданных или метаданных внутри PNG-файлов.
- Оно должно легко поддаваться сравнению (diff) на GitHub.
- Оно не должно слишком сильно раздувать историю Git при внесении изменений (предотвращать большие перезаписи файлов).
- Один PNG — одно изображение.