| 2026-09-07 |
feat(game): квестовая ясность — трекер цели, тост тонов, направления
...
- HUD: строка «Цель: <стадия (N/M)>» из activeStage (questTracker);
скрыта, когда активных квестов нет
- тост «Тон (N/3)» у деревьев-механизмов: InteractResponse.toast
(текст + прогресс по вару) вместо полного текста реакции
- эпилоги квестов получили doneFlag (act2_hook, новый machine_hook
в clint_repeat) — трекер корректно переходит между квестами
- журнал в сумке: текущие задачи с переносом по ширине панели,
взятия-стадия видна после принятия; панель 300×222
- направления в текстах стадий и диалогах (пруды — северо-запад
лугов, роща — восток Звенца); убран дубль ключа reply в clint_first
- фикс: сепарация тел не вталкивает врага в непроходимый тайл
(откат позиции; инвариант enemy-in-wall в resonator)
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
16 hours ago
|
feat(game): непрерывное время суток вместо флага evening
...
GameClock (1 с = 1 игровая минута, старт 8:00) на Game; GameLighting
смешивает day/night ambient по кривой dayNightFactor через деп timeHours,
ночные источники — whenNight, лампа по фактору ≥ 0.5. Сейв v4 (clock),
миграция state v3 удаляет evening; мост: s.time, scene:setTime,
инвариант time-bounded, сценарий checks/time.mjs.
Co-Authored-By: Claude Code <noreply@anthropic.com>
|

feat(game): вечер после сдачи квеста, виньетка, световые импульсы в бою
...
- ids.ts: флаг FLAGS.evening; граф elder_hand_in.json ставит его узлом accept
(«вернусь до темноты» — контент-driven, валидатор держит флаг упомянутым)
- LightingDef.nightAmbient: GameLighting.update ведёт ночную цель ambient
(guard по последней цели, фейд 6 c); лампа героя — в тёмной области или вечером
- тёмные ауры зон наката: пятно на каждый тайл HazardDef (multiply под светом)
- виньетка: низкий hp (0.3) / накат без полотна (0.35), фейд 0.5 c
- импульсы: combat:hurt → тёплая вспышка в точке врага, резонанс → вспышка
у героя + подъём ambient, урон герою → красная вспышка на весь экран
- LocationScene: maxLights: MAX_LIGHTS (движковый пул больше не теряет
источники), setTileTracked — индекс layerTilePos живой при смене тайлов
- мост: scene:damagePlayer (полный боевой путь), снапшот lighting.vignette,
инвариант lighting-bounded расширен виньеткой 0..1
- доки: agent.md (vignette/scene:damagePlayer), practices.md (ночь = флаг,
импульсы = тот же пул)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
feat(game): диалоги в JSON + dialogueRules (чистый анализ графов) + CLI dry-run
...
- графы диалогов — 6 JSON-файлов в data/dialogues/ (4 пробела + \n),
реестр dialogues.ts собирается JSON-импортами
- новый data/dialogueRules.ts: чистые checkGraph/analyzeGraph — реестры
параметрами, одна истина для валидатора, CLI и будущего редактора
- validate.ts делегирует графы в checkGraph; новые инварианты:
textless-cycle (error), silent-end (warn), string-unknown, item-unknown,
do-item/do-custom-unknown, quest-stage-unreachable (error)
- CLI npm run dialogues:dry [<id>] — прогон графов через DialogueRunner
на пресетах состояния (fresh / quest-taken+flowers / quest-done)
- доки: ui-and-dialogue.md (раздел «Графы в JSON и dry-run»), practices.md,
CLAUDE.md
Co-Authored-By: Claude Code <noreply@anthropic.com>
|