-
Nikitos создал
Пробел из docs/TASKS.md §1.6: лист резался только равномерной сеткой cols×rows×cw×ch, а художники отдают атласы с разными прямоугольниками и названиями анимаций. * parseAtlas()/normalizeFrame(): формат определяется по содержимому, а не по расширению. Aseprite (объект frames + meta.frameTags), TexturePacker/LibGDX (массив с filename), свой простой (карта имя → {x,y,w,h}); поддержаны w/h и width/height, плоский кадр и обёртка frame{}; * теги Aseprite ссылаются на НОМЕРА кадров — собираются по порядку листа; direction: 'reverse' разворачивает список; * $.atlas.load читает JSON через $.fs или принимает data в памяти (ответ сети, тест), путь к картинке берётся из meta.image и считается от каталога JSON; * объект атласа: frame/frames/info/tag/tagSprites/tagInterval/tags/size — tagSprites() даёт готовый вход для $.anim.clip; * повёрнутые кадры пропускаются с записью в журнал, а не рисуются криво. Проверка: tests/js/atlas_test.mjs (7 проверок), полный набор qjs и агентских тестов зелёный.28b951c7