squad-proto/docs/00-overview.md
z.kirill 7880f275bd Прототип боевого ядра: отряд, хоррор-слой, ближний бой
Тактический отряд с автоматическим огнём в изометрии, собственный
софтверный растеризатор (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>
2026-08-03 13:00:49 +03:00

58 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 00 — Что это
Технический прототип **боевого ядра** 2D-изометрического sci-fi horror roguelite.
Доказывает ровно одну вещь:
> отряд из 5 агентов ведёт себя как «умная текучая сущность», которая сама
> расставляется так, чтобы атаковать и не задевать своих.
Всё остальное — вне рамок и намеренно не сделано.
## Что есть
- 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.1M7.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).