| 2026-09-07 |

perf(assets): параллельная загрузка и ленивый амбиент
...
О-4. AssetLoader грузил ключи await-в-цикле (~45 последовательных запросов);
BootScene — 4 атласа и карты друг за другом; 2.3 МБ WAV амбиента всех областей
декодировались до меню, хотя играется в первую очередь луговой.
- AssetLoader.load: один Assets.load(массив URL, onProgress) — Pixi грузит
параллельно, onProgress честный по группе; пост-обработка nearest по всем
результатам. API не изменился.
- BootScene.loadAll: Promise.all по группам (текстуры / 4 атласа / карты
областей / шрифт+аудио) с общим взвешенным прогресс-баром (0.6/0.15/0.15/0.1).
- Ленивое амбиент-аудио: регистрируются все ключи (дёшево), декодируются
только лупы стартовой области (data/audio.ts areaAudioKeys); остальные —
фоновый game.preloadAudio при входе в область (LocationScene.enter).
playAmbience/playLoop и раньше умели декодировать на месте (BufferCache
дедуплицирует in-flight) — теперь до меню их никто не ждёт.
Perf (swiftshader): bootMs 2947-3191 -> 2781; newGame->location без изменений
(~200 мс, аудио и карты грузились в boot и раньше). agent:check 16/16,
включая аудио-чеки с ленивым декодом.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
14 hours ago
|
chore: ESLint (typescript-eslint, flat config) + npm run lint в check:fast
...
- eslint.config.js: recommended TS для src обоих пакетов + тулз; node/браузерные
глобали для .mjs-сценариев и редактора диалогов; no-undef выключен в TS
(глобали DOM/Vite проверяет tsc).
- Попутные находки (8): no-useless-assignment в waitFor-агентах (catch опирается
на init false), тернарник-выражение в StateMachine, причина ошибки в
AssetLoader ({ cause }), неиспользуемые consoleLogs/JSON_SPACE, let->const,
as const в тесте квестов.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
16 hours ago
|
| 2026-09-06 |
Реестр размеров спрайтов: 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>
|
| 2026-09-05 |
рендер: резкий UI при пиксельном мире + тайлы без обводки
...
- Renderer: бэкинг-стор канваса в пикселях устройства (scale × dpr) —
UI и текст рендерятся 1:1 с экраном, без «мыльного» апскейла на HiDPI;
CSS-размер канваса не изменился (виртуальное × целое)
- PixelText: setPixelTextResolution — глифы растеризуются с resolution
канваса (синхронизирует Renderer при смене масштаба)
- AssetLoader: текстуры мира (и кадры атласов) сэмплируются nearest —
пиксель-арт остаётся чётким квадратным
- тайлы без обводки граней (fillDiamond без light/dark линий):
смежные тайлы сливаются в поля, сетка больше не «шумит»
- доки: render.md (двухслойный пайплайн), ui-and-dialogue.md (resolution
текста), CLAUDE.md (правило №2)
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
2 days ago
|
Миграция игры на новые 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>
root
committed
2 days ago
|
engine: Tween+easing, fade-переходы, ресайз, IsoDepthLayer, GameState, RNG, StateMachine, DialogueRunner, Settings, атласы, PixelText+VT323, UI-кит, частицы, геймпад, тач-джойстик, аудио-шины, формат карт+Tiled
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
2 days ago
|
Фиксы рендера, камера с границами, смоук-тест
...
- Renderer: ждём app.init() до обращения к renderer (баг чёрного экрана)
- AssetLoader: Assets.init() до первой загрузки (иначе load виснет навсегда)
- Camera: границы {x,y,width,height} — изометрический ромб уходит в минус по X
- арт: пепельные бугры темнее (не читались как пепел), favicon-заглушка
- tools/smoke.mjs: смоук-тест в реальном Chromium (puppeteer-core) —
headless --virtual-time-budget зависает на декодинге картинок
- CLAUDE.md: раздел «известные грабли»
Co-Authored-By: Claude Code <noreply@anthropic.com>
gbook
committed
2 days ago
|
Скелет проекта: свой движок + изометрическая RPG
...
- packages/engine: жанронезависимый движок (цикл, сцены, ECS, ввод, камера,
изометрия 2:1, A*, сейвы, диалоги, анимация) на PixiJS-бэкенде
- apps/game: первый вертикальный срез — меню, локация «Выжженные луга»,
герой с click-to-move, 2 NPC с диалогами, автосейв по Esc
- CLAUDE.md, README.md, workspaces + Vite + Vitest
Co-Authored-By: Claude Code <noreply@anthropic.com>
gbook
committed
2 days ago
|