| 2026-09-07 |
feat(game): солнечный день, золотой час и тюнинг под прорези
...
- движок lightSim: dayNightAmbient — трёхопорный микс суток день → закат →
ночь (DUSK_PEAK 0.45, DEFAULT_DUSK_COLOR 0xe8c090), экспорт из index.ts
- locations.ts: дневные ambient к почти-белому (meadows 0xf7f4ea, ponds
0xf2f0e8, zvenets 0xf5f2ea, rust_grove 0xe9e6da, old_siding 0xe4e2d8),
ночи темнее под прорези (0x3e4658…); duskColor в LightingDef
- HERO_LAMP компактнее и ярче (радиус 1.6, интенсивность 0.85); радиусы
колокольчиков 1.4→1.0, окон 1.8→1.2, интенсивности выше
- палитра: ключевые цвета травы/пепла/воды подняты тоном (G*, P4–P5H, W1–W2),
арт перегенерирован; art-style.md синхронизирован
- чеки lighting/time под новые значения и трёхопорный микс; тесты золотого
часа (lightSim, GameLighting); docs/engine/render.md
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
11 hours ago
|
feat(engine): свет «тьма с прорезями» — RT-карта силы тьмы вместо аддитивных пятен
...
- lightSim: stepAlphas/HOLE_PROFILE/TONE_PROFILE (ступенчатые профили прорези
и тона), quantizeHoleAlpha (шаг 1/8) — детерминизм bake
- Lighting: RenderTexture хранит силу тьмы (fill → erase-прорези), display-
спрайт multiply с tint=ambient — смена цвета дня/ночи без перерисовки RT;
bake по dirty-подписи {round(x),round(y),scale·1/8,alpha·1/8}; day fast-path
(белый ambient — слой выключен); fallback без renderer (тесты в node)
- источник = прорезь (makeHoleTexture, 7 ступеней) + приглушённый тон
(makeToneTexture, TONE_GAIN 0.3) — спрайты под светом остаются читаемыми
- тесты: fake-renderer (bake/dirty/fast-path/destroy), профиль ступеней;
docs/engine/render.md + practices.md
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
11 hours ago
|

perf: горячий путь 60 Гц без аллокаций (О-1)
...
Baseline после: fps покой 6 / бой 6 (было 5-6/3-6), heap 29 МБ — не хуже.
- Частицы: stepParticle — out-параметр визуала; Particles — компакт swap-pop
в один проход вместо двух filter за тик (~3400 объектов/сек раньше).
- Свет движка: upsertLight/upsertDarkSpot — апсейт def по полям вместо
{...def}; пульсы — итерация Map без спреда; lightFrame — out-кадр
(applyFrame reuse).
- Свет игры: дифф-наборы источников/пятна — два буфера со свопом (clear не
задевает активный), defsBuf/posBuf/lampDef — переиспользуемые.
- Тики: Tween/Updatables/shake — компакт на месте вместо filter каждый тик
(в Tween пограничный случай dt-в-delay сохранён — твин остаётся).
- Сцена: debug.setLines только при видимой панели; Atmosphere.updateHazard —
поиск зоны только при смене тайла героя.
- Бой: CombatFlow.updateRing — трогает Graphics только на переходах;
noiseFor — общий view вместо копии origin; EnemyBrain — переиспользуемые
INTENT_* константы + dirInto/moveIntentFrom (dirToward больше не аллоцирует).
- SceneRegistry.near — опциональный out-массив + reuse Set дедупликации.
- PlayerController: имя клипа ходьбы — кэш по facing.
- docs/engine/render.md: out-параметр stepParticle.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
15 hours ago
|
feat(engine): dayNightFactor — чистая кривая суток для day/night
...
dayNightFactor(tHours, spec) — фактор ночи 0..1 (mod 24, линейный
рассвет/закат, непрерывен на стыке 24/0); DayNightSpec + дефолт
(рассвет 06–08, закат 18–20). Доки render.md дополнены.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
20 hours ago
|
feat(engine): импульсы света, виньетка и тёмные пятна в Lighting
...
- lightSim: PulseSpec {attack, hold?, decay} + pulseEnvelope/pulseTotal
(чистая трапеция-огибающая, тестируется в node)
- Lighting.pulseLight: вспышка в точке, занимает пул источников,
авто-снятие по концу огибающей; в frames() видна как pulse#N
- Lighting.pulseAmbient: аддитивная вспышка на весь экран, один слот
- Lighting.setVignette: затемнение краёв (makeVignetteTexture, ступенчатые
кольца) с лерпом по образцу ambient
- Lighting.upsertDarkSpot/removeDarkSpot: локальные тени (multiply),
отдельный пул maxDarkSpots, рисуются под источниками
- makeGlowTexture: 4 ступени + дизер-кольцо по внешнему радиусу
- доки: render.md (раздел «Импульсы, виньетка, тёмные пятна»),
recipes.md (вспышки / виньетка / тёмная аура)
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 hours ago
|
feat(game): интеграция освещения — статика областей, лампа героя, слой снапшота
...
- data/locations.ts: LightSourceDef/LightingDef (ambient + источники at/tiles,
радиус в юнитах, цвет/интенсивность/мерцание, whenFlag/notFlag), поле lighting в AreaDef
- systems/Lighting.ts: GameLighting — сборка активных источников (статика +
runtime add/remove + лампа героя в тёмных областях), проекция camera.toScreen
каждый тик, детерминированный seed мерцания по id, снапшот для моста
- LocationScene: lightView в renderer.lightRoot, тик света до ранних выходов
(свет живёт в диалогах/катсценах), зачистка в exit()
- агентный мост: слой lighting {ambient, sources}, инвариант lighting-bounded
- движок: Lighting.destroy принимает опции (делегирует в Container)
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 hours ago
|

feat(engine): слой освещения — ambient multiply + аддитивные источники
...
- render/lightSim.ts — чистая математика (образец particleSim): LightDef/
LightFrame, детерминированное мерцание flickerFactor (сумма синусов,
диапазон [1-amount, 1]), lightFrame, lerpAmbient, dimColor
- render/Lighting.ts — Pixi-адаптер: fullscreen ambient (Texture.WHITE,
blendMode multiply — цвет и есть яркость, фундамент day/night) + пул
аддитивных спрайтов света со ступенчатой пиксельной текстурой свечения
(makeGlowTexture, generateTexture resolution 1 + nearest)
- runtime API: setAmbient(color, fadeSec) с плавным лерпом, upsertLight/
removeLight/hasLight/setLightPos/setLightColor/setLightEnabled, frames()
для снапшота агента
- Renderer: третий корень lightRoot между worldRoot и uiRoot — экранное
пространство: ambient затемняет сцену, источники рисуются поверх, HUD/
fog/fade остаются читаемыми сверху
- Camera.toScreen(wx, wy) — проекция мировой точки с учётом камеры и
тряски для слоёв вне worldRoot (без лага на кадр); apply делегирует
математику в общие хелперы
- тесты: lightSim (мерцание/кадры/лерп/dim), Lighting (ambient fade,
пул, upsert/remove, мерцание, destroy), camera toScreen согласована
с apply в т.ч. при тряске
- доки: render.md (lightRoot, toScreen, раздел «Освещение», порядок
отрисовки), recipes.md (источник света)
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 hours ago
|