| 2026-09-06 |

Батч 2: интерьеры и интерактивные объекты
...
- Интерьеры house_elder/shop: buildInteriorMap (тайлы FLOOR/WALL), двери
кликом внутрь, выход через проём (transition kind 'return' по returnTo).
- InteractableDef/INTERACTABLES: реакции по when (flag/notFlag/varAtLeast),
once -> флаг used:<id>, эффекты setFlags/clearFlags/setVar/gives/sound.
- Системы: resolveInteractable (чистый) + Interactables (InteractSink);
pendingInteraction в LocationScene, подписи объектов при близости.
- Сундук/очаг/записка (дом Ирвина), прилавок (лавка Милы).
- Снапшот interactables; GameAgent.waitFor ждёт по полному снапшоту игры.
- Валидатор: переходы в существующие области + объекты в границах.
- Сейвы v3 (returnTo), миграция v1/v2.
- Исправление: колодец (22,20) перенесён в buildMeadowsMap (индекс 582
за пределами 28x20 молча дорастал массив).
- Сценарий tools/checks/interact.mjs (7 проверок); тесты резолвера/рантайма.
- Доки: agent.md (waitFor по полному снапшоту, валидация), practices.md
(ситуация «интерьер/объект»), demo.md, CLAUDE.md.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
11 hours ago
|
| 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
11 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
|
пейзажная фауна: безгласные олени и мотыли
...
- спрайты chars/fauna_deer_1/2.png (выцветший, без тёплых пикселей)
-> атлас chars/fauna_sheet.json, грузится в BootScene
- FaunaSystem: мини-StateMachine (idle/wander/approach) - стоит,
бродит по соседним тайлам, на громкий звон рядом подходит к источнику
- мотыли: серые частицы, дрейф вверх от точки звона (combat:attack)
- спавны: два оленя на лугах, один у прудов
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
13 hours ago
|
зоны наката у прудов + полотно-маска; починен атлас героя
...
- HazardDef в locations.ts: разметка низин у Серых прудов (требуют cloth)
- герой в накате без маски: скорость x0.5, дымка-оверлей, тост при входе;
с полотном - только лёгкая дымка
- звон как 'проверка воздуха': резонанс в низине подсвечивает пепел
вспышками и шипением
- PlayerController.speedMul - множитель скорости, управляется сценой
- фикс: hero_sheet собирался data.set с неверным строковым шагом -
кадры жались в полосы; теперь построчное копирование
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
13 hours ago
|
локация Звенец: деревня-хаб вокруг башни с колоколом
...
- buildZvenetsMap (28x20): площадь, тропа с лугов, башня-талл 2.5 юнита,
три дома-талла 1.75 юнита; безопасный хаб без врагов
- спрайты tiles/tower.png и tiles/house.png в генераторе арта
- Ирвин и Мила переезжают в Звенец (диалоги без изменений)
- луга получают обратный переход в Звенец (26,14) с расчисткой
- амбиент-трек music/zvenets: низкий колокольный тон из рельсов
- смоук tools/smoke-zvenets.mjs, чеклист арт-библии и доки
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
14 hours ago
|
игра: вторая локация «Серые пруды» — карты-файлы .map, переходы, сейв-слоты
...
- encodeMap/parseMap: карты локаций теперь файлы assets/maps/*.map (RLE v1),
генерируются тестом tools/maps/gen.test.ts (npm run maps), грузятся в BootScene
- LocationScene параметризована LocationDef (spawn, NPC, враги, выходы, амбиент);
Серые пруды: гладь воды, туман-частицы, 5 сгустков, обратный переход
- переход между локациями по тайлу-триггеру с fade и точкой входа
- SaveSlotsScene: меню сейвов (autosave + 3 слота, listSlots/delete)
- хук window.__game (dev) для смоук-тестов; tools/smoke-ponds.mjs — сценарий перехода
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
16 hours ago
|