Формат RSI (Robust Station Image) предназначен для гибкого, открытого и читаемого способа определения иконок внутри спрайт-листов, аналогично формату BYOND .dmi. RSI считается «иконкой» и может содержать «состояния» (states), которые являются подразделами этой главной иконки. Эти состояния могут определять пользовательские флаги, анимации и направленные иконки «из коробки».
RSI — это папка с именем, оканчивающимся на .rsi, которая содержит meta.json и один или несколько PNG-файлов в соответствии с именами состояний.
Метаданные изображения (что определяет состояния, анимации и т.д.) хранятся в файле meta.json в формате JSON. Фактические спрайты хранятся в спрайт-листах в виде PNG-файлов в папке. Каждому уникальному состоянию соответствует спрайт-лист с тем же именем.
JSON
Корень JSON-файла содержит следующие значения:
| Ключ | Значение |
|---|
version | Простое целое число, соответствующее версии формата RSI. Может использоваться для определения версии RSI и позволяет реализации корректно включать режимы обратной совместимости при необходимости. |
size | Размеры спрайтов внутри RSI, хранящиеся в виде ассоциативного списка {x: ?, y: ?}. Это не размер PNG-файлов, хранящих спрайт-лист. Используется для корректного выделения отдельных спрайтов из файлов спрайт-листов. |
states | Список состояний, которые хранят основное содержание RSI (см. ниже). |
license | Обязательно. Действительный SPDX License Identifier, применяемый к данной работе. |
copyright | Обязательно. Произвольная информация об авторских правах, такая как имя, источник и т.д. |
load | Специальные параметры загрузки, которые изменят то, как движок интерпретирует спрайты. |
metaAtlas | Логическое значение, указывающее, добавляется ли спрайт в общий атлас при загрузке. Включено по умолчанию, должно быть отключено для больших, редко используемых RSI. |
Состояния
Состояние — это контейнер для метаданных определённого спрайт-листа. Они хранят данные, связанные с их спрайт-листом, такие как задержки анимации и направления. Состояние имеет сопровождающий спрайт-лист.
Состояния имеют одно поле, которое можно использовать для их различения:
| Ключ | Значение |
|---|
name | Имя состояния. Может содержать только строчные буквы, цифры и некоторые специальные символы (_-). |
Состояния не могут иметь одинаковое идентифицирующее значение. Два состояния с одинаковым именем не могут существовать.
Помимо идентификатора, состояние имеет три других поля, связанных с фактическими спрайтами, отображаемыми в игре:
| Ключ | Значение |
|---|
flags | Ассоциативный список key: object для определения дополнительных данных. В настоящее время ещё не используется. Опционально. |
directions | Число, соответствующее количеству направлений, которые имеет состояние. Должно быть 1, 4 или 8. |
delays | Может быть опущено. Если определено, список списков задержек для анимированного состояния иконки. Каждый список в списке соответствует направлению. Задержки — это числа с плавающей точкой (float), представляющие секунды. |
Состояния всегда упорядочены по алфавиту по соответствующему имени файла.
Направления
В настоящее время поддерживаются три типа направлений: 1 (без направлений), 4 (Север Юг Запад Восток) и 8 (Север Юг Запад Восток плюс диагонали).
Эти направления упорядочены (для компоновки в поле delays и порядка в спрайт-листе) в следующем порядке:
- Юг
- Север
- Восток
- Запад
- Юго-Восток
- Юго-Запад
- Северо-Восток
- Северо-Запад
Спрайт-лист
PNG-файл, сопровождающий состояние, всегда называется именем состояния. Например, состояние с именем “hello” будет файлом hello.png на диске.
Файл содержит отдельные состояния, разрешённые с помощью направлений и задержек состояния. Размер файла всегда кратен size RSI. Спрайты упорядочиваются сверху слева направо вниз, всегда сначала по горизонтали. Количество спрайтов в строке или столбце всегда делается максимально равным, при этом строки предпочтительно длиннее столбцов, если количество состояний не делится идеально.
Спрайты записываются сгруппированными по направлениям, затем записывается каждая иконка в направлении по порядку. Таким образом, для 4 направлений сначала записываются ВСЕ южные состояния, затем северные и т.д.
Пример JSON
Обратите внимание, что на практике JSON-писатель, вероятно, записывает максимально компактный JSON для уменьшения размера файла.
{
"version": 1,
"license": "CC0-1.0",
"copyright": "GitHub @PJB3005",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "hello",
"flags": {},
"directions": 4,
"delays": [
[1, 1, 1],
[2, 3, 4],
[3, 4, 5],
[4, 5, 6]
]
}
]
}
Параметры загрузки
Ключ load позволяет задавать различные параметры загрузки, которые изменяют то, как движок загружает спрайт. Ключи следующие:
| Ключ | Значение |
|---|
srgb | Логическое значение, указывающее, интерпретируется ли спрайт как sRGB шейдерами и т.д. По умолчанию true. |
Цели дизайна
- Редактирование RSI должно быть возможно без специальных инструментов. Это означает отсутствие бинарных метаданных или метаданных внутри PNG-файлов.
- Оно должно легко поддаваться сравнению (diff) на GitHub.
- Оно не должно слишком сильно раздувать историю Git при внесении изменений (предотвращать большие перезаписи файлов).
- Один PNG — одно изображение.
Последнее изменение 21 июня 2026 г.