Документация
Docs/ru/reference/image-format/fofrm.md
Справочник descriptor FOFRM
Сгенерированный справочник. Не редактируйте его напрямую. Обновите
BuildTools/ImageFormatInterface.json, затем выполнитеpython BuildTools/docs_image_format.py --write.
| Индекс | Форматы | FOFRM | Параметры | Запекание | Runtime | Проверка | Канонический JSON | Руководство |
FOFRM является авторским слоем композиции статических изображений, анимаций, наборов направлений и импортированных legacy-источников. Ссылки задаются относительно каталога descriptor.
| Стабильный ID | Поле/правило | Требование | Причина | Источник |
|---|---|---|---|---|
image-format.field.fps |
fps / Fps | FOFRM сначала читает lowercase fps, затем legacy Fps; ноль создаёт непроигрываемый sheet, а production-значения анимации также должны сохранять положительную полную длительность кадра. | Авторские count и fps определяют AnimTicks всего sheet, а runtime playback делит эту длительность на расплющенное число кадров. | Source/Tools/ImageBaker.cpp |
image-format.field.count |
count / Count | Count задаёт число ссылок descriptor в каждом направлении, по умолчанию равен единице и должен быть положительным; он не обязательно совпадает с итоговым числом кадров после flattening. | Каждый источник по ссылке сам может содержать несколько кадров. | Source/Tools/ImageBaker.cpp |
image-format.field.sequence-offset |
offs_x / offs_y и OffsetX / OffsetY | Sequence offsets являются знаковыми и могут задаваться в корне или каждом разделе направления; явно задавайте оба значения в каждом направлении, потому что пропущенные значения переносятся дальше. | Parser повторно использует текущие переменные ox/oy, а не сбрасывает их для каждого направления. | Source/Tools/ImageBaker.cpp |
image-format.field.effect |
effect / Effect | Parser принимает effect/Effect в FrameCollection.EffectName для совместимости, но ImageBaker не сериализует и не применяет его, а штатный runtime никогда не выбирает effect из этого поля. | Авторы не должны считать разобранное, но неиспользуемое поле частью render-контракта. | Source/Tools/ImageBaker.cpp, Source/Tools/ImageBaker.h |
image-format.field.direction-section |
[dir_N] / [Dir_N] | Descriptor либо однонаправленный, либо предоставляет каждое направление карты Engine; частичные наборы направлений и последующие разрывы отклоняются. | SpriteSheet принимает ровно одно направление или GameSettings::MAP_DIR_COUNT направлений. | Source/Tools/ImageBaker.cpp, Source/Client/DefaultSprites.cpp |
image-format.field.frame-reference |
frm / Frm и frm_N / Frm_N | Каждый авторский slot descriptor разрешает один относительный путь изображения; только slot ноль также принимает ненумерованный alias frm/Frm. | Ссылки объединяются с каталогом descriptor и затем диспетчеризируются по расширению ресурса. | Source/Tools/ImageBaker.cpp |
image-format.field.frame-delta |
next_x_N / next_y_N и NextX_N / NextY_N | Дельты кадров descriptor прибавляются к импортированным NextX/NextY каждого расплющенного дочернего кадра. | Так сохраняется смещение исходного формата и одновременно допускается авторская корректировка композиции. | Source/Tools/ImageBaker.cpp |
image-format.field.flattening |
Flattening вложенной последовательности | FOFRM добавляет последовательность Main каждого дочернего ресурса; наборы направлений и sequence offsets ребёнка не компонуются, а все авторские направления родителя должны давать одинаковое итоговое число кадров после flattening. | Merge loop копирует только child frames Main и проверяет каждое последующее направление по collection.SequenceSize. | Source/Tools/ImageBaker.cpp |
image-format.field.timing |
Timing всей последовательности FOFRM | FOFRM вычисляет длительность всей последовательности по авторскому count descriptor, а не по расплющенному числу дочерних кадров; нулевой fps даёт нулевые ticks. | Поэтому вложенные анимированные ссылки могут изменить эффективный темп кадров, если автор не учёл flattening. | Source/Tools/ImageBaker.cpp |