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

4.2 KiB
Raw Blame History

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.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.

Куда дальше