squad-proto/CLAUDE.md
z.kirill 4382af2322 Документация: границы движка, работа через модель, дизайн игры до лейтгейма
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-13 21:07:45 +03:00

12 KiB
Raw Blame History

CLAUDE.md — оглавление

Этот файл — только навигация. Содержание живёт в docs/, по одному файлу на тему. Читай нужный раздел, а не весь проект.

Документация

Файл О чём Когда открывать
docs/00-overview.md что это за прототип, границы задачи первое знакомство
docs/01-build-and-run.md сборка, запуск, управление, dev-режимы CLI собрать и потыкать
docs/02-architecture.md карта модулей, порядок шага симуляции, правила зависимостей перед любой правкой кода
docs/03-rendering.md софтверный фреймбуфер, изометрия, сортировка, спрайты рендер, камера, спрайты
docs/04-world.md тайлмап, планировка уровня, DDA-рейкаст, коллизии, мишени карта, LOS, коллизии
docs/05-squad-ai.md ядро: LaneClear, решатель огневых позиций, резерв линий, стрельба поведение отряда
docs/06-debug-and-tuning.md оверлей F1F4, метрики, runtime-тюнинг, --set отладка и балансировка
docs/07-milestones.md журнал вех M0M6: что сделано и чем проверено история и статус
docs/08-decisions.md отклонения от спека и почему, с замерами «почему тут не как в ТЗ»
docs/09-acceptance.md критерии приёмки (спек 11) и их текущие цифры приёмка
docs/10-atmosphere.md хоррор-слой: свет, туман войны, трассеры, напряжение картинка и атмосфера
docs/11-melee.md ближний бой: сектор удара, три фазы, свой круг, дуга клинки, классы оружия
docs/12-assets.md ассеты: конвейер SpriteForge, манифесты, загрузчик, hot reload добавить или пересобрать спрайт
docs/13-combat.md бой: каталог оружия, твари, снаряжение, меню и HUD оружие, враги, инвентарь, UI
docs/14-monsters.md твари-ассеты: Blender-риг на пять морфологий, листы, проверки нарисовать или пересобрать тварь
docs/15-engine-and-editor.md движок и редактор: три цели сборки, каталог сущностей, формат комнат, генератор уровней делать комнаты, менять генерацию, трогать границу движка
docs/16-descent.md спуск: глубина как первичное понятие, бюджет опасности, лут, кривая сложности менять сложность, добавлять тварей и лут
docs/17-extraction.md экстракшен: эвакуация, профиль и схрон, чекпоинты, что теряется правила забега, снаряжение между вылазками
docs/18-engine.md Tile2D: границы движка, проекции 2D, формат проекта, второй проект трогать движок, заводить проект, добавлять вид отображения
docs/19-agent.md движок и ЛЛМ: инструменты --tool, скиллы, терминал в редакторе работать над проектом через claude/codex
docs/20-gdd.md дизайн игры: акты, петли, рост отряда, закон масштаба, 200 часов что и зачем строим дальше
docs/21-damage.md урон: семь стихий, статусы, реакции, формулы, триггеры боевая математика
docs/22-loot.md добыча: редкости, аффиксы, артефакты, зачарования, материалы предметы и экономика
docs/23-endgame.md лейтгейм: Бездна, мутации, лидерборды, 262 ачивки всё после сотого этажа

Быстрые факты

  • Исходный спек: SQUAD_PROTOTYPE_SPEC.md — источник истины по правилам.
  • Сборка: cmake -S . -B build && cmake --build build --config Release. Целей три: tile2d (библиотека), build/bin/squad_proto.exe (игра), build/bin/tile2d_editor.exe (редактор комнат).
  • Содержимое щупают инструментами, а не глазами: tile2d_editor --tool help. Правка делается файлами (комнаты и каталог — текст), последствия читаются командой: --tool validate, --tool floor, --tool map (19-agent.md). Код возврата 1 = поломка.
  • В редакторе снизу терминал (клавиша `): те же инструменты, git, сборка и запросы к claude/codex прямо оттуда. Открытый проект уходит потомкам переменной TILE2D_PROJECT.
  • Самопроверка: squad_proto.exe --accept печатает PASS/FAIL по всем измеримым критериям. Содержимое проверяется отдельно: tile2d_editor.exe --check (комнаты и покрытие глубин), squad_proto.exe --descend 8 (спуск, эвакуация, круговой прогон профиля).
  • Унести можно только то, что на ВЫЖИВШИХ. Павший теряет своё, вайп теряет всё, достигнутая глубина не теряется никогда (17-extraction.md).
  • Закон масштаба: угроза растёт квадратично, сила отряда — линейно с затуханием, разрыв закрывается ЗНАНИЕМ (стихии, реакции, порядок целей). Числа не должны спасать — иначе хоррор кончается на сороковом этаже (20-gdd.md).
  • Ни одного чистого улучшения. Артефакт без цены становится обязательным, а обязательный предмет — это вырезанный слот (22-loot.md).
  • Глубина — первичное понятие. Вся кривая сложности живёт в одной функции DescribeFloor (engine/progression.h); размазывать её по генератору, каталогу и рендеру нельзя (16-descent.md).
  • Редактор линкуется только с движком. Обращение из editor/ к sim/, ai/ или ui/ — ошибка сборки, и так задумано (15-engine-and-editor.md). Редактор принадлежит движку: он открывает любой проект (--project <имя>) и ни одной игры по имени не знает.
  • Тексты НА ЭКРАНЕ — латиницей: встроенный шрифт raylib кириллицы не знает и рисует её вопросами. Комментарии и вывод в консоль остаются русскими.
  • Числа игры — в src/tuning.h, размеры движка — в engine/config.h. Магических констант по коду быть не должно.
  • src/ai/ не знает про рендер, изометрию и ввод. Это правило не нарушать.
  • Правило «не бить своих» одно на все классы оружия: у ствола это отрезок, у клинка — сектор. Ослаблять его нельзя нигде.
  • RenderGame принимает const Game& — эффекты физически не могут влиять на симуляцию.
  • Приёмка меряется в ПЕСОЧНИЦЕ: Game::combatMode выключен, в мире мишени, на бойцах нет снаряжения. Ломать это нельзя — иначе --accept меряет другое.

Ассеты

Спрайты собирает внешний CLI SpriteForge (C:\Users\uuu\Documents\spriteforge). Полный порядок работы — в docs/12-assets.md, здесь только запреты:

  • игра хранит манифесты assets/manifests/, исходники assets/sources/ и сгенерированный generated/spriteforge_assets.h; собранное лежит в build/sprites/ и в git не попадает;
  • не открывать build/sprites/*.sfa, .sfcache/, сгенерированные PNG и contact sheet: проверка только текстом — sf list, sf describe, sf ascii, sf validate, sf stats;
  • строковых ID ассетов в C++ нет — только константы SF_ASSET_*;
  • не править репозиторий SpriteForge ради одной игровой сущности.

Agent sprite production

For ANY request to create, change, replace, or add game art, follow .claude/commands/sprite.md (the /sprite workflow) automatically even when the user did not type the slash command. Never satisfy an art request with a one-off procedural runtime drawing.

When asked to create an agent, armor, or weapon sprite, use /agent-sprite and assets/agents/catalog.yaml; do not draw a one-off procedural humanoid. Agent art is an aligned paper-doll: body, armor and held weapon are separate 70x90, eight-direction layers sharing one rig and pivot. Run tools/build_agent_assets.ps1 after ingestion. Start the game with --sf-agents (or --sf) to see the generated layers. Blender is installed at C:\Program Files\Blender Foundation\Blender 5.2\blender.exe.

Monster sprite production

Enemies do NOT go through the agent paper-doll. They have their own Blender-first pipeline: assets/monsters/catalog.yaml, tools/blender/monster_rig.py, tools/monster_assets.py (monster-init, monster-render, monster-render-all, validate, sync). Five kinds, five distinct morphologies — never one humanoid recoloured five times. Asset ids are <kind>_<animation>; renaming them breaks tools/asset_coverage.py. Full rules in docs/14-monsters.md.