| 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
6 hours ago
|
chore: ESLint (typescript-eslint, flat config) + npm run lint в check:fast
...
- eslint.config.js: recommended TS для src обоих пакетов + тулз; node/браузерные
глобали для .mjs-сценариев и редактора диалогов; no-undef выключен в TS
(глобали DOM/Vite проверяет tsc).
- Попутные находки (8): no-useless-assignment в waitFor-агентах (catch опирается
на init false), тернарник-выражение в StateMachine, причина ошибки в
AssetLoader ({ cause }), неиспользуемые consoleLogs/JSON_SPACE, let->const,
as const в тесте квестов.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
12 hours ago
|

refactor(game): К3 — декомпозиция LocationScene, гигиена, валидация контента
...
Декомпозиция (1338 -> ~870 строк, сцена — оркестратор вьюх):
- systems/LocationAudio: слои/roomtone/шорохи/музыка угрозы (порядок тиков сохранён)
- systems/InteractableViews + data/assetSets: фабрики вьюх NPC/интерактивов,
enemyTextures из данных (префикс кадров из EnemyKindDef.frames)
- systems/Atmosphere: пепел/мотыли/дымка, накат, виньетка
- systems/quest/FlowerQuest: сбор/посадка/кат-сцена сдачи
- pixelTile -> чистый resolvePixelTile + pointerToWorld в ClickRouting (+ юнит-тесты)
Хардкоды сюжета -> data: QUEST_PLANT_TILES/QUEST_TOWER_TILE/QUEST_TOWER_GREEN,
harvestTile в AreaDef (правило «цветок только в ponds»)
Гигиена: HealthBar.setHp не перерисовывает при том же hp; eps-прибытие
вместо float-равенства (PlayerController, FaunaSystem) со снапом;
agentCommand — таблица Record вместо switch на 130 строк; удалён мёртвый код
(GameLighting.addLight/removeLight, Interactables.all, SceneObjects.byKind,
VolumeKey, questTaken/questDone/inventoryItems, реэкспорт MenuScene)
Валидация контента (тихие ошибки): патрули (границы+проходимость), хазарды,
источники света (дубли id, границы, пустые, whenFlag/notFlag), requiresItem
переходов/накатов, return-правило интерьеров, аудио-ключи (ambience/theme/
слои/sfx реакций и реплик/roomtone)
Проверено: check:fast (692 теста), agent:check 16/16, smoke-act1
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
13 hours ago
|
feat(game): do[]-эффекты в контенте через EffectSink; QuestEffect-свитч удалён
...
- data/effects.ts: реестр DIALOGUE_CUSTOM (plant_flowers) — имена сюжетных
эффектов, как FLAGS/VARS.
- systems/DialogueEffects.ts: DialogueEffectSink + applyDialogueEffect
(give/take в сумку, sound, toast, custom; unknown kind — тихий игнор,
валидатор = error).
- DialogueSystem: registerSink + runner.onEffect → sink.
- Контент на do[]: elder_hand_in.accept → custom plant_flowers;
trader_first.give_cloth → giveItem cloth. Удалены QuestEffect,
EXTRA_EFFECTS, questEffectFor, поле QuestStage.effect и ручной switch
в onDialogueFinished (custom откладывается до конца диалога — кат-сцена
не рвёт реплику).
- Валидатор: do[].id give/take ∈ ITEMS, custom ∈ DIALOGUE_CUSTOM (error).
- Сценарий interact-world: первый advance теперь догоняет печать —
двойное нажатие.
- Тесты: give/take в Inventory, custom до sink, unknown игнор.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 hours ago
|
| 2026-09-05 |
квестовая система: декларативные стадии
...
- 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
2 days ago
|