| 2026-09-05 |

Батч 1: единый механизм переходов + телепортация
...
- data/locations.ts: TransitionDef/TransitionTarget/AreaDef/AREAS/areaOf —
выходы между областями (step) и двери/колодцы (click) в одном механизме
- data/transitions.ts: чистый resolveTransition (триггер, условия
requiresFlag/requiresItem с lockedText, дисарм тайла входа) + 8 тестов
- LocationScene: checkExits -> checkTransitions, клик-переходы в
handleWorldClick (NPC -> переход -> остальное), returnTo для kind 'return',
тост «заперто» без спама, дисарм при входе через переход
- Сейвы v3: SaveData.area + returnTo, normalizeSave для v1/v2
- Новые тайлы FLOOR/WALL/WELL + арт (колодец — бронзовый обруч), WELL на
карте: парные колодцы Звенец (9,6) <-> луга (22,20), duration 0.2
- Валидатор: переходы вместо exits (существование области, entry проходим)
- tools/checks/transitions.mjs (step + клик туда/обратно + снапшот) в check
- docs: практики (мимо-картная запись в генераторе, async-шаг Checks),
дорожная карта, легенда колодцев в world.md
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
12 hours ago
|

Батч 0: агентный набор инструментов (мост, валидация, CLI, доки)
...
Движок (packages/engine/src/agent/):
- types.ts: SceneAgent/AgentHost/Invariant/SnapshotLayer — каркас жанронезависим
- EngineAgent: снапшот+инварианты, step/waitFor, атомарные tapVirtual/press/key
- invariants.ts: checkFinite/checkRange/checkBounds/checkWalkable
- Engine.stepTick/stepTicks/tickCount; GameLoop.setManual/resetTiming
- InputManager.inject*: инъекция через те же структуры ввода
- DialogueRunner: nodeId/choices/waitingForChoice раскрыты для снапшота
Игра (apps/game):
- agent/GameAgent.ts: window.__agent (DEV): snapshot/step/waitFor/walkTo/runDialogue
- agent/snapshot.ts: чистые слои hero/enemies/npcs/dialogue/game
- data/validate.ts: runtime-валидация контента → Invariant[] (нашла 4 врага на воде)
- сцены реализуют SceneAgent: whitelist-команды, lastToast в снапшоте
Инструменты и доки:
- tools/agent-lib.mjs (openGame/AgentClient/Checks), tools/agent.mjs (CLI check/run/snapshot/screenshot/dev)
- tools/checks/agent-invariants.mjs; смоуки переписаны на мост; maps:fresh в gen.test.ts
- docs/llms.txt, docs/engine/agent.md, docs/engine/practices.md (живой документ)
- CLAUDE.md, docs/engine/README.md, docs/demo.md обновлены
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
12 hours ago
|
Батч 6: CutsceneRunner + кат-сцена сдачи квеста
...
- Движок: packages/engine/src/cutscene/CutsceneRunner.ts — view-агностичный
раннер шагов (call/cameraMove/burst/wait/setFlag); шаг с seconds: 0 —
параллельный; 5 тестов.
- Демо: кат-сцена сдачи «Трёх цветков» — посадка → камера к башне →
удар колокола (звон, shake, кольцо) → зелень → финальный тост.
- Смоук tools/smoke-act1.mjs: полный прогон акта 1 от «Новой игры»
до кат-сцены (сцелиться в тайл триггера, диалог через Space).
- Доки: docs/engine/cutscene.md, README (карта + структура),
docs/demo.md (матрица, дорожная карта — следующий срез: телепортация,
интерьеры, взаимодействие, ИИ врагов), CLAUDE.md (грабля клика вне экрана).
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
13 hours ago
|
Фаза 5: документация и смоуки мировых юнитов
...
- docs/engine/render.md: преамбула «мир в юнитах, экран в px», Camera
в юнитах, deadZonePx, правило display-слоя для частиц;
- docs/engine/maps.md: секция мировых юнитов (worldToScreen/screenToWorld/
unitsToPx), TallSpec.height в юнитах, worldBounds вместо screenSize;
- docs/engine/recipes.md: скелет локации и click-to-move в юнитах;
- docs/engine/README.md: принцип №3 «мир в юнитах, UI в пикселях»;
- docs/demo.md: боевая модель в юнитах;
- CLAUDE.md: правило №4 (две линейки), грабли (ромб/указатель/facing);
- смоуки и пробы пройдены (smoke, smoke-ponds, smoke-quest, walk-probe,
cam-probe, far-test) — рендер, переходы, квест и камера в норме.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
15 hours ago
|
доки: Camera.deadZone/snap и SpriteDebugView
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
15 hours ago
|
движок: дистанция взаимодействия + findPathToNeighbor
...
- pathfinding.findPathToNeighbor(grid, start, goal): путь к ближайшей
проходимой клетке рядом с goal (8-соседство) — цель может быть занята
NPC/объектом или непроходима; тесты (3 новых)
- PlayerController.followPath: пойти по готовому пути тайлов
- LocationScene: клик по NPC/цветку срабатывает только в радиусе 44px;
издалека герой подходит к краю тайла и взаимодействие срабатывает
на месте; исключение — force у requestTalk (сюжетные триггеры)
- доки: maps.md (findPathToNeighbor), demo.md (новое в движке)
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
15 hours ago
|
рендер: резкий 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
16 hours ago
|
доки: docs/demo.md (витрина среза), обновление docs/engine, README, CLAUDE
...
- docs/demo.md: внутренняя проектная дока — матрица «подсистема → где показана»,
сюжетная рамка, боевая модель, новое в движке, дорожная карта
- docs/engine: maps.md — setTile; input.md — мульти-биндинг; ui-and-dialogue.md — DebugOverlay
- README: команды art/maps, счётчик тестов, управление срезом
- CLAUDE.md: новые команды и грабли (autoplay, мульти-биндинг, пространства координат)
- tools/smoke-ponds.mjs: доведён до устойчивого кругового перехода луга->пруды->луга
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
16 hours ago
|
engine: примитивы боя — Shake+Camera, shapes, Cooldown, TintFlash, particleSim, burst/oneShot, justReleased, transitionAny
...
- render/shake.ts + Camera.addShake/clearShake/update (Engine.tick тикает камеру)
- math/shapes.ts: inCircle, inCone, angleBetween, nearest
- core/Cooldown.ts: кулдаун на фиксированном шаге
- anim/flash.ts (TintFlash, lerpColor) + render/spriteFx.ts (SpriteFlash)
- render/particleSim.ts: чистая интеграция частиц; Particles.burst/oneShot + radialSpeed
- InputManager: isActionJustReleased, wasKeyReleased, pointer.downTicks
- StateMachine.transitionAny — переход из любого состояния
- Тесты: shapes, Cooldown, shake, flash, particleSim, InputManager (фейковый canvas), transitionAny (130 всего)
- docs/engine: core.md, render.md, input.md обновлены
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
17 hours 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
18 hours ago
|