| 2026-09-07 |
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
15 hours ago
|

fix: утечки жизненного цикла (сцена, ввод, карта) + read-only тест карт
...
Игра:
- LocationScene: подписки EventBus снимаются в exit() (off из on);
DialogueSystem.destroy(); worldAudio.setLayers([]) в exit (лупы
амбиент-слоёв раньше звучали поверх следующей сцены); guard гонки
roomtone (сцена вышла до резолва промиса — луп гасится); в exit
добавлены moteLabel и chargeRing (в worldRoot — не вычищался).
- SaveSlotsScene: имена областей из areaOf() (интерьеры показывались
как «луга»).
Движок:
- InputManager: contextmenu-слушатель снимается в dispose().
- IsometricTileMap: плейсхолдер-графика ячейки хранится в CellSprites
и уничтожается при перерисовке (раньше накапливалась на setTile).
Тесты карт: fresh/round-trip read-only в npm test; запись файлов —
только при RUN_MAPS_GEN=1 (npm run maps) — обычный прогон больше не
мутирует рабочее дерево. agent:check: дублирующая проба maps удалена,
invariants — через сценарий checks/agent-invariants.mjs (был инлайн-
дубль, разошедшийся с ним).
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
20 hours ago
|
| 2026-09-06 |

Разграничение: жанронезависимые тулзы переехали в packages/engine/tools
...
Правило: тулза, знающая контент игры (палитру, тайлы, локации, сценарии
акта), живёт в apps/game/tools как «сценарий применения»; машинерия без
знаний об игре переезжает к движку.
- packages/engine/tools/: png.mjs (encode+decode), canvas.mjs (палитра —
параметр), imaging.mjs (кроп/квантизация/обзорный лист), wav.mjs
(WAV-энкодер и примитивы синтеза), agent-lib.mjs (маяк — параметр
openGame), boundary.mjs (правила гварда, корни/публичное API — опции)
+ юнит-тесты boundary.
- exports движка: "./tools/*" — игровые сценарии импортируют
@rpg/engine/tools/* вместо относительных путей; maps/gen.test.ts
больше не лезет в src движка (encodeMap/parseMap из @rpg/engine).
- Игра остаётся сценарным слоем: palette.mjs, gen.mjs (арт/звуки),
aiart (промпты/манифест/тонкий post.mjs), checks/, smoke*, agent.mjs,
новый lib.mjs (маяк загрузки игры поверх движкового каркаса).
- Артефакты генераторов (арт, карты, WAV, processed) бит-в-бит прежние.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
2 days ago
|
Архитектура: гвард границы движок/игра + перенос тулз в apps/game/tools
...
- Гвард границы (apps/game/tools/guards/boundary.mjs, npm run guard):
движок не импортирует игру и не выходит из пакета, игра импортирует
движок только через @rpg/engine и @rpg/engine/assets/*. Чистое ядро
покрыто тестами (8 кейсов); проба guard:boundary в agent check.
- tools/ -> apps/game/tools/ (git mv, история сохранена): правка
корне-относительных путей в генераторах и CLI, ROOT-константы
'../../..', npm-скрипты обновлены.
- Доки: CLAUDE.md, llms.txt, docs/engine/*, README — новые пути,
практика «меняю границу движок/игра» и грабля про ROOT тулз.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
2 days ago
|