# 00 — Что это Технический прототип **боевого ядра** 2D-изометрического sci-fi horror roguelite. Доказывает ровно одну вещь: > отряд из 5 агентов ведёт себя как «умная текучая сущность», которая сама > расставляется так, чтобы атаковать и не задевать своих. Это ядро — вехи M0–M6, и в его рамках всё остальное намеренно не сделано. Поверх ядра достроен игровой слой: твари, которые идут и бьют, каталог оружия, снаряжение с инвентарём, главное меню и HUD ([13-combat.md](13-combat.md)). Прежняя песочница с мишенями никуда не делась — она живёт под `--sandbox`, и все критерии приёмки по-прежнему меряются на ней. ## Что есть - 5 агентов, один диск отряда (якорь), три пресета строя (клин / линия / кольцо). - Полностью **автоматическая** атака: игрок не нажимает «огонь» никогда. - Проверка линии огня по своим, по стенам и по дальности (спек 6.3). - Решатель огневых позиций с гистерезисом и коммитом (спек 6.5). - Резервирование линий огня и расступание из чужих секторов (спек 6.6). - Настоящие пули-снаряды, дружественный урон физически возможен (спек 6.9). - Ручное прицеливание с назначенной целью и `Tab` (спек 6.8). - **Ближний бой**: второй класс оружия с сектором замаха вместо линии огня, тремя фазами удара и своим, большим кругом вокруг диска ([11-melee.md](11-melee.md)). В спеке его нет. - Хоррор-слой: свет, туман войны, трассеры, напряжение ([10-atmosphere.md](10-atmosphere.md)). В спеке его тоже нет. - Debug-оверлей, метрики корректности, runtime-тюнинг. ## Чего нет и не будет Врагов с ИИ, лута, прогрессии, UI, меню, звука, ECS, сторонних библиотек. Мишени статичны и не атакуют — это шум для задачи. Свет, туман войны и эффекты в исходных рамках тоже стояли в этом списке, но появились вместе с хоррор-слоем. Правило, по которому их пустили: они живут только в `render/`, `RenderGame` принимает `const Game&`, и на симуляцию повлиять физически не могут. Ближний бой — единственное добавление, которое **меняет** правила, поэтому он проверяется собственными критериями приёмки (M7.1–M7.3). ## Технические рамки | | | |---|---| | Язык | C++17, без зависимостей кроме raylib | | Библиотека | raylib 6.0 (через CMake FetchContent, если нет системной) | | Рендер сцены | **собственный софтверный растеризатор**, ручная запись пикселей | | raylib используется для | окно, ввод, таймер, `UpdateTexture` + `DrawTexturePro`, debug-текст | | Разрешение | внутреннее 480×270, окно 1440×810 (целочисленный ×3) | | Симуляция | fixed timestep 60 Гц, детерминированная, рендер с интерполяцией | | Потоки | один | Ни одного raylib-примитива в отрисовке игровой сцены. Единственное исключение — debug-оверлей поверх уже отмасштабированного кадра, он dev-only и снимается по `F1`. ## Куда дальше - Собрать и запустить — [01-build-and-run.md](01-build-and-run.md). - Понять устройство кода — [02-architecture.md](02-architecture.md). - Понять **главное** (поведение отряда) — [05-squad-ai.md](05-squad-ai.md).