Прототип боевого ядра: отряд, хоррор-слой, ближний бой
Тактический отряд с автоматическим огнём в изометрии, собственный
софтверный растеризатор (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 17:00:49 +07:00
|
|
|
|
# 00 — Что это
|
|
|
|
|
|
|
|
|
|
|
|
Технический прототип **боевого ядра** 2D-изометрического sci-fi horror roguelite.
|
|
|
|
|
|
Доказывает ровно одну вещь:
|
|
|
|
|
|
|
|
|
|
|
|
> отряд из 5 агентов ведёт себя как «умная текучая сущность», которая сама
|
|
|
|
|
|
> расставляется так, чтобы атаковать и не задевать своих.
|
|
|
|
|
|
|
Документация: границы движка, работа через модель, дизайн игры до лейтгейма
18-engine.md границы Tile2D, проекции 2D, формат проекта, второй проект
19-agent.md инструменты --tool, скиллы, терминал в редакторе
20-gdd.md акты, петли, рост отряда, закон масштаба, бюджет 200 часов
21-damage.md семь стихий, статусы, десять реакций, формулы, триггеры
22-loot.md редкости, аффиксы, артефакты, зачарования, материалы
23-endgame.md Бездна, мутации, лидерборды, 262 ачивки
Плюс правки 01/02/07/15/16/17 под переехавшие пути и новые правила забега.
Дизайнерская часть держится на одном законе: угроза растёт квадратично, сила
отряда — линейно с затуханием, разрыв закрывается ЗНАНИЕМ, а не числами. Из
него выведены и экономика опыта (41 млн против 44 млн дохода), и то, почему
реакции считаются от глубины, а не от урона оружия, и почему в Бездне
множитель HP разрешён, а во всём авторском контенте запрещён.
.claude/commands: скиллы /tile2d, /room, /floor — правила этого движка,
которые нельзя вывести из кода. Главное записано первым: не отчитываться об
успехе без прохода --tool validate.
Числа в этих документах — вход для инструментов, а не украшение. Расхождение
между таблицей и выводом инструмента означает, что неправ документ.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 01:07:45 +07:00
|
|
|
|
Это ядро — вехи M0–M6, и в его рамках всё остальное намеренно не сделано.
|
|
|
|
|
|
|
|
|
|
|
|
Поверх ядра достроен игровой слой: твари, которые идут и бьют, каталог оружия,
|
|
|
|
|
|
снаряжение с инвентарём, главное меню и HUD ([13-combat.md](13-combat.md)).
|
|
|
|
|
|
Прежняя песочница с мишенями никуда не делась — она живёт под `--sandbox`,
|
|
|
|
|
|
и все критерии приёмки по-прежнему меряются на ней.
|
Прототип боевого ядра: отряд, хоррор-слой, ближний бой
Тактический отряд с автоматическим огнём в изометрии, собственный
софтверный растеризатор (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 17:00:49 +07:00
|
|
|
|
|
|
|
|
|
|
## Что есть
|
|
|
|
|
|
|
|
|
|
|
|
- 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.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](01-build-and-run.md).
|
|
|
|
|
|
- Понять устройство кода — [02-architecture.md](02-architecture.md).
|
|
|
|
|
|
- Понять **главное** (поведение отряда) — [05-squad-ai.md](05-squad-ai.md).
|