| 2026-09-06 |
Сцена на SceneRegistry: NPC/интерактивы/пропы/фауна/враги в одном реестре
...
- дефы получают юниты: NpcDef.pos + atlas?, InteractableDef.pos + view?
(tile вычисляется при загрузке модуля — сейвы/снапшот/валидатор без миграций)
- SceneObjects: фасад реестра области (npc/int/prop с footprint)
- клик-роутинг: npcAt/interactableAt/enemyAt через реестр; чистый
resolveClick и приоритеты не тронуты (пробы transitions/interact зелёные)
- шов врагов ECS: запись с pos по ссылке, move после шага, remove при смерти
- фауна регистрируется (kind 'fauna'), вьюхи NPC — def.atlas, интерактивов —
def.view.tex
- инвариант registry-consistent (реестр согласован с ECS)
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
15 hours ago
|
Фабрика тестовых фикстур + fail-fast предикатов waitFor
...
- testing/ (только для *.test.ts, в бандл не попадает):
combatWorld.ts (fakeMap/fakeWorld/run/far), gameState.ts (fakeState),
maps.ts (mapWithWall). EnemyAI/los/Interactables тесты переведены —
бойлерплейт фейковых карт/стейтов выведен из трёх файлов.
- GameAgent.waitFor: top-level обращения s.<ключ> сверяются с
AGENT_SNAPSHOT_KEYS до компиляции предиката; неизвестный ключ ->
{ ok: false, error: 'неизвестный ключ s.X', ticks: 0 } — опечатка
больше не тихий false на весь таймаут. predKeys — чистая функция,
тестируется в snapshot.test.ts.
- Список ключей: ENGINE_SNAPSHOT_KEYS (движок) + сценические + слой игры;
анти-дрейф тесты держат список согласованным со слоями снапшота.
Проверки: typecheck, 307 тестов (+6), agent check 45/45 (ни один чек
валидация не отторгла), smoke-act1. Доки: agent.md (поведение waitFor),
practices.md (проверка сценариев).
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
Батч 3: взаимодействие с миром шире (знаки, моты, колокол)
...
- Предмет mote («Пепельный мот») — зачаток экономики по docs/world.md.
- InteractResponse.addVar: прибавление к вару (подбор мотов копит, не затирает).
- Контент: столбы у троп (луга, пруды, Звенец), три пепельных мота на лугах,
верёвка колокола башни (флаг rang_tower, повтор с другим текстом).
- Мила: повторный диалог trader_repeat с веткой по вару (whenVar motes >= 1);
чинён dialogueRepeat (был trader_first — полотно давалось повторно).
- Инвариант interact-used-consistent в мосте: флаг used:<id> <=> снапшот used.
- walkTo моста пропускает узлы-объекты на пути (клик в мот/цветок больше
не ломает маршрут); docs/agent.md и practices.md обновлены.
- Плейсхолдеры-вью по видам: столб/рычаг/кучка с искрой/ящик.
- Сценарий tools/checks/interact-world.mjs (7 проверок) в agent check.
- Тесты: addVar, ветка trader_repeat (dialogues.test.ts).
Co-Authored-By: Claude Code <noreply@anthropic.com>
|

Батч 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>
|