# RE2D World: комнаты, этажи и АК

Запуск из корня репозитория:

```
./build/russiano2d --game demos/re2d_bsp_world
```

Холл с перилами, восьмиступенчатый проход и две комнаты с Руси. Несколько
walkable spans имеют одинаковые XY на разных высотах. Руси получает 34 урона
за попадание и выбывает после трёх попаданий; F восстанавливает тестовые цели.
АК использует существующие Re2DSprite equipment и sockets. Стены, перила и
пол/потолок останавливают ray выстрела. Звук — существующий тестовый эффект.

| Управление | Действие |
|---|---|
| WASD | ходьба, подъём по ступеням |
| мышь сразу / стрелки | взгляд |
| ЛКМ / Space | автоматическая стрельба |
| R | перезарядка магазина на 30 патронов |
| F | восстановить Руси |
| E | тестовое переключение этажей, если там есть support |
| P | перспективная / ортографическая проекция |
| V | показать/спрятать АК и руки |
| Esc | отпустить мышь |

World синтезирует один обычный 2D sprite; mesh GPU/depth не используется.
Игровые узлы и стрельба остаются скриптами. UI — RmlUi. Цветные примитивы без
текстур, статические circle/height queries с подшагами движения; нет прыжков,
PVS, падения или общего physics engine. Глубина Re2DSprite приближённая.

Контракт и ограничения: [RE2D_WORLD_GUIDE.md](RE2D_WORLD_GUIDE).
Регрессии: `tests/agent/re2d_bsp_combat_test.py` и отдельная стабильная fixture
`tests/fixtures/re2d_bsp_world` для проверки compositor.

Сглаженный anime-синтез для Руси и АК; кадр мира соответствует размеру окна
(лимит native World 1024 на ось). Руки — четыре arm/forearm части той же
развёртки Руси через `.re2dVisibleParts`, с сохранёнными socket/equip API.
M переключает захват мыши; Esc отпускает его. Viewmodel показывает оружие
вперёд в глубину кадра. Низкое разрешение 320×180 больше не принудительное.
