| 2026-09-06 |
Батч 6: варианты текстур тайлов (микс по хэшу координат)
...
- engine: hashTile(x,y,seed) — чистый хэш координат (math/rng.ts)
- engine: TileMapData.variants + setTileVariants + публичный variantOf;
анимация сильнее вариантов (setTileAnimation снимает их)
- engine: MapFileV1.variants (строковые ключи) + validateVariants в parseMap
- game: GRASS_V1/V2, ASH_V1, PATH_V1 (id 11-14), GROUND_VARIANTS в трёх
генераторах карт, новые текстуры в ASSET_KEYS и tileTextures()
- art: grass_2/grass_3/path_2/ash_2 (32×16, та же палитра, другой seed)
- тесты: hashTile (детерминизм/разброс), выбор варианта стабилен при setTile,
анимация vs варианты, round-trip + валидация variants
- доки: maps.md (раздел «Варианты текстур»), art-style.md, art-pipeline.md
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
19 hours ago
|
Реестр размеров спрайтов: sizes.mjs + AssetLoader.frameSize
...
Единый источник номиналов для тулз (gen.mjs, lint-art.mjs), рантайм
читает размер кадра из атласного JSON. Захардкоженные 16×24/16×16
заменены ссылками на реестр; VIRTUAL-дубли 480/270 в сценах — на
Game.VIRTUAL_W/H; маркер NPC считается от реальной высоты кадра.
- tools/pixelart/sizes.mjs: SIZES (tile/tall/prop/char/fauna/clump/decor)
+ SLOTS для линтера; тест sizes.test.ts
- gen.mjs, lint-art.mjs: импорт из реестра вместо локальных констант
- AssetLoader.frameSize(key, frameName?) — sourceSize из атласного JSON
- IsoLayout как параметр игры — отложено (docs/plan.md)
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
20 hours ago
|

feat(tools): батч 3 — тулзы кадров + animations в атласах
...
- engine/tools/frames.mjs: производные кадры из опорных — shiftFrame,
bobFrame (парение), squashFrame (приседание), swingFrame (nearest-
поворот вокруг опоры), mirrorFrame, deriveCycle (дескрипторы)
- buildAtlas(..., animations) — Record<имя, number[]> → JSON.animations
(формат Pixi); assets.animation() оживает
- gen.mjs: вода двумя кадрами (tiles/water_1/2, блики сдвинуты на 1px),
атласы героя/фауны/сгустков собираются через buildAtlas с animations,
новый chars/npcs_sheet (idle-кадры NPC через bobFrame); сгустки в
ячейке 20×20 теперь по центру (было прижато влево — спрайты врагов
центрируются точнее)
- aiart/atlas.mjs: инлайн-бобинг → squashFrame (вывод идентичен),
animations из frameSets
- игра: ключи воды water_1/water_2 (старый tiles/water удалён)
- ассеты перегенерированы вместе с генераторами (npm run art, art:lint ok)
- доки: art-pipeline.md (frames.mjs, animations), assets-audio-save.md
- тесты: frames (8), buildAtlas animations (2) — итого 369
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 hours ago
|
aiart: примерка tryon + бобинг walk-кадров; фикс startDevServer (cwd)
...
- tryon.mjs: примерка AI-сборки в игре до promote — подмена целевого
атласа, rename кадров <id>_ → hero_ (контракт LocationScene),
скриншот героя в локации, восстановление файлов в finally.
- Бобинг: при bob:true 2-й кадр = 1-й, сдвинутый вниз на 1px —
различимая ходьба из одинаковых поз стоя; манифест bob:true.
- agent-lib startDevServer: опция cwd (приложение передаёт каталог с
index.html — vite от корня репо отдавал 404), spawn detached +
kill группы (зомби-дети npx держали порт), детект выхода при занятом
порте; игровой lib.mjs по умолчанию cwd apps/game; docs/engine/agent.md.
- meta.image в buildAtlas — basename (Pixi резолвит относительно URL
JSON; путь с каталогом давал /chars/chars/… и 404).
- docs/plan.md: статус проекта — техно-демка движка.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
22 hours ago
|
feat(aiart): палитровый ремапер + линтер арта
...
recolor.mjs — перекраска квантованного спрайта по ключам палитры/hex (CLI +
поле remap в манифесте атласов: плащ звонаря приведён к каноническим C0/C1).
lint-art.mjs (npm run art:lint) — авто-чеклист арт-библии: палитра, слоты,
детект «мыла»; все 31 кодовых ассета и AI-атлас проходят, негативы проверены.
Тест ремапера (3). Доки plan.md, art-pipeline.md, CLAUDE.md.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
22 hours ago
|
feat(engine/tools): findFigures/resizeRect + buildAtlas — основа AI-пайплайна атласов
...
imaging.mjs: автодетект фигур на однотонном фоне (связные компоненты) и
nearest-даунскейл прямоугольника с фоном-прозрачностью. atlas.mjs: сборка
кадров в строку + Pixi Spritesheet JSON. 8 тестов. Дока art-pipeline.md.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
23 hours ago
|
Чистка тулз: пробы-сироты и дублирующие смоуки удалены, доки по новой раскладке
...
- Удалены одноразовые пробы, никем не запускаемые: cam-probe, far-test,
skin-info, skin-probe, walk-probe, font-probe.
- Удалены смоуки, дублирующие checks/: smoke-zvenets и smoke-ponds
(покрываются checks/transitions.mjs), smoke-quest (checks/interact.mjs).
Полный прогон акта 1 — smoke-act1.mjs, базовый — smoke.mjs.
- Доки: CLAUDE.md (правило «общее — в движок, сценарий — в игра»,
packages/engine/tools), docs/engine/{practices,art-pipeline,agent}.md,
docs/demo.md, docs/llms.txt, README.md.
- npm run audio — скрипт для и без того существующего генератора WAV.
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
Архитектура: гвард границы движок/игра + перенос тулз в apps/game/tools
...
- Гвард границы (apps/game/tools/guards/boundary.mjs, npm run guard):
движок не импортирует игру и не выходит из пакета, игра импортирует
движок только через @rpg/engine и @rpg/engine/assets/*. Чистое ядро
покрыто тестами (8 кейсов); проба guard:boundary в agent check.
- tools/ -> apps/game/tools/ (git mv, история сохранена): правка
корне-относительных путей в генераторах и CLI, ROOT-константы
'../../..', npm-скрипты обновлены.
- Доки: CLAUDE.md, llms.txt, docs/engine/*, README — новые пути,
практика «меняю границу движок/игра» и грабля про ROOT тулз.
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
| 2026-09-05 |
Миграция игры на новые API движка + документация docs/engine
...
Игра:
- диалоги переписаны на графы DialogueRunner + GameState (тексты сохранены)
- меню на MenuList, шрифт VT323 через PixelText во всех сценах
- герой из атласа hero_sheet (gen.mjs), акторы в IsoDepthLayer
- пепел через ParticleEmitter, fade-переходы сцен, сейв с GameState
- Vite: publicDir: 'assets', алиас regex, шрифт через ?url-импорт
Документация: docs/engine/ — 10 файлов (архитектура, подсистемы, рецепты).
CLAUDE.md и README.md обновлены под новые модули и грабли.
Co-Authored-By: Claude Code <noreply@anthropic.com>
|