Тактический отряд с автоматическим огнём в изометрии, собственный софтверный растеризатор (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>
6.4 KiB
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.