squad-proto/docs/01-build-and-run.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

6.4 KiB
Raw Blame History

01 — Сборка, запуск, управление

Требования

  • CMake 3.16+
  • Компилятор с C++17. Проверено на MSVC 14.44 (Visual Studio 2022, x64).
  • Интернет при первой конфигурации: raylib 6.0 качается через FetchContent. Если в системе уже стоит raylib 6.x, find_package(raylib 6) возьмёт её и ничего не качает.

Сборка

cmake -S . -B build            # разово; тянет и собирает raylib (~1-2 мин)
cmake --build build --config Release --parallel

Бинарник: build/bin/squad_proto.exe (при любом генераторе, включая multi-config).

Debug-сборка (--config Debug) кладёт бинарник туда же и идёт в 60 fps, так что проверять правки стоит именно в ней: MSVC включает проверки итераторов и ловит выходы за границы, которых в Release не видно.

В VS Code: F5 — конфигурация Run (Release) из .vscode/launch.json, сборка идёт задачей build release. Есть также задачи accept и headless 180s.

Makefile в корне остался от исходного шаблона raylib-vscode и не используется — он ссылается на C:/raylib/w64devkit. Актуальная сборка только через CMake.

Если CMake ругается на генератор

CMake Error: Error: generator : Visual Studio 17 2022
Does not match the generator used previously: Visual Studio 18 2026

Каталог build/ привязан к конкретному генератору, и на машине с несколькими Visual Studio его легко получить несогласованным: обычный cmd.exe и Developer Command Prompt выбирают разные версии по умолчанию. Лечится сносом каталога — он целиком производный, в нём нет ничего своего:

rmdir /s /q build          # cmd
rm -rf build               # bash
cmake -S . -B build

Чтобы зафиксировать версию явно, передай генератор при первой конфигурации:

cmake -S . -B build -G "Visual Studio 17 2022" -A x64

Дальше cmake -S . -B build без -G будет переиспользовать генератор из кэша. build/ намеренно в .gitignore — в репозитории его быть не должно.

Управление

Клавиша Действие
WASD движение диска (якоря отряда) в экранных осях
Shift (удерж.) рывок (базовый шаг намеренно медленный)
Space переключить режим ручного прицеливания
/ в ручном режиме — поворот вектора прицела
Tab сменить назначенную цель (внутри конуса прицела)
1 / 2 / 3 строй: клин / линия / кольцо
F1 оверлей вкл/выкл
F2 линии огня
F3 кандидаты решателя и их оценки
F4 метрики
F5 выключить хоррор-слой (свет/туман/пост)
F6 показать диски обзора
[ / ] выбрать параметр тюнинга
- / = изменить выбранный параметр
R сброс уровня
Esc выход

Стрельба всегда автоматическая, клавиши огня нет ни в одном режиме. Ближний бой тоже: бойцы с клинком сами доходят до цели и бьют, пока она внутри их круга (11-melee.md).

Диск намеренно быстрее бойцов и держится к ним на поводке: команда читается мгновенно, а средняя скорость похода всё равно определяется ногами отряда.

Dev-режимы командной строки

Симуляция детерминирована и не зависит от рендера, поэтому её можно гонять без окна.

Аргумент Что делает
--accept прогоняет сценарии критериев приёмки (спек 11) и печатает PASS/FAIL
--headless <сек> прогон по маршруту без окна + метрики каждые 10 с
--probe к --headless: подробности по каждому агенту на стоянках
--no-solver отключить решатель огневых позиций (A/B сравнение)
--no-laneavoid отключить расступание из чужих линий (A/B сравнение)
--melee N сколько слотов строя держат клинок (по умолчанию 2, 0 = все стрелки)
--set имя=значение подкрутить любой параметр из TUNABLES без пересборки
--shot [кадров] [файл] снять скриншот через N кадров и выйти
--clean стартовать без оверлея — чистый кадр для скриншотов

Примеры:

squad_proto.exe --accept
squad_proto.exe --headless 300
squad_proto.exe --headless 300 --no-solver --no-laneavoid    # каким прототип был бы без ядра
squad_proto.exe --headless 300 --melee 0                     # чистый отряд стрелков
squad_proto.exe --headless 300 --set safetyMargin=0.25 --set laneReserve=2.0
squad_proto.exe --clean --shot 220 melee.png                 # кадр без отладки

Код прогонов — src/debug/harness.cpp, маршрут и сценарии описаны там же. Что означают цифры в выводе — 06-debug-and-tuning.md.