| 2026-09-09 |
A1: манифест-пайплайн aiaudio; свои лупы рощи/разъезда, ветер с завыванием
...
- npm run aiaudio: gen/post/promote/list (раннер index.mjs, python из venv);
генератор читает манифест вместо встроенного LIST
- манифест: промпты/сиды/duration/peak/gate — единственный источник истины;
promote проверяет ключ на объявление в data/audio.ts и ставит gate=approved
- post.py: пер-позиционный peak (--peak) для тихих слоёв
- analyze.py: численный отбор кандидатов (огибающая/спектр) при делегированном
апруве
- промотировано: роща (seed 2, вместо подстановки прудов), разъезд (seed 3),
ветер (фидбек: завывание, периодическое затухание, тихий — peak 0.6, seed 3)
- ночью Звенца / дома / вода — оставлены процедурные (кандидаты hold)
- SFX остаются спек-синтезом (SFX_KEYS пуст, файлового пути нет)
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
8 hours ago
|
B4 (задача 5): арт интерактивов, снаряда и иконок сумки — AI + рукодельный
...
- Ретро Diffusion (LostMedia/RetroDiffusion, PD) на RTX 3090: ~1.3 с/вид;
gen_b4.py (GPU-партия по реестру LIST) + post_b4.mjs (кроп фигуры,
meanRect-даунскейл с BFS-маской фона, квантизация, обзорный лист).
- В игру: view.tex у 9 интерактивов + Старая Машина, спрайт плевка в бою,
иконки предметов 8x8 в сумке (ui/icon_*, синхронны окну скролла),
ASSET_KEYS дополнен новыми ключами.
- tone_tree/resonator у AI не вышли (тёплый градиентный фон + шум на
даунскейле) — нарисованы кодом: toneTreeTile/resonatorTile в gen.mjs.
- Визуальный чек checks/art_b4.mjs: все области и сумка через агентный мост.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
9 hours ago
|
Герой за деревом действительно прячется: tall-объекты в depth-слое (задача 19)
...
Движок: IsometricTileMap.setTallDepthLayer(layer|null) — tall-вьюхи клеток
переносятся в общий IsoDepthLayer с глубиной tx+ty (как у героев). Куллинг
и setTile не ломаются: видимость переключается по ссылке из cells, не по
родителю; null возвращает вьюхи в objectsLayer (порядок по строкам, как раньше).
Игра: LocationScene зовёт setTallDepthLayer(this.actors) и кладёт пропы
в actors через addRect (как и было).
Проверки: 2 теста движка (глубина/возврат в карту), сценарий
hero_depth.mjs — численные zIndex-assert'ы (юг: герой поверх дерева,
север: дерево поверх героя) + скриншоты, инварианты чисты.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
10 hours ago
|
AI-амбиенты A0 в игру: пруды, пруды ночью, Звенец, гул башни
...
Апрув пользователя 2026-09-09 (manifest a0-poc, gate=accept): 4 бесшовных
лупа AudioLDM2 (9 с, 22050 моно 16-bit) заменили процедурные WAV. Луга —
по-прежнему тишина (дизайн-решение), SFX остаются спек-синтезом E4.
zvenets_night и слои (houses, ponds_water, wind) — процедурные до A1.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
10 hours ago
|
plan: задача 19 — герой за tall-объектами; статус задачи 3 (A0 PoC готов)
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
10 hours ago
|
AI-аудио A0: пайплайн AudioLDM2 PoC (gen+post) и обновление плана под GPU
...
- tools/aiaudio/gen_audioldm2.py: text-to-audio, RTX 3090 fp16 / CPU fp32,
seed-детерминизм по-устройству, промпты амбиента прудов/Звенца
- tools/aiaudio/post.py: ресэмпл 22050 моно 16-bit, нормализация 0.85,
loopify (хвост кроссфейдом в голову, 1 с), --check: стык без щелчка
- tools/aiaudio/manifest.json: апрув-гейт a0-poc, gate pending (слушание)
- plan.md: машина обновлена (RTX 3090, CUDA), разведка A0 — Stable Audio
Open Small gated (нужен HF-токен), PoC на фолбэке AudioLDM2 (CC-BY-NC-SA,
в основной пайплайн не идёт); GPU ~15 с на 10 с клипа (CPU — 3.5 мин)
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
10 hours ago
|
Большой дом 2×2 в Звенце: первый проп с footprint в игре; пропы на минимапе
...
Додержана задача 6 (работа C): движковые props C0–C2 были готовы, но не
показаны в игре. Теперь: renderMinimap красит footprint пропа цветом
colors[prop.id] (тесты minimap ×3, round-trip карт сверяет props);
HOUSE_BIG зарегистрирован (тайл 34, текстура в ASSET_KEYS/assetSets, цвет
минимапы); большой дом стоит на юго-востоке Звенца (46,24, земля — пепел),
zvenets.map перегенерирован. Чек checks/big_house.mjs: проп в collision-слое,
footprint непроходим, walk/approach, глубина — герой с юга перед домом,
с севера скрыт за ним. Доки: demo (матрица), plan (задача 6 → ✅).
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
11 hours ago
|
Восстановить gen_pxgpt.py (PixelGPT-24×24) после переезда на новую машину
...
Скрипт проб B1 никогда не попадал в git — восстановлен по манифестам и
сверке с review-b1: маппинг токенов (0 — прозрачный, t → цвет t-1 палитры
промпта), обусловливание 5 ключами palette.mjs, рендер 24×24 RGBA.
Пайплайн AI-изображений развёрнут на новой машине заново (venv python3.11,
веса PXG-Tiny/PixelGPT/SD_PixelArt в ~/.cache/rpg-ai) и верифицирован:
PXG-Tiny бит-в-бит совпал с review B0; sd_sheet.py — лист за 116 с.
В план — факт пересоздания окружения; в грабли — непроброс порта через
два слоя npm run (npx vite --port 5199 напрямую).
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
11 hours ago
|
| 2026-09-08 |
Тема области играет без амбиента: audio.prepare() в движке
...
Убрав амбиент лугов, сломали старт темы: playTheme компилирует буфер
синхронным createBuffer, а контекст создавался только в unlock (первый
жест) или ensureContext (любой play) — на тихой локации до первого ввода
музыка не начиналась. В движке unlock разделён на синхронный createCtx +
prepare() (контекст без resume) и async unlock; Game.playTheme зовёт
prepare перед компиляцией. Чеки audio/music/synth переведены с
ambience/meadows (его больше нет) на тишину лугов и тему.
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
Убрать амбиент лугов и «дыхание пепла»; 3 вида валунов и кустов
...
По фидбеку:
- Амбиент стартовой локации удалён полностью: на лугах тишина — только
музыка и шаги. Слой ashflow («дыхание пепла», режущий слух) и
rustle-шорохи убраны везде; meadows/meadows_night/ashflow.wav удалены.
- Разнообразие препятствий: у валунов и кустов по три вида (round/spike/
flat и cloud/spread/tall) через TALL_VARIANTS — scatter ставит базовый
id, движок рисует вид по хэшу координат. Тень-подошва в спрайте, у
кустов — «нога» ветвей (починка «летающих» объектов).
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
docs: итоги третьего раунда фидбека (задача 18) в plan/demo
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
Валун и куст — крупные непроходимые объекты на внешних картах
...
boulderTile (32x32): камень в изо-объёме — верхняя грань P4/P5, светлая
юго-западная с бликами P5H, тень P2/P3 на юго-востоке, трещины P1.
bushTile (32x40): мёртвый куст-облако из эллипсов G0/G1/G2 с прорехами
и стеблями G2H. Новые слоты tall.boulder/bush и тайлы BOULDER: 28,
BUSH: 29 (BLOCKED, TALL_OBJECTS 1.05/1.25, assetSets, ASSET_KEYS,
MapScene). scatterRocksAndBushes разбрасывает по внешним картам:
луга 5+7, пруды 4+5, роща 3+4, разъезд 3+3, Звенец 1+2.
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
Дома — объёмные в изометрии: 5 фасадов вместо плоских картонок
...
isoHouseTile: две стены сходятся ближним углом к зрителю (юго-запад C1
светлая, юго-восток C0 тёмная), шатровая (metal) или двускатная (шпалы,
фронтон + конёк) крыша, шпальный фундамент, проёмы-параллелограммы.
Виды: времянка (32x56), двускатная с трубой (32x56), низкий сарай с
широким окном (32x56), амбар с воротами (32x80, 2.5 юнита), двухэтажный
с двумя рядами окон (32x80). Новые слот houseTall и tiles HOUSE_V3/V4
(в BLOCKED/TALL_OBJECTS/TALL_VARIANTS/assetSets/ASSET_KEYS/MapScene);
Звенец показывает времянку, двухэтажный и амбар явно.
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
docs: итоги второго раунда фидбека (задача 17) в plan/demo
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
engine: renderMinimap — чистый рендер карты в пиксельную картинку
...
renderMinimap(TileMapData, opts) — вид сверху: клетка сетки = тайл,
цвет из палитры вызывающей стороны (Record<id, 0xRRGGBB>), cell 2–3 px,
опциональные маркеры точек интереса (клетка с тёмной рамкой), fallback
для незаданных тайлов. Выход {width, height, rgba} — без Pixi; в текстуру
превращает игра. Экспорт через index.ts, секция в docs/engine/maps.md.
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
feat: B5 — дома: три фасада (шпальная крыша / ржавый лист / длинное однооконное)
...
houseTile параметризован: общие стены-щиты и фундамент, различаются крыша
и проёмы. Фасады подключены вариантами HOUSE (хэш-микс в руинах разъезда);
в Звенце три дома расставлены явно (вариантные id в тайлах), чтобы деревня
показывала всё разнообразие — хэш-микс для трёх домов не гарантирует его.
Для этого HOUSE_V1/V2 добавлены в BLOCKED, амбиент-слой «houses» теперь
матчит все три id. Карты перезаписаны, арт-библия обновлена.
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
feat: B4 — деревья: три вида крон, качание, осыпающийся пепел
...
Движок: анимация тайлов сочетается с вариантами — tall-объект анимируется
по фактическому (вариантному) id клетки, у разных вариантов свой fps.
Игра: три вида деревьев (широкая крона с кабелем / редкая / молодая),
каждый с кадром качания (крона +1px по X), fps 1.5/1.7/1.3 — кроны
качаются рассинхронизировано. Варианты TREE_V1/V2 раздаются вариантами
карт по хэшу координат, карты перезаписаны. С крон изредка осыпается
пепел (ember-частицы, серые, нормальный блендинг).
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
feat: B3 — замах и след удара (conePath в движке)
...
- engine: math/shapes.ts — conePath(from, dir, radius, halfAngle, segments):
полигон сектора для отрисовки (углы в экранных осях, как inCone); тесты
(точки дуги на радиусе, симметрия, вырожденный луч), экспорт через index.ts
- игра (CombatFlow): при удержании атаки — полупрозрачный сектор конуса
(перерисовка только на смене направления/заряда, позиция следует за героем
без перестройки полигона); заряжен резонанс — круг волны r=3 юнита
- след удара: вспышка-сектор (alpha 0.4, тает за 0.18 с через fx.fade)
- demo.md: math/shapes дополнен conePath
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
| 2026-09-07 |
docs(practices): приём «скриншот пробы устаревает без render-шага» + waitFor не бросает по таймауту
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
docs(plan,demo): задача 16 — переделка по фидбеку (свет/ветер/квесты/баги)
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
fix: флип side-анимации, панель диалога сразу полной высоты, перенос шрифтов
...
- PlayerController: side-кадры генератора смотрят вправо — флип теперь при
facing left (был при right, анимация ходьбы казалась зеркальной).
- DialogueBox (движок): панель при typewriter сразу строится под полный
текст (измерение до печати), место под «далее ▸» резервируется всегда —
подложка больше не появляется после напечатавшегося текста.
- Перенос шрифтов: nameText диалога, метки Button, тосты (wordWrapWidth
440) — длинные строки не вылезают за панели и экран; тост сдвинут ниже
строки «Цель:» (LocationHud) — не накладываются.
- Доки: ui-and-dialogue.md (механика панели), practices.md (приём
«размечай по полному тексту»), art-style.md (side смотрит вправо).
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
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>
|
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>
|
docs(demo): ограничение тача после ухода от кликов (кнопки действий — позже)
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
2 days ago
|
feat(agent): мост scene:walk/approach вместо tapTile, чеки и смоуки на кнопках
...
- SceneAgentView: команды scene:walk (A* + followPath) и scene:approach
(findPathToNeighbor, возврат тайла прибытия)
- GameAgent: walkTo через одну команду + waitFor тайла (без !moving —
step-переход срабатывает в moving), новый approach; tapTile удалён
- lib.mjs: t.interactAt/t.talkTo/t.useInteractable — координаты из снапшота
по id; fightNearest — подход, доворот facing коротким шагом к врагу
(клавиши — экранный вектор) и конус, до 3 попыток
- Чеки и смоуки переписаны с кликов на кнопки: interact, interact-world,
quest-bells, transitions, final, resonator, zoom, lighting, collision,
perf; smoke-act1 и final-smoke green (бой починен)
- Доки: agent.md (контракт моста), practices.md (доворот facing, две
линейки), plan.md (задача 15)
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
2 days ago
|
feat(game): удаление клик-механики — движение и взаимодействие только кнопками
...
ClickRouting.ts -> InteractRouting.ts. Удалены: resolveClick/ClickProbe/
resolvePixelTile/pointerToWorld, handleWorldClick, таргет врагов (target/
updateTarget/enemyAt/attackTarget), pending-механизм (pendingInteraction/
resolvePending/request*/walkTo), PlayerController.onWorldClick + setWalkGrid.
Остались: кнопка действия (pickInteract/interactCandidates/interactTarget/
resolveInteract), step-переходы с дисармом, линейка радиуса.
Мышь больше не маршрутизируется в мир: движение — WASD/стрелки/геймпад/тач-
джойстик, взаимодействие — E/A в радиусе, бой — Space конусом/резонансом.
Побочные баги кликов ушли вместе с механизмом (потеря клика при пустом пути,
перебивание подхода к NPC таргетом врага, тихий no-op без соседей, pending
не сбрасывался stop/teleport).
Доки: demo.md, practices.md (секция роутинга), input.md.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
2 days ago
|
fix(game): радиус взаимодействия — истинная евклидова линейка
...
inCircleW (проекционная линейка, анизотропия 2:1) давал зоне взаимодействия
экранный радиус 48px = до 3-4 тайлов, вытянутый вдоль мировой диагонали:
NPC/интерактив срабатывал по клику издалека, до подхода героя. Константа
1.5 юнита теперь применяется честно (Math.hypot позиций, юнит = 1 тайл):
орто-сосед 1.0 ✓, диагональный сосед 1.414 ✓ (findPathToNeighbor), 2 тайла ✗.
practices.md: заметка про две линейки мира (проекционная для конусов/хитбоксов,
евклидова для радиусов взаимодействия).
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
2 days ago
|
docs(plan): акт 2 закрыт (A1-A4)
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
2 days ago
|
feat(game): финал акта 2 — правильный звон Старой Машины (A4)
...
- интерактив old_machine в зале Машины: без настроенного резонатора —
отказ, с ним — custom lull_machine (setFlags machine_lulled);
- InteractResponse.custom: сюжетные эффекты интерактивов через sink.onCustom;
- кат-сцена финала в LocationScene: спуск камеры к устью + наезд, звон с
тряской, резонанс CombatWorld (тот же пульс, что у героя), угольки гаснут;
- validate: custom реакций сверяется с DIALOGUE_CUSTOM;
- чек checks/final.mjs: спуск через люк -> отказ -> звон -> Машина спит (5/5);
- docs/world.md: арка акта 2 (6а); docs/demo.md: сюжетная рамка + матрица.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
2 days ago
|
feat(game): акт 2 — карты Ржавой рощи, Старого разъезда и зала Машины (A1)
...
- Новые тайлы: WIRE (бухта кабеля, tall 0.6), RAIL (рельсы), STAIRS
(люк-ступени), MACHINE (печь-автоматон, tall 2.5) — текстуры в gen.mjs,
реестр sizes.mjs (wire), арт-библия дополнена.
- Карты: buildRustGroveMap (плотный мёртвый лес, тропа Звенец->разъезд,
поляна мастерской Клинта), buildOldSidingMap (рельсы, вагоны-времянки,
люк в подземелье), buildMachineHallMap (интерьер с Машиной в два тайла);
в Звенце расчистлен восточный выход.
- Области: rust_grove / old_siding / machine_hall (ambient темнее лугов,
гул Машины tower_hum у люка и в зале, накат у рельсов, враги с
патрулями) + переход Звенца на восток.
- Чек transitions: цепочка Звенец -> роща -> разъезд -> зал и обратно.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
2 days ago
|