| 2026-09-10 |
Дизайн персонажей и объектов, персонажи мельче (трек 24)
...
- Манекен движка 11×21×4 → 9×16×4; новое API mannequin(palette?):
MannequinPalette {torso/legs/head/arms} красит слоты, форма не зависит
- Палитры героя и NPC (NpcDef.colors); олень мельче (~10 вокс)
- Дом: двускатная крыша коньком вдоль X, деревянная дверь на видимом
фасаде, труба; дерево: крона с профилем (низ вздут, ель ярусами)
- Гейты anim.mjs под мелкий манекен (diff фаз 40, подъём стопы 0.7);
тулза crop-zoom.mjs — зум-кроп снимка для визуальной проверки
6 гейтов игры + 11 демок зелёные, 296 тестов.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
1 day ago
|

Масштаб UNIT 5→10, детализация манекена 11×21×4, частицы из мира
...
Фидбек: «частицы летают вместе с персонажем, как приклеенные»;
«персонажи низкодетализированные, не читаются; объекты всё ещё
сильно меньше — масштаб поднимать кардинально».
- Частицы (пепел, мотыльки) отвязаны от камеры: мировой якорь +
дрейф, окно камеры заворачивает (wrap) — при движении героя
частицы стоят на месте в мире.
- 1 тайл v1 = 10×10 вокселей: генераторы областей и пропы подросли
(дерево ~30–38 со стволом 2×2, дом 24×30–40×18 — вдвое выше героя,
башня 47, Машина 24×34×18), высота мира 52, стены интерьера 13.
- Манекен движка 5×11×3 → 11×21×4 (голова-куб, торс, руки/ноги 2×2 —
силуэт читается; 220 вокселей; тест связности — BFS по
6-связности). Герой 2.1 юнита/с (stride 12.8 — темп v1), камера
viewSize 80 (охват 8 тайлов), радиусы интеракта 15, олень ~13 вокс.
- Гейты переведены на новую геометрию: все 6 игры + 11 демок
зелёные, 295 тестов.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
1 day ago
|
Масштаб мира UNIT 3→5: герой ≈ 2 тайла, скорость 2.1 юнита/с
...
Фидбек «персонажи крупнее деревьев и соразмерны домам»: 1 тайл v1 =
5×5 вокселей. Генераторы областей и пропы подросли под тайл 5×5
(дерево 17–23 вокс ~2× героя, дом 12×14–18×9, башня 21, Машина
12×17×9, стены интерьера 8); олень ~9 вокс. Герой 2.1 юнита/с
(stride 6.4 — темп v1), олени 0.45/1.0 юнита/с. Камера viewSize 40 —
тот же охват 8 тайлов; тени/дистанция масштабируются от viewSize сами.
Гейты переведены на новую геометрию (центр тайла tile*5+2.5,
spotVoxel tile*5+2, подходы ±5); 6 гейтов игры + 295 тестов зелёные.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
1 day ago
|
Трек 21 «сборка» закрыт: полный прогон и сравнительные скриншоты с v1
...
- Полный прогон: 11 гейтов демки + 6 гейтов игры зелёные, 295 тестов.
- Зеркальные тулзы v1/v2 compare-shot.mjs: 5 общих участков, герой в
одном тайле (карты v2 конвертированы 1:1), день 10:00, пары v1|v2.
- Итог сверки: раскладка/объекты/переходы совпадают 1:1; допустимые
расхождения — камера v2 крупнее (~2x), тёмные области светлее, вода
бледнее, интерьер беднее деталями.
- Доки: plan.md (итоги трека 21), v2/CLAUDE.md (полный прогон разом).
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
1 day ago
|
Трек 20: катсцены как данные — CutsceneRunner в движке
...
- Движок: core/cutscene.ts — жанронезависимый рантайм (стек шагов
{dur, fn?, cam?}, глайд камеры по инъекции CutsceneCamera, действие
шага может перезапустить сцену) + validateCutscenes; 8 юнит-тестов
- Игра: data/cutscenes.ts — метки точек камеры тайлами v1, именованные
действия, реестр 3 сцен; resolveCutscenes валидирует при старте;
main.ts — runner вместо inline-катсцен, мост playCutscene(id)
- Гейт cutscenes.mjs: dry-run каждой сцены до конца, камера к герою
- Все 6 гейтов игры зелёные, 295 тестов
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
1 day ago
|
Полировка игры: меню/автосейв, виньетка наката, мотыльки/дымка, шиммер воды
...
- Меню (Esc) + автосейв/«Продолжить» (движковый SaveManager): GameSave —
полный снапшот сюжета (область/тайл, флаги+вары, сумка, часы, правки
цветков до setArea); страница стартует в меню — гейтам startGame(false)
- Виньетка опасности + пелена наката (screenFx, DOM-слои)
- Атмосферные частицы v1 Atmosphere: мотыльки лугов, дымка прудов
(клочья на якорях клеток воды); шиммер — редкие блики на прудах
- Мост: ambientInfo, menuInfo, startGame(load); shot.mjs — startGame
- Грабли: castShadow после пересоздания облака, z-fighting копланарных
кубов над world-мешем (EPS 0.03), зомби-vite по PID, encodePng Buffer
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
2 days ago
|
| 2026-09-09 |

Ревью-раунд: багфиксы движка и игры
...
Системный поиск ошибок (ревью движка + сверка с v1 + стресс рантайма).
Игра: тема лугов не останавливалась и наслаивалась (GameAudio держит хендл
лупа и кроссфейдит); «E» сквозь катсцену/фейд по протухшим целям; порядок
диалогов NPC как в v1 (незнакомый — всегда first); «E» — ближайшая цель с
приоритетом при ничьей (v1 pickInteract); радиус NPC 4.5; скорость героя
5.25 вокс/с (v1 1.75 юнита/с); колокольчик в сумку при сборе; ночной свет
колокольчиков следует за полем (живой слой тайлов); пустой return-стек —
фолбэк на спавн (фейд не зацикливается); кэш декода RLE (isFlower 25/тик);
камера входа в область без округления (микро-скачок).
Движок: stepTick вне ручного режима = 0 (защита от двойных шагов);
addComponent на мёртвой сущности = undefined; dispose закрывает AudioContext
и гасит все лупы (Loops.stopAll — свободные слоты playLoopBuffer раньше не
останавливались никогда); validateDialogue — kind в do[] узла и циклы
узлов-действий; DialogueRunner — реентрантность abort/start в эффектах;
dayNightFactor без NaN на вырожденных границах; remapSlots с пустой
палитрой без TypeError. Тесты 281→287, все 5 гейтов зелёные.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
2 days ago
|
Фидбек: канвас под окно, плавная камера, поворот оленей, пропорции мира
...
- Канвас тянется под окно (CSS 16:9), бэкинг-стор 960×540 (pixelated).
- Камера следует за героем по float-цели без округления — дёрганье ушло;
глайд катсцен тоже без квантования.
- Олень поворачивается мордой по ходу движения (rotXZ, 4 четверти).
- Пропорции: деревья/дома/башня/Машина выше юнитов (герой 10 вокселей);
высота чанка мира 16 → 20 (дерево до 15 + GROUND_Y).
- Мост setFauna(false) для кадр-равенств (олени бродят в реальном
времени до setManual — флейк детерминизма areas); гейту areas нужен
stepTicks(1) после setFollow(false) — ручной режим не перерисовывает.
- Меню зафиксировано в треке 21 плана (замечание пользователя).
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
2 days ago
|
Игра: разрешение 960×540 и отдаление камеры (viewSize 24)
...
Бэкинг-стор канваса теперь совпадает с CSS-размером (масштаб ×1,
пиксели резкие), viewSize 17 → 24 — камера видит больше поля.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
2 days ago
|

Трек 19: акт 2 — катсцены резонатора и Машины, фауна, shot.mjs
...
Игра (apps/game): катсцена настройки резонатора (камера к резонатору →
звон → роща отвечает → тост) и усыпления Машины (камера к устью),
custom-эффекты диалогов через pending в onFinish; FaunaSystem v2 —
воксельные олени (src/deer.ts, src/fauna.ts): брожение по соседним
тайлам, подход на громкий звон, спавны в AreaDef.fauna v1 1:1
(луга ×2, пруды ×1). Мост: faunaInfo/startleFauna/setCam (камера на
участок без телепорта героя)/cutsceneInfo/tileCenter.
Тулза tools/shot.mjs — оперативный скриншот участка карты агентом:
область/флаги/вары/время суток + камера + снимок одной командой.
Гейт tools/checks/act2.mjs — 27 проверок (Клинт по флагу, тоны 3/3,
катсцены по шагам и глайду камеры, олени: спавны/брожение/подход к
звону); interact.mjs ждёт тост финала после катсцены, npc.mjs доигрывает
катсцену перед снимком. Регресс: 281 юнит-тест; гейты areas 16, npc 27,
interact 27, atmosphere 18, render 13 — зелёные.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
2 days ago
|

Трек 18: время суток, освещение и музыка — атмосфера v1 в игре v2
...
Движок: экспорт daynight (dayNightFactor/dayNightAmbient/flickerFactor),
новые API VoxelRenderer — setNight(k, tint) (hemisphere → тон ночи, фон
сцены, гашение солнца) и setDayAmbient(color) (дневная база области:
тёмные интерьеры гасят hemisphere и солнце по яркости), addPointLight.
Игра (apps/game): GameClock (1 сек = 1 игровая минута, старт 8:00),
данные освещения 8 областей v1 1:1 (bells, окна, очаги, отсвет башни;
whenFlag/notFlag/whenNight), GameLighting (diff источников, мерцание,
лампа героя HERO_LAMP), AshParticles (пепел лугов), GameAudio (темы
областей с кроссфейдом — только луга, как в v1). Мост: clockInfo/
setClock/lightingInfo/audioInfo/setAsh. Гейт tools/checks/atmosphere.mjs
— 18 проверок; areas.mjs научен отключать пепел для кадр-равенств.
Вне скоупа (отложено): туман прудов, ауры наката, виньетка, амбиент-слои.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
2 days ago
|
Трек 17: интерактив, пикапы, квест «Три цветка» в игре v2
...
Контент v1 1:1: интерактивные объекты областей (столбы, моты, тон-деревья,
сундук, записка, очаг, прилавок, верёвка колокола, резонатор, Машина),
зоны наката (полотно — маска), воксельные пропы строго в тайл 3×3,
FlowerQuest (сбор у прудов → посадка поляны с пересевом; правки — журнал
по областям, переживает пересборку мира).
В main.ts: приоритет целей «E» v1 (npc → переход → интерактив → цветок),
накат замедляет вдвое без полотна + тост при входе, мини-катсцены (стек
шагов с глайдом камеры), plant_flowers отложен до конца диалога (v1
pendingCustom). Мост: interactInfo/voxAt/flowerTiles.
Гейт tools/checks/interact.mjs — 27 проверок (реакции и ветки объектов,
накат ×2 с полотном, сбор цветка, Машина: заперто → усыплена → спит,
катсцена сдачи с посадкой поляны). Регресс: npc 29, areas 16, 261 тест.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
2 days ago
|

Трек 16: NPC и квестовый каркас — диалоги/квесты v1 в игре на v2
...
Контент «Пепельных луга» 1:1 из v1: реестры FLAGS/VARS, 7 предметов,
NPC (Ирвин/Мила в Звенце, Клинт в роще по флагу act2_hook), 9 диалоговых
графов (JSON + validateDialogue при старте), квесты как стадии с
doneFlag/ready/progressKey, GameState (DialogueState движка).
Сцена: NPC-манекены с точками взаимодействия (E — Поговорить), выбор
графа — квест-стадия → repeat → dialogueFirst; в диалоге мир замер;
эффекты графов исполняет игра (сумка, тосты); HUD — трекер квеста,
сумка, тосты. Мост: npcInfo/talkTo/dialogueInfo/dialoguePick/
dialogueAdvance/dialogueAbort/setState/stateInfo.
Движок: экспортирован evalConditions (ready-условия стадий — те же
предикаты, что в графах диалогов).
Гейт tools/checks/npc.mjs — 27 проверок (раскладка NPC v1, появление
Клинта по флагу, выбор графа по стадиям включая сдачи, выбор ответа,
сумка, флаги, трекер, motes_note, мир замер, панель диалога).
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
2 days ago
|

Трек 15: карты и области — игра «Пепельные луга» на v2 (apps/game)
...
Новое приложение v2/apps/game (демка не тронута — её 11 гейтов завязаны
на сценку): воспроизведение демо-среза v1 по референсу.
- tools/convertMaps.mjs — конвертация карт v1 (RLE) → src/data/maps.json;
раскладка тайлов v1 переносится данными (позиции NPC/переходов сходятся)
- src/areas.ts — генератор мира области: 1 тайл v1 = 3×3 вокселя,
земля y0-1, вода слоем y=2 (непроходима, как v1 blocked), штампы
объектов — компактные генераторы строго в тайл 3×3 (mapTree/mapBush/
mapBoulder — крона не вылезает на соседей) + дома/колодец/башня/
машина/рельсы/стены/декор; всё детерминировано
- src/data/areas.ts — 8 областей с переходами v1 1:1: step (вход на
тайл-триггер), click («E» у двери/колодца), 'return' — стек возврата
- src/main.ts — мир области пересоздаётся на переходе, герой-манекен,
фейд out→swap→in (#fade), подсказка «E — …» (#hint), камера follow
- мост: setManual/stepTicks/heroInfo/heroTeleport/setInput/setFollow/
setSun/areaInfo/gotoArea/solidAt/interact/interactInfo
- гейт tools/checks/areas.mjs — 16 проверок: детерминизм пересборки,
blocked (3×3 под-колонки), зажим у грани воды, step-переходы
луга⇄Звенец/луга⇄пруды, люк→зал→return по стеку, click «E», интерьер
- доки: v2/CLAUDE.md (game-блок, грабли: экранная ось (1,0) — диагональ
мира и срез триггера; штампы шире тайла), plan.md (трек 15 закрыт)
check:fast: 261 тест, typecheck engine+demo+game.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
2 days ago
|