| 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
12 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
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
|
пейзажная фауна: безгласные олени и мотыли
...
- спрайты 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
14 hours ago
|
зоны наката у прудов + полотно-маска; починен атлас героя
...
- HazardDef в locations.ts: разметка низин у Серых прудов (требуют cloth)
- герой в накате без маски: скорость x0.5, дымка-оверлей, тост при входе;
с полотном - только лёгкая дымка
- звон как 'проверка воздуха': резонанс в низине подсвечивает пепел
вспышками и шипением
- PlayerController.speedMul - множитель скорости, управляется сценой
- фикс: hero_sheet собирался data.set с неверным строковым шагом -
кадры жались в полосы; теперь построчное копирование
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
14 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
|
квестовая система: декларативные стадии
...
- data/quests.ts переписан: QuestDef/QuestStage, реестр QUESTS;
состояние квеста — флаги/вары GameState (ставятся графами диалогов);
- API: questTaken/questDone/activeStage, questDialogueFor (диалог NPC
по активной стадии), questEffectFor (побочные эффекты из стадий +
знакомства), questLog (журнал с прогрессом);
- LocationScene.talkTo/onDialogueFinished: хардкод-ветки заменены
квест-моделью (полотно — эффект trader_first);
- тесты: 199/199 (новые — стадии квеста и сумка).
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
14 hours ago
|
сейвы v2 + предметы + инвентарь
...
- движок: Inventory — контейнер Map<id, count> (add/remove/count/has/all,
onChange), inventoryFromData; тесты;
- Game.inventory: сумка героя, сброс в новой игре;
- SaveData v2: поле version + items, normalizeSave дополняет сейвы v1;
- data/items.ts: реестр предметов (cloth, bellflower, salt, water_flask);
- сбор цветка кладёт bellflower в сумку; полотно выдаётся предметом
после диалога Милы (флаг got_cloth остаётся меткой);
- InventoryScene: строки сумки из инвентаря (имя + ×N);
- тесты: 192/192.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
14 hours ago
|
Фаза 4: TallSpec.height в мировых юнитах
...
- плейсхолдер-колонна: h = tall.height * iso.tileW (вместо px);
- удалён устаревший map.screenSize (остался worldBounds в юнитах);
- data/map.ts: высота дерева 1.5 юнита (те же 48 px на экране);
- .map-файлы перегенерированы (diff — только height: 48 -> 1.5);
- parseMap отвергает tall.height > 16 как высоту в px (защита от
протухших карт-файлов);
- тесты: 186/186.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
15 hours ago
|
Фаза 3: мир игры в мировых юнитах
...
PlayerController, CombatWorld, EnemyBrain, CombatViews и LocationScene
переведены с виртуальных пикселей на мировые юниты (1 юнит = 1 тайл):
- позиции/дистанции/скорости в юнитах (герой 1.75 юн/с, скорости и
радиусы врагов, knockback 0.75, INTERACT_RANGE 1.5);
- конус/окружности через inConeW/inCircleW (метрика проекции);
- вью-позиции — через worldToScreen, округление до px только на границе;
- гистерезис дистанции плевуна ±0.4 юнита, attackStop 0.85 юнита;
- тесты EnemyBrain/stats обновлены под юниты (185/185).
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
15 hours ago
|
игра: квест «Три цветка» — сбор, журнал, сумка, сдача и крючок акта 1
...
- движок: IsometricTileMap.setTile — изменение тайла с перерисовкой ячейки (+тест);
InputManager: одна клавиша маппится на несколько действий (Space = advance+attack)
- data/quests.ts: журнал квестов и предметы из флагов/варов GameState
- сбор лунных колокольчиков кликом на прудах (тайл зеленеет, прогресс flowers)
- сдача квеста Ирвину (elder_hand_in) — посадка цветов у тропы, крючок «Машина дышит»
- повторные реплики Милы (trader_repeat/trader_after)
- InventoryScene: сумка и журнал на Panel (клавиша I / геймпад Y)
- tools/smoke-quest.mjs: смоук диалога и сумки
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
16 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
|
игра: бой в реальном времени — сгустки на ECS, конус/резонанс, HUD, интеграция в LocationScene
...
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
|
Мир, арт-библия и пиксель-арт
...
- docs/world.md: библия мира (Великий Пепелопад, звонари, лунные колокольчики,
регион Низина Звенца, персонажи, арка акта 1)
- docs/art-style.md: арт-библия — палитра 32 цвета, размеры, стиль, чеклист
- tools/pixelart: генератор PNG из кода (тайлы, дерево, герой 3 направления,
NPC) без внешних зависимостей
- игра: загрузка ассетов через AssetLoader в BootScene с прогресс-баром,
тайлсет в карте, анимированный герой, спрайты NPC, квестовый тайл
с колокольчиками
Co-Authored-By: Claude Code <noreply@anthropic.com>
gbook
committed
18 hours 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
19 hours ago
|