Тактический отряд с автоматическим огнём в изометрии, собственный софтверный растеризатор (raylib только окно, ввод и финальный блит). Ядро (спек, раздел 6): - LaneClear: проверка линии огня по своим, стенам и дальности; - решатель огневых позиций с гистерезисом и коммитом; - резервирование линий огня и расступание из чужих секторов; - пули-снаряды, дружественный урон физически возможен. Хоррор-слой (render-only): свет и туман войны с памятью карты, светящиеся трассеры, кровь, виньетка, зерно, напряжение. Ближний бой: сектор удара, три фазы, связка из трёх ударов, своя дисциплина «не бить сквозь своего». Проверка: squad_proto.exe --accept прогоняет критерии приёмки раздела 11 плюс блок M7 по ближнему бою — все PASS, FRIENDLY_HITS = 0 за 3 минуты боя. Сборка: cmake -S . -B build && cmake --build build --config Release raylib 6.0 подтягивается через FetchContent. Документация — CLAUDE.md как оглавление, содержание в docs/. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
4.2 KiB
00 — Что это
Технический прототип боевого ядра 2D-изометрического sci-fi horror roguelite. Доказывает ровно одну вещь:
отряд из 5 агентов ведёт себя как «умная текучая сущность», которая сама расставляется так, чтобы атаковать и не задевать своих.
Всё остальное — вне рамок и намеренно не сделано.
Что есть
- 5 агентов, один диск отряда (якорь), три пресета строя (клин / линия / кольцо).
- Полностью автоматическая атака: игрок не нажимает «огонь» никогда.
- Проверка линии огня по своим, по стенам и по дальности (спек 6.3).
- Решатель огневых позиций с гистерезисом и коммитом (спек 6.5).
- Резервирование линий огня и расступание из чужих секторов (спек 6.6).
- Настоящие пули-снаряды, дружественный урон физически возможен (спек 6.9).
- Ручное прицеливание с назначенной целью и
Tab(спек 6.8). - Ближний бой: второй класс оружия с сектором замаха вместо линии огня, тремя фазами удара и своим, большим кругом вокруг диска (11-melee.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.
- Понять устройство кода — 02-architecture.md.
- Понять главное (поведение отряда) — 05-squad-ai.md.