Принцип
Бой идёт автоматически и полностью автономно: «Сосуды» сражаются самостоятельно согласно настроенным правилам. Ввода игрока во время боя нет — все решения принимаются в фазе подготовки. Бой намеренно простой и читаемый.
Решено (2026-07): заклинания Гильдмастера и любые другие способности «вне юнитов» вырезаны. Бой — чистый результат подготовки: расстановки, распределения Мементо, AI-профилей, предметов и билда. Это делает исход полностью объяснимым решениями игрока (см. guildmaster).
Референс: Teamfight Manager.
Подготовка к бою
Перед каждым сражением игроки:
- Распределяют Мементо между «Сосудами»
- Выбирают позиции на поле (дальник / ближник)
- Настраивают приоритеты целей
- Опционально задают простые AI-команды для «Сосудов»
Ход боя
- «Сосуды» атакуют и используют способности своих Мементо автоматически
- Игрок наблюдает за боем и не вмешивается в него
- Бой можно ставить на паузу — это средство просмотра и разбора (осмотреться, прочитать состояние), а не боевая механика
Способности
Активные способности Мементо:
- перезаряжаются по времени (cooldown в секундах);
- или требуют особый ресурс Мементо (мана, ярость и т.п.).
Типы боёв
| Тип | Описание |
|---|---|
| Обычный бой | Сражение с безымянными гильдиями, монстрами (волки, слаймы и т.д.) |
| Элитный бой | Сражение с известной гильдией; есть короткое приветствие и предыстория |
| Финал акта | Бой-босс против «гильдии-финалиста» |
Итог боя
После сражения:
- Награды — Мементо, ресурсы, золото
- Травмы — негативные последствия для «Сосудов» (если есть)
- Обновление билда — перераспределение Мементо и тактики
Перезапуск
Перезапуски — ограниченный ресурс акта: у игрока есть 2 перезапуска на акт (число — баланс, живёт в GameConfig). Каждый перезапуск боя тратит одну попытку из пула. В начале каждого акта пул сбрасывается до 2 — неизрасходованные попытки не переносятся и не копятся.
Поражение при пустом пуле = конец забега. Перезапуски — единственная страховка от проигрыша; кончились — следующее поражение завершает забег.
Перезапуск — это тот же самый бой. Противники, их расстановка и эффекты не меняются между попытками. Меняется только то, что игрок сам переделал в подготовке: распределение Мементо, позиции на арене, AI-профили, предметы.
Смысл: перезапуск — это отладка билда, а не переролл. Игрок должен видеть, что победу принесло его изменение, а не другой расклад. Если бы каждая попытка была новым боем, любое поражение списывалось бы на невезение, и петля обучения ломалась бы.
Цена перезапуска — сам дефицит пула, а не штраф. Осознанно не берём золото / урезание награды / травму: они ослабляют игрока после поражения и рискуют «молчаливой спиралью смерти». Дефицитный пул наказывает исчерпанием страховки, но следующую попытку не делает слабее — и создаёт решение на уровне акта: приберечь перезапуск на элитку/босса или потратить на обычный бой.
Идея (не решено): оформить трату перезапуска как кооп-ритуал воскрешения — короткий совместный QTE-кликер, чтобы «поднять павших» ощущалось командным усилием, а не кликом кнопки. Оговорки (не на каждый ретрай; церемония, не гейт исхода) — Meta - Roadmap Блок 3.
Канон-дом правила перезапуска — этот раздел
Тех-вика (флоу забега (код
Assets/_Project/Scripts/Game/Flow/) §6) описывает реализациюBattleFlow, но держит прежнюю дизайн-модель: «до 2 ретраев на каждый бой», «3-е поражение финальное», «цена ретрая — TBD». Всё это замещено решением 2026-07-15/65 (пул на акт, цена = сама попытка). Инженерная часть того раздела — саб-сидrunSeed + индекс_боябез номера попытки — актуальна и живёт там по праву.
UI и статистика
- Полосы здоровья (HP bar)
- Числа урона (damage numbers)
- Таблица эффективности бойцов:
- Урон нанесён
- Урон поглощён
- Исцеление / щиты
- Контроль (CC)
Статы юнитов
Боевая мощь юнита описывается набором из 30 числовых статов (выживаемость, атака, исцеление/щиты, снаряд, подвижность, эффективность эффектов, ресурс). База собирается каскадом: StatsConfig → Боевой класс → Персона (Мементо) → «Сосуд». Базу HP и скорости передвижения задаёт класс (Танк 150%/85%, Брузер 100%/100% — эталон, Убийца 75%/110%, бэклайн 65%/75%), Мементо даёт дельту героя поверх; перки «Сосуда», предметы и эффекты — модификаторы сверху. У врагов между классом и юнитом стоят ещё Вид и Подвид. Дизайн-описание «что каждый стат значит для билда» — stats; техническая спецификация (имена, формулы, клампы) — Planning - Stat System.
Ключевое для дизайна боя: детерминированность без крита и уклонения (читаемость + честное сравнение AI-профилей), процентная броня (убывающая отдача, не блокирует 100%), двусторонние урон и исцеление/щиты, а эффективности эффектов меняют только длительность (удлинение HoT/DoT пропорционально увеличивает суммарный итог).
Позиционика
Юниты не стоят в ряд перед целью: у каждой цели есть слоты боевого контакта по окружности (слот — это сектор направления, а не точка, поэтому копейщик держит свою дистанцию), а удар с фланга и тыла даёт бонус: +20% обычным юнитам, +40% фланкёрам.
Окружение — общая механика всех мили-классов: спереди занято — заходишь сбоку. Целенаправленный обход за спину — не отдельная механика, а AI-тактика выбора маршрута у Убийцы («идти дольше, но ударить сильнее»), и включается, только если он уже дерётся и фокусит кого-то ещё.
Зона контроля отклонена окончательно — проход сквозь строй свободный, юниты не держат друг друга. Линию фронта держит угроза, а не стена: автоатака танка переводит фокус цели на себя (5 сек, на всех кроме танков), а идущего мимо танк пытается перехватить и ударить. Снаряды летят сквозь союзников.
Дизайн-проработка, каталог поведения по классам и правила «чтобы не бесило» — Combat - Positioning (круг вердиктов закрыт 2026-07-26; числа черновые). В коде позиционика пока не реализована — это принятый дизайн, а не существующее поведение.
Барьеры
Решено 2026-07-26. В бою есть барьеры — объекты в мире, а не числа на юните: они перехватывают то, что летит через них, имеют собственный запас прочности и могут быть обойдены. Это отдельная механика, а не разновидность Щита: щит — буфер HP на цели, барьер — пространственное правило.
Форм две, и они закрывают разные угрозы:
| Форма | Ловит | Вскрывается |
|---|---|---|
| Стена (дуга) | всё, что летит по траектории: снаряды, линии, лучи | обойти — зайти так, чтобы линия огня её не пересекала |
| Купол (окружность, носимый) | всё, что приходит площадью извне: круговые АОЕ, залпы по кластеру | войти внутрь — под куполом он уже не помогает |
Тела ходят сквозь барьеры: линию фронта по-прежнему держит угроза, а не стена. Пробитие — явное свойство отдельных источников («игнорирует барьеры»), а не побочный эффект школы урона.
Полные правила обеих форм, требования к AI и что осталось на баланс — Combat - Barriers. План реализации — Planning - Barriers; заход идёт после позиционики. В коде барьеров пока нет.
Таймер боя и правило затягивания
Сделано: бой ведёт счётчик прошедшего боевого времени (по симуляционным тикам, а не по стенным часам — пауза и slowmo его не искажают). Показывается в верхней панели HUD.
Ориентир нормального темпа — 30-60 секунд (уточнено 2026-07-28 по первому замеру TTK; прежние 90 секунд не соответствовали ничему в игре).
Замер стендом, круговые бои всего ростера: медиана боя 20.3 с в дуэлях, 21.3 с в тройках, 28.8 с в отрядах. Половина боёв укладывается в 16-35 секунд. То есть бои у нас не затянуты, а короче прежнего норматива втрое — и правило анти-затягивания должно срабатывать на хвосте, а не на типичном бою.
Сделано (2026-07-28) — рампа урона:
- С 90-й секунды наносимый урон растёт на +5% за каждую секунду сверх порога, накопительно и одинаково для обеих сторон. К 150-й секунде это учетверённый урон.
- Растёт только урон. Лечение, щиты, реген — нет. В этой асимметрии весь смысл: клинч «танк+хил против танк+хил» бессмертен ровно до тех пор, пока урон ниже лечения, и никакое ожидание его не решает. Ускорение симуляции здесь бесполезно — оно крутит быстрее ту же патовую формулу.
- Числа живут в
SimTuningConfig(вкладка «Овертайм»), ноль в рампе = овертайм выключен. - Стенд ведёт колонку Overtime% — долю боёв, доехавших до порога. Овертайм обязан оставаться редким: его рост читается как сигнал о поломке TTK, а не как повод крутить рампу.
Решено, но пока НЕ реализовано:
- Ускорение ×2 после порога — чтобы застой не превращался в пытку ожиданием. Это комфорт зрителя, не баланс: на исход не влияет.
- Ещё через 60 секунд (т.е. на ~150-й) — ничья. Ничья засчитывается игрокам как поражение (никто не победил → в ретрай, см. teams-not-player-team в модели исхода).
Техническая модель (кратко)
- Поле боя — непрерывное 2D (не клеточное): дальности и AOE считаются в мировых координатах (радиусы, точки), размер юнита влияет на дальность.
- Бой — детерминированная симуляция с фиксированным тиком (без Unity-физики), что даёт реплеи, сравнение AI-профилей и синхронный мультиплеер.
- AI «Сосудов» (фокус цели, отступление, условия каста, позиционирование) строится по схеме Filter / Score / Override — настраивается вне боя, в бою не меняется.
Детали реализации — Journal - Library Picks And The Alternatives We Turned Down и Reference - Seed & RNG. Полный список статов — Planning - Stat System. Сырые заметки по AI и статам — Meta - Open Forks.